3232import org .springframework .context .annotation .Import ;
3333import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
3434import org .springframework .security .config .annotation .web .configuration .WebSecurityConfigurerAdapter ;
35+ import org .springframework .security .oauth2 .client .InMemoryOAuth2AuthorizedClientService ;
36+ import org .springframework .security .oauth2 .client .OAuth2AuthorizedClientService ;
3537import org .springframework .security .oauth2 .client .registration .ClientRegistration ;
3638import org .springframework .security .oauth2 .client .registration .ClientRegistrationRepository ;
3739import org .springframework .security .oauth2 .client .registration .InMemoryClientRegistrationRepository ;
@@ -55,7 +57,7 @@ public class OAuth2WebSecurityConfigurationTests {
5557 private final ApplicationContextRunner contextRunner = new ApplicationContextRunner ();
5658
5759 @ Test
58- public void securityConfigurerRegistersClientRegistrations () throws Exception {
60+ public void securityConfigurerConfiguresOAuth2Login () throws Exception {
5961 this .contextRunner .withUserConfiguration (ClientRepositoryConfiguration .class ,
6062 OAuth2WebSecurityConfiguration .class ).run ((context ) -> {
6163 ClientRegistrationRepository expected = context
@@ -88,6 +90,34 @@ public void securityConfigurerBacksOffWhenOtherWebSecurityAdapterPresent()
8890 .run ((context ) -> assertThat (getAuthCodeFilters (context )).isEmpty ());
8991 }
9092
93+ @ Test
94+ public void configurationRegistersAuthorizedClientServiceBean () throws Exception {
95+ this .contextRunner
96+ .withUserConfiguration (ClientRepositoryConfiguration .class ,
97+ OAuth2WebSecurityConfiguration .class )
98+ .run (context -> {
99+ OAuth2AuthorizedClientService bean = context .getBean (OAuth2AuthorizedClientService .class );
100+ OAuth2AuthorizedClientService authorizedClientService = (OAuth2AuthorizedClientService ) ReflectionTestUtils
101+ .getField (getAuthCodeFilters (context ).get (0 ),
102+ "authorizedClientService" );
103+ assertThat (authorizedClientService ).isEqualTo (bean );
104+ });
105+ }
106+
107+ @ Test
108+ public void authorizedClientServiceBeanIsConditionalOnMissingBean () throws Exception {
109+ this .contextRunner
110+ .withUserConfiguration (OAuth2AuthorizedClientServiceConfiguration .class ,
111+ OAuth2WebSecurityConfiguration .class )
112+ .run (context -> {
113+ OAuth2AuthorizedClientService bean = context .getBean (OAuth2AuthorizedClientService .class );
114+ OAuth2AuthorizedClientService authorizedClientService = (OAuth2AuthorizedClientService ) ReflectionTestUtils
115+ .getField (getAuthCodeFilters (context ).get (0 ),
116+ "authorizedClientService" );
117+ assertThat (authorizedClientService ).isEqualTo (bean );
118+ });
119+ }
120+
91121 @ SuppressWarnings ("unchecked" )
92122 private List <Filter > getAuthCodeFilters (AssertableApplicationContext context ) {
93123 FilterChainProxy filterChain = (FilterChainProxy ) context
@@ -176,4 +206,15 @@ static class TestWebSecurityConfigurerConfig extends WebSecurityConfigurerAdapte
176206
177207 }
178208
209+ @ Configuration
210+ @ Import ({ ClientRepositoryConfiguration .class })
211+ static class OAuth2AuthorizedClientServiceConfiguration {
212+
213+ @ Bean
214+ public OAuth2AuthorizedClientService testAuthorizedClientService (ClientRegistrationRepository clientRegistrationRepository ) {
215+ return new InMemoryOAuth2AuthorizedClientService (clientRegistrationRepository );
216+ }
217+
218+ }
219+
179220}
0 commit comments