diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfiguration.java index f77ed25007c..3ec5147d9f3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfiguration.java @@ -61,6 +61,7 @@ public class AuthenticationManagerConfiguration { .getLog(AuthenticationManagerConfiguration.class); @Bean + @ConditionalOnMissingBean(type = "org.springframework.security.oauth2.client.registration.ClientRegistrationRepository") public InMemoryUserDetailsManager inMemoryUserDetailsManager( SecurityProperties properties, ObjectProvider passwordEncoder) throws Exception { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfigurationTests.java index 081d867391e..3e33ccfb35c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/servlet/AuthenticationManagerConfigurationTests.java @@ -26,6 +26,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import static org.assertj.core.api.Assertions.assertThat; @@ -68,6 +69,14 @@ public class AuthenticationManagerConfigurationTests { testPasswordEncoding(TestConfigWithPasswordEncoder.class, "secret", "secret"); } + @Test + public void userDetailsServiceWhenClientRegistrationRepositoryBeanPresent() { + this.contextRunner + .withUserConfiguration(TestConfigWithClientRegistrationRepository.class, + AuthenticationManagerConfiguration.class) + .run(((context) -> assertThat(context).doesNotHaveBean(InMemoryUserDetailsManager.class))); + } + private void testPasswordEncoding(Class configClass, String providedPassword, String expectedPassword) { this.contextRunner @@ -101,4 +110,15 @@ public class AuthenticationManagerConfigurationTests { } + @Configuration + @Import(TestSecurityConfiguration.class) + protected static class TestConfigWithClientRegistrationRepository { + + @Bean + public ClientRegistrationRepository clientRegistrationRepository() { + return mock(ClientRegistrationRepository.class); + } + + } + }