Merge pull request #13870 from ayudovin

* gh-13870:
  Polish "Register OAuth2AuthorizedClientRepository bean"
  Register OAuth2AuthorizedClientRepository bean
This commit is contained in:
Madhura Bhave
2018-07-24 13:32:19 -07:00
2 changed files with 45 additions and 0 deletions

View File

@@ -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.OAuth2AuthorizedClientService;
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.
@@ -44,6 +46,14 @@ class OAuth2WebSecurityConfiguration {
return new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository);
}
@Bean
@ConditionalOnMissingBean
public OAuth2AuthorizedClientRepository authorizedClientRepository(
OAuth2AuthorizedClientService authorizedClientService) {
return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(
authorizedClientService);
}
@Configuration
@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
static class OAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

View File

@@ -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.ClientRegistrationRepository;
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.OAuth2AuthorizedClientRepository;
import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.web.FilterChainProxy;
@@ -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
public void securityConfigurerBacksOffWhenOtherWebSecurityAdapterPresent() {
this.contextRunner.withUserConfiguration(TestWebSecurityConfigurerConfig.class,
@@ -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")
private List<Filter> getAuthCodeFilters(AssertableApplicationContext context) {
FilterChainProxy filterChain = (FilterChainProxy) context
@@ -212,4 +234,17 @@ public class OAuth2WebSecurityConfigurationTests {
}
@Configuration
@Import(ClientRepositoryConfiguration.class)
static class OAuth2AuthorizedClientRepositoryConfiguration {
@Bean
public OAuth2AuthorizedClientRepository testAuthorizedClientRepository(
OAuth2AuthorizedClientService authorizedClientService) {
return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(
authorizedClientService);
}
}
}