Browse Source

Create AuthorizationEndpointConfig.configure

Issue: gh-5654
Rob Winch 7 years ago
parent
commit
4de3d0b860

+ 49 - 37
config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2ClientConfigurer.java

@@ -26,6 +26,7 @@ import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCo
 import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
 import org.springframework.security.oauth2.client.web.AuthenticatedPrincipalOAuth2AuthorizedClientRepository;
 import org.springframework.security.oauth2.client.web.AuthorizationRequestRepository;
+import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver;
 import org.springframework.security.oauth2.client.web.OAuth2AuthorizationCodeGrantFilter;
 import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter;
 import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver;
@@ -160,7 +161,7 @@ public final class OAuth2ClientConfigurer<B extends HttpSecurityBuilder<B>> exte
 		 * Configuration options for the Authorization Server's Authorization Endpoint.
 		 */
 		public class AuthorizationEndpointConfig {
-			private String authorizationRequestBaseUri;
+			private String authorizationRequestBaseUri = OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI;
 			private OAuth2AuthorizationRequestResolver authorizationRequestResolver;
 			private AuthorizationRequestRepository<OAuth2AuthorizationRequest> authorizationRequestRepository;
 
@@ -213,6 +214,52 @@ public final class OAuth2ClientConfigurer<B extends HttpSecurityBuilder<B>> exte
 			public AuthorizationCodeGrantConfigurer and() {
 				return AuthorizationCodeGrantConfigurer.this;
 			}
+
+			private OAuth2AuthorizationRequestResolver getAuthorizationRequestResolver() {
+				if (this.authorizationRequestResolver != null) {
+					return this.authorizationRequestResolver;
+				}
+				ClientRegistrationRepository clientRegistrationRepository = OAuth2ClientConfigurerUtils
+						.getClientRegistrationRepository(getBuilder());
+				return new DefaultOAuth2AuthorizationRequestResolver(clientRegistrationRepository,
+						this.authorizationRequestBaseUri);
+			}
+
+			private OAuth2AuthorizationRequestRedirectFilter createAuthorizationRequestRedirectFilter(B builder) {
+				OAuth2AuthorizationRequestResolver resolver = getAuthorizationRequestResolver();
+				OAuth2AuthorizationRequestRedirectFilter authorizationRequestFilter = new OAuth2AuthorizationRequestRedirectFilter(resolver);
+
+				if (this.authorizationRequestRepository != null) {
+					authorizationRequestFilter.setAuthorizationRequestRepository(
+							this.authorizationRequestRepository);
+				}
+				RequestCache requestCache = builder.getSharedObject(RequestCache.class);
+				if (requestCache != null) {
+					authorizationRequestFilter.setRequestCache(requestCache);
+				}
+				return authorizationRequestFilter;
+			}
+
+			private OAuth2AuthorizationCodeGrantFilter createAuthorizationCodeGrantFilter(B builder) {
+				AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class);
+				OAuth2AuthorizationCodeGrantFilter authorizationCodeGrantFilter = new OAuth2AuthorizationCodeGrantFilter(
+						OAuth2ClientConfigurerUtils.getClientRegistrationRepository(builder),
+						OAuth2ClientConfigurerUtils.getAuthorizedClientRepository(builder),
+						authenticationManager);
+
+				if (this.authorizationRequestRepository != null) {
+					authorizationCodeGrantFilter.setAuthorizationRequestRepository(
+							this.authorizationRequestRepository);
+				}
+				return authorizationCodeGrantFilter;
+			}
+
+			private void configure(B builder) {
+				OAuth2AuthorizationRequestRedirectFilter authorizationRequestFilter = createAuthorizationRequestRedirectFilter(builder);
+				builder.addFilter(postProcess(authorizationRequestFilter));
+				OAuth2AuthorizationCodeGrantFilter authorizationCodeGrantFilter = createAuthorizationCodeGrantFilter(builder);
+				builder.addFilter(postProcess(authorizationCodeGrantFilter));
+			}
 		}
 
 		/**
@@ -267,42 +314,7 @@ public final class OAuth2ClientConfigurer<B extends HttpSecurityBuilder<B>> exte
 		}
 
 		private void configure(B builder) {
-			OAuth2AuthorizationRequestRedirectFilter authorizationRequestFilter;
-
-			if (this.authorizationEndpointConfig.authorizationRequestResolver != null) {
-				authorizationRequestFilter = new OAuth2AuthorizationRequestRedirectFilter(
-						this.authorizationEndpointConfig.authorizationRequestResolver);
-			} else {
-				String authorizationRequestBaseUri = this.authorizationEndpointConfig.authorizationRequestBaseUri;
-				if (authorizationRequestBaseUri == null) {
-					authorizationRequestBaseUri = OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI;
-				}
-				authorizationRequestFilter = new OAuth2AuthorizationRequestRedirectFilter(
-						OAuth2ClientConfigurerUtils.getClientRegistrationRepository(builder), authorizationRequestBaseUri);
-			}
-
-			if (this.authorizationEndpointConfig.authorizationRequestRepository != null) {
-				authorizationRequestFilter.setAuthorizationRequestRepository(
-						this.authorizationEndpointConfig.authorizationRequestRepository);
-			}
-			RequestCache requestCache = builder.getSharedObject(RequestCache.class);
-			if (requestCache != null) {
-				authorizationRequestFilter.setRequestCache(requestCache);
-			}
-			builder.addFilter(postProcess(authorizationRequestFilter));
-
-			AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class);
-
-			OAuth2AuthorizationCodeGrantFilter authorizationCodeGrantFilter = new OAuth2AuthorizationCodeGrantFilter(
-					OAuth2ClientConfigurerUtils.getClientRegistrationRepository(builder),
-					OAuth2ClientConfigurerUtils.getAuthorizedClientRepository(builder),
-					authenticationManager);
-
-			if (this.authorizationEndpointConfig.authorizationRequestRepository != null) {
-				authorizationCodeGrantFilter.setAuthorizationRequestRepository(
-						this.authorizationEndpointConfig.authorizationRequestRepository);
-			}
-			builder.addFilter(postProcess(authorizationCodeGrantFilter));
+			this.authorizationEndpointConfig.configure(builder);
 		}
 	}