From 2dcf19938daf139550d90fcc60f4dc2533b3d9b1 Mon Sep 17 00:00:00 2001 From: artsiom Date: Mon, 23 Jul 2018 18:51:15 +0300 Subject: [PATCH 1/2] Register OAuth2AuthorizedClientRepository bean --- .../OAuth2WebSecurityConfiguration.java | 9 +++++ .../OAuth2WebSecurityConfigurationTests.java | 38 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java index 8ece42f643..da35e800b3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java @@ -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 { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java index 36990dcb8b..44a9e4cb0e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java @@ -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 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); + } + } } From f5617601aa2b2457910dc00b52db05af34641bb3 Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Tue, 24 Jul 2018 13:31:03 -0700 Subject: [PATCH 2/2] Polish "Register OAuth2AuthorizedClientRepository bean" Closes gh-13870 --- .../OAuth2WebSecurityConfiguration.java | 3 +- .../OAuth2WebSecurityConfigurationTests.java | 43 +++++++++---------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java index da35e800b3..ffd1f484b7 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfiguration.java @@ -50,7 +50,8 @@ class OAuth2WebSecurityConfiguration { @ConditionalOnMissingBean public OAuth2AuthorizedClientRepository authorizedClientRepository( OAuth2AuthorizedClientService authorizedClientService) { - return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(authorizedClientService); + return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository( + authorizedClientService); } @Configuration diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java index 44a9e4cb0e..20621acd90 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2WebSecurityConfigurationTests.java @@ -24,7 +24,6 @@ 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; @@ -94,16 +93,12 @@ 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); - }); + public void configurationRegistersAuthorizedClientRepositoryBean() { + this.contextRunner + .withUserConfiguration(ClientRepositoryConfiguration.class, + OAuth2WebSecurityConfiguration.class) + .run((context) -> assertThat(context) + .hasSingleBean(OAuth2AuthorizedClientRepository.class)); } @Test @@ -130,16 +125,12 @@ 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); + this.contextRunner.withUserConfiguration( + OAuth2AuthorizedClientRepositoryConfiguration.class, + OAuth2WebSecurityConfiguration.class).run((context) -> { + assertThat(context) + .hasSingleBean(OAuth2AuthorizedClientRepository.class); + assertThat(context).hasBean("testAuthorizedClientRepository"); }); } @@ -241,11 +232,17 @@ public class OAuth2WebSecurityConfigurationTests { clientRegistrationRepository); } + } + + @Configuration + @Import(ClientRepositoryConfiguration.class) + static class OAuth2AuthorizedClientRepositoryConfiguration { + @Bean - @ConditionalOnMissingBean public OAuth2AuthorizedClientRepository testAuthorizedClientRepository( OAuth2AuthorizedClientService authorizedClientService) { - return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(authorizedClientService); + return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository( + authorizedClientService); } }