From 77acaaa3b7be427bd9d2527e4e7c7877aafa9ed0 Mon Sep 17 00:00:00 2001 From: Steve Riesenberg Date: Mon, 6 Nov 2023 12:09:40 -0600 Subject: [PATCH] Use bean factory method Closes gh-14094 --- .../web/configuration/OAuth2ClientConfiguration.java | 11 ++++++++--- .../config/http/AuthenticationConfigBuilder.java | 4 +++- .../http/OAuth2AuthorizedClientManagerRegistrar.java | 8 ++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configuration/OAuth2ClientConfiguration.java b/config/src/main/java/org/springframework/security/config/annotation/web/configuration/OAuth2ClientConfiguration.java index 668963f9d5..ef7826412c 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configuration/OAuth2ClientConfiguration.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configuration/OAuth2ClientConfiguration.java @@ -106,7 +106,7 @@ final class OAuth2ClientConfiguration { @Configuration(proxyBeanMethods = false) static class OAuth2AuthorizedClientManagerConfiguration { - @Bean + @Bean(name = OAuth2AuthorizedClientManagerRegistrar.BEAN_NAME) OAuth2AuthorizedClientManagerRegistrar authorizedClientManagerRegistrar() { return new OAuth2AuthorizedClientManagerRegistrar(); } @@ -173,6 +173,10 @@ final class OAuth2ClientConfiguration { static final class OAuth2AuthorizedClientManagerRegistrar implements BeanDefinitionRegistryPostProcessor, BeanFactoryAware { + static final String BEAN_NAME = "authorizedClientManagerRegistrar"; + + static final String FACTORY_METHOD_NAME = "getAuthorizedClientManager"; + // @formatter:off private static final Set> KNOWN_AUTHORIZED_CLIENT_PROVIDERS = Set.of( AuthorizationCodeOAuth2AuthorizedClientProvider.class, @@ -196,7 +200,8 @@ final class OAuth2ClientConfiguration { } BeanDefinition beanDefinition = BeanDefinitionBuilder - .genericBeanDefinition(OAuth2AuthorizedClientManager.class, this::getAuthorizedClientManager) + .rootBeanDefinition(OAuth2AuthorizedClientManager.class) + .setFactoryMethodOnBean(FACTORY_METHOD_NAME, BEAN_NAME) .getBeanDefinition(); registry.registerBeanDefinition(this.beanNameGenerator.generateBeanName(beanDefinition, registry), @@ -220,7 +225,7 @@ final class OAuth2ClientConfiguration { return getAuthorizedClientManager(); } - private OAuth2AuthorizedClientManager getAuthorizedClientManager() { + OAuth2AuthorizedClientManager getAuthorizedClientManager() { ClientRegistrationRepository clientRegistrationRepository = BeanFactoryUtils .beanOfTypeIncludingAncestors(this.beanFactory, ClientRegistrationRepository.class, true, true); diff --git a/config/src/main/java/org/springframework/security/config/http/AuthenticationConfigBuilder.java b/config/src/main/java/org/springframework/security/config/http/AuthenticationConfigBuilder.java index 6a80bafce5..3172d40760 100644 --- a/config/src/main/java/org/springframework/security/config/http/AuthenticationConfigBuilder.java +++ b/config/src/main/java/org/springframework/security/config/http/AuthenticationConfigBuilder.java @@ -422,7 +422,9 @@ final class AuthenticationConfigBuilder { .registerWithGeneratedName(new RootBeanDefinition(OAuth2ClientWebMvcSecurityPostProcessor.class)); } this.pc.getReaderContext() - .registerWithGeneratedName(new RootBeanDefinition(OAuth2AuthorizedClientManagerRegistrar.class)); + .getRegistry() + .registerBeanDefinition(OAuth2AuthorizedClientManagerRegistrar.BEAN_NAME, + new RootBeanDefinition(OAuth2AuthorizedClientManagerRegistrar.class)); } private void createSaml2LoginFilter(BeanReference authenticationManager, diff --git a/config/src/main/java/org/springframework/security/config/http/OAuth2AuthorizedClientManagerRegistrar.java b/config/src/main/java/org/springframework/security/config/http/OAuth2AuthorizedClientManagerRegistrar.java index 8693333c3c..0020017bb5 100644 --- a/config/src/main/java/org/springframework/security/config/http/OAuth2AuthorizedClientManagerRegistrar.java +++ b/config/src/main/java/org/springframework/security/config/http/OAuth2AuthorizedClientManagerRegistrar.java @@ -66,6 +66,10 @@ import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepo */ final class OAuth2AuthorizedClientManagerRegistrar implements BeanDefinitionRegistryPostProcessor, BeanFactoryAware { + static final String BEAN_NAME = "authorizedClientManagerRegistrar"; + + static final String FACTORY_METHOD_NAME = "getAuthorizedClientManager"; + // @formatter:off private static final Set> KNOWN_AUTHORIZED_CLIENT_PROVIDERS = Set.of( AuthorizationCodeOAuth2AuthorizedClientProvider.class, @@ -88,8 +92,8 @@ final class OAuth2AuthorizedClientManagerRegistrar implements BeanDefinitionRegi return; } - BeanDefinition beanDefinition = BeanDefinitionBuilder - .genericBeanDefinition(OAuth2AuthorizedClientManager.class, this::getAuthorizedClientManager) + BeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(OAuth2AuthorizedClientManager.class) + .setFactoryMethodOnBean(FACTORY_METHOD_NAME, BEAN_NAME) .getBeanDefinition(); registry.registerBeanDefinition(this.beanNameGenerator.generateBeanName(beanDefinition, registry),