From 65f6025cef07113c4a165dcc9ad6c50cd1c66475 Mon Sep 17 00:00:00 2001 From: Josh Cummings Date: Wed, 7 Aug 2019 13:22:10 -0600 Subject: [PATCH] Polish OAuth2LoginConfigurer Improve way of accessing ApplicationContext to ensure backward compatibility. Issue gh-7232 --- .../annotation/web/builders/HttpSecurity.java | 2 +- .../oauth2/client/OAuth2LoginConfigurer.java | 28 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java b/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java index cc95df76f4..69bc3ab70c 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java @@ -2044,7 +2044,7 @@ public final class HttpSecurity extends * @throws Exception */ public HttpSecurity oauth2Login(Customizer> oauth2LoginCustomizer) throws Exception { - oauth2LoginCustomizer.customize(getOrApply(new OAuth2LoginConfigurer<>(getContext()))); + oauth2LoginCustomizer.customize(getOrApply(new OAuth2LoginConfigurer<>())); return HttpSecurity.this; } diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java index fc48bab1b7..d0ee3c6694 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java +++ b/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; +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.NoUniqueBeanDefinitionException; 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.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, * which leverages the OAuth 2.0 Authorization Code Grant Flow. @@ -135,7 +135,6 @@ import java.util.Map; public final class OAuth2LoginConfigurer> extends AbstractAuthenticationFilterConfigurer, OAuth2LoginAuthenticationFilter> { - private final ApplicationContext context; private final AuthorizationEndpointConfig authorizationEndpointConfig = new AuthorizationEndpointConfig(); private final TokenEndpointConfig tokenEndpointConfig = new TokenEndpointConfig(); private final RedirectionEndpointConfig redirectionEndpointConfig = new RedirectionEndpointConfig(); @@ -143,11 +142,6 @@ public final class OAuth2LoginConfigurer> exten private String loginPage; 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. * @@ -652,9 +646,13 @@ public final class OAuth2LoginConfigurer> exten } private 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) { - return (T) this.context.getBean(names[0]); + return (T) context.getBean(names[0]); } return null; }