Commit a760f362 authored by Madhura Bhave's avatar Madhura Bhave

Merge pull request #13870 from ayudovin

* gh-13870:
  Polish "Register OAuth2AuthorizedClientRepository bean"
  Register OAuth2AuthorizedClientRepository bean
parents b163120e f5617601
...@@ -25,6 +25,8 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur ...@@ -25,6 +25,8 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur
import org.springframework.security.oauth2.client.InMemoryOAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.InMemoryOAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.AuthenticatedPrincipalOAuth2AuthorizedClientRepository;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
/** /**
* {@link WebSecurityConfigurerAdapter} to add OAuth client support. * {@link WebSecurityConfigurerAdapter} to add OAuth client support.
...@@ -44,6 +46,14 @@ class OAuth2WebSecurityConfiguration { ...@@ -44,6 +46,14 @@ class OAuth2WebSecurityConfiguration {
return new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository); return new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository);
} }
@Bean
@ConditionalOnMissingBean
public OAuth2AuthorizedClientRepository authorizedClientRepository(
OAuth2AuthorizedClientService authorizedClientService) {
return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(
authorizedClientService);
}
@Configuration @Configuration
@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class) @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
static class OAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { static class OAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
......
...@@ -38,7 +38,9 @@ import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; ...@@ -38,7 +38,9 @@ import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository; import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.AuthenticatedPrincipalOAuth2AuthorizedClientRepository;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter; import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter; import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter;
import org.springframework.security.oauth2.core.AuthorizationGrantType; import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.web.FilterChainProxy; import org.springframework.security.web.FilterChainProxy;
...@@ -90,6 +92,15 @@ public class OAuth2WebSecurityConfigurationTests { ...@@ -90,6 +92,15 @@ public class OAuth2WebSecurityConfigurationTests {
}); });
} }
@Test
public void configurationRegistersAuthorizedClientRepositoryBean() {
this.contextRunner
.withUserConfiguration(ClientRepositoryConfiguration.class,
OAuth2WebSecurityConfiguration.class)
.run((context) -> assertThat(context)
.hasSingleBean(OAuth2AuthorizedClientRepository.class));
}
@Test @Test
public void securityConfigurerBacksOffWhenOtherWebSecurityAdapterPresent() { public void securityConfigurerBacksOffWhenOtherWebSecurityAdapterPresent() {
this.contextRunner.withUserConfiguration(TestWebSecurityConfigurerConfig.class, this.contextRunner.withUserConfiguration(TestWebSecurityConfigurerConfig.class,
...@@ -112,6 +123,17 @@ public class OAuth2WebSecurityConfigurationTests { ...@@ -112,6 +123,17 @@ public class OAuth2WebSecurityConfigurationTests {
}); });
} }
@Test
public void authorizedClientRepositoryBeanIsConditionalOnMissingBean() {
this.contextRunner.withUserConfiguration(
OAuth2AuthorizedClientRepositoryConfiguration.class,
OAuth2WebSecurityConfiguration.class).run((context) -> {
assertThat(context)
.hasSingleBean(OAuth2AuthorizedClientRepository.class);
assertThat(context).hasBean("testAuthorizedClientRepository");
});
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private List<Filter> getAuthCodeFilters(AssertableApplicationContext context) { private List<Filter> getAuthCodeFilters(AssertableApplicationContext context) {
FilterChainProxy filterChain = (FilterChainProxy) context FilterChainProxy filterChain = (FilterChainProxy) context
...@@ -212,4 +234,17 @@ public class OAuth2WebSecurityConfigurationTests { ...@@ -212,4 +234,17 @@ public class OAuth2WebSecurityConfigurationTests {
} }
@Configuration
@Import(ClientRepositoryConfiguration.class)
static class OAuth2AuthorizedClientRepositoryConfiguration {
@Bean
public OAuth2AuthorizedClientRepository testAuthorizedClientRepository(
OAuth2AuthorizedClientService authorizedClientService) {
return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(
authorizedClientService);
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment