浏览代码

Polish OAuth2LoginConfigurer

Improve way of accessing ApplicationContext to ensure backward
compatibility.

Issue gh-7232
Josh Cummings 6 年之前
父节点
当前提交
65f6025cef

+ 1 - 1
config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java

@@ -2044,7 +2044,7 @@ public final class HttpSecurity extends
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
 	public HttpSecurity oauth2Login(Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer) throws Exception {
 	public HttpSecurity oauth2Login(Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer) throws Exception {
-		oauth2LoginCustomizer.customize(getOrApply(new OAuth2LoginConfigurer<>(getContext())));
+		oauth2LoginCustomizer.customize(getOrApply(new OAuth2LoginConfigurer<>()));
 		return HttpSecurity.this;
 		return HttpSecurity.this;
 	}
 	}
 
 

+ 13 - 15
config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java

@@ -15,6 +15,13 @@
  */
  */
 package org.springframework.security.config.annotation.web.configurers.oauth2.client;
 package org.springframework.security.config.annotation.web.configurers.oauth2.client;
 
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.springframework.beans.factory.BeanFactoryUtils;
 import org.springframework.beans.factory.BeanFactoryUtils;
 import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
 import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
@@ -71,13 +78,6 @@ import org.springframework.security.web.util.matcher.RequestMatcher;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 import org.springframework.util.ClassUtils;
 import org.springframework.util.ClassUtils;
 
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
 /**
 /**
  * An {@link AbstractHttpConfigurer} for OAuth 2.0 Login,
  * An {@link AbstractHttpConfigurer} for OAuth 2.0 Login,
  * which leverages the OAuth 2.0 Authorization Code Grant Flow.
  * which leverages the OAuth 2.0 Authorization Code Grant Flow.
@@ -135,7 +135,6 @@ import java.util.Map;
 public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>> extends
 public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>> extends
 	AbstractAuthenticationFilterConfigurer<B, OAuth2LoginConfigurer<B>, OAuth2LoginAuthenticationFilter> {
 	AbstractAuthenticationFilterConfigurer<B, OAuth2LoginConfigurer<B>, OAuth2LoginAuthenticationFilter> {
 
 
-	private final ApplicationContext context;
 	private final AuthorizationEndpointConfig authorizationEndpointConfig = new AuthorizationEndpointConfig();
 	private final AuthorizationEndpointConfig authorizationEndpointConfig = new AuthorizationEndpointConfig();
 	private final TokenEndpointConfig tokenEndpointConfig = new TokenEndpointConfig();
 	private final TokenEndpointConfig tokenEndpointConfig = new TokenEndpointConfig();
 	private final RedirectionEndpointConfig redirectionEndpointConfig = new RedirectionEndpointConfig();
 	private final RedirectionEndpointConfig redirectionEndpointConfig = new RedirectionEndpointConfig();
@@ -143,11 +142,6 @@ public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>> exten
 	private String loginPage;
 	private String loginPage;
 	private String loginProcessingUrl = OAuth2LoginAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI;
 	private String loginProcessingUrl = OAuth2LoginAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI;
 
 
-	public OAuth2LoginConfigurer(ApplicationContext context) {
-		Assert.notNull(context, "context cannot be null");
-		this.context = context;
-	}
-
 	/**
 	/**
 	 * Sets the repository of client registrations.
 	 * Sets the repository of client registrations.
 	 *
 	 *
@@ -652,9 +646,13 @@ public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>> exten
 	}
 	}
 
 
 	private <T> T getBeanOrNull(ResolvableType type) {
 	private <T> T getBeanOrNull(ResolvableType type) {
-		String[] names =  this.context.getBeanNamesForType(type);
+		ApplicationContext context = getBuilder().getSharedObject(ApplicationContext.class);
+		if (context == null) {
+			return null;
+		}
+		String[] names =  context.getBeanNamesForType(type);
 		if (names.length == 1) {
 		if (names.length == 1) {
-			return (T) this.context.getBean(names[0]);
+			return (T) context.getBean(names[0]);
 		}
 		}
 		return null;
 		return null;
 	}
 	}