From 53c04499b4d279b7a2d6021107086b3ebc8882ed Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 25 Aug 2026 12:41:23 -0700 Subject: [PATCH] Create properties despite used-defined ClientRegistrationRepository Update `OAuth2ClientConfigurations` so that properties are created regardless of a user-defined `ClientRegistrationRepository` bean. Fixes gh-51447 --- .../autoconfigure/OAuth2ClientConfigurations.java | 2 +- .../OAuth2ClientAutoConfigurationTests.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/module/spring-boot-security-oauth2-client/src/main/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientConfigurations.java b/module/spring-boot-security-oauth2-client/src/main/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientConfigurations.java index fc8572d3035..47d39e4b496 100644 --- a/module/spring-boot-security-oauth2-client/src/main/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientConfigurations.java +++ b/module/spring-boot-security-oauth2-client/src/main/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientConfigurations.java @@ -41,10 +41,10 @@ class OAuth2ClientConfigurations { @Configuration(proxyBeanMethods = false) @ConditionalOnOAuth2ClientRegistrationProperties @EnableConfigurationProperties(OAuth2ClientProperties.class) - @ConditionalOnMissingBean(ClientRegistrationRepository.class) static class ClientRegistrationRepositoryConfiguration { @Bean + @ConditionalOnMissingBean(ClientRegistrationRepository.class) InMemoryClientRegistrationRepository clientRegistrationRepository(OAuth2ClientProperties properties) { List registrations = new ArrayList<>( new OAuth2ClientPropertiesMapper(properties).asClientRegistrations().values()); diff --git a/module/spring-boot-security-oauth2-client/src/test/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientAutoConfigurationTests.java b/module/spring-boot-security-oauth2-client/src/test/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientAutoConfigurationTests.java index a93abc4b3b6..e28c9b942fb 100644 --- a/module/spring-boot-security-oauth2-client/src/test/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientAutoConfigurationTests.java +++ b/module/spring-boot-security-oauth2-client/src/test/java/org/springframework/boot/security/oauth2/client/autoconfigure/OAuth2ClientAutoConfigurationTests.java @@ -82,6 +82,19 @@ class OAuth2ClientAutoConfigurationTests { .run((context) -> assertThat(context).hasSingleBean(OAuth2AuthorizedClientService.class)); } + @Test + void propertiesBeanIsCreatedWithUserDefinedClientRegistrationRepository() { + this.contextRunner + .withPropertyValues(REGISTRATION_PREFIX + ".foo.client-id=abcd", + REGISTRATION_PREFIX + ".foo.client-secret=secret", REGISTRATION_PREFIX + ".foo.provider=github") + .withBean(ClientRegistrationRepository.class, + () -> new InMemoryClientRegistrationRepository(getClientRegistration("test", "test"))) + .run((context) -> { + assertThat(context).hasSingleBean(OAuth2ClientProperties.class); + assertThat(context).hasSingleBean(OAuth2AuthorizedClientService.class); + }); + } + private ClientRegistration getClientRegistration(String id, String userInfoUri) { ClientRegistration.Builder builder = ClientRegistration.withRegistrationId(id); builder.clientName("foo")