Browse Source

Use bean factory method

Closes gh-14094
Steve Riesenberg 1 năm trước cách đây
mục cha
commit
77acaaa3b7

+ 8 - 3
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<Class<?>> 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);
 

+ 3 - 1
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,

+ 6 - 2
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<Class<?>> 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),