Register OAuth2AuthorizedClientRepository bean

This commit is contained in:
artsiom 2018-07-23 18:51:15 +03:00 committed by Madhura Bhave
parent b163120ece
commit 2dcf19938d
2 changed files with 47 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,13 @@ 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

@ -24,6 +24,7 @@ import javax.servlet.Filter;
import org.junit.Test;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
@ -38,7 +39,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 +93,19 @@ public class OAuth2WebSecurityConfigurationTests {
});
}
@Test
public void configurationRegistersAuthorizedRepositoryServiceBean() {
this.contextRunner.withUserConfiguration(ClientRepositoryConfiguration.class,
OAuth2WebSecurityConfiguration.class).run((context) -> {
OAuth2AuthorizedClientRepository bean = context
.getBean(OAuth2AuthorizedClientRepository.class);
OAuth2AuthorizedClientRepository authorizedClientService = (OAuth2AuthorizedClientRepository) ReflectionTestUtils
.getField(getAuthCodeFilters(context).get(0),
"authorizedClientRepository");
assertThat(authorizedClientService).isEqualTo(bean);
});
}
@Test
public void securityConfigurerBacksOffWhenOtherWebSecurityAdapterPresent() {
this.contextRunner.withUserConfiguration(TestWebSecurityConfigurerConfig.class,
@ -112,6 +128,21 @@ public class OAuth2WebSecurityConfigurationTests {
});
}
@Test
public void authorizedClientRepositoryBeanIsConditionalOnMissingBean() {
this.contextRunner
.withUserConfiguration(OAuth2AuthorizedClientServiceConfiguration.class,
OAuth2WebSecurityConfiguration.class)
.run((context) -> {
OAuth2AuthorizedClientRepository bean = context
.getBean(OAuth2AuthorizedClientRepository.class);
OAuth2AuthorizedClientRepository authorizedClientService = (OAuth2AuthorizedClientRepository) ReflectionTestUtils
.getField(getAuthCodeFilters(context).get(0),
"authorizedClientRepository");
assertThat(authorizedClientService).isEqualTo(bean);
});
}
@SuppressWarnings("unchecked")
private List<Filter> getAuthCodeFilters(AssertableApplicationContext context) {
FilterChainProxy filterChain = (FilterChainProxy) context
@ -210,6 +241,13 @@ public class OAuth2WebSecurityConfigurationTests {
clientRegistrationRepository);
}
@Bean
@ConditionalOnMissingBean
public OAuth2AuthorizedClientRepository testAuthorizedClientRepository(
OAuth2AuthorizedClientService authorizedClientService) {
return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(authorizedClientService);
}
}
}