Skip to content

Commit c29b91c

Browse files
committed
Polish SecurityContextHolderStrategy XML Configuration for Defaults
Issue gh-11061
1 parent 084dd56 commit c29b91c

File tree

3 files changed

+17
-19
lines changed

3 files changed

+17
-19
lines changed

config/src/main/java/org/springframework/security/config/http/AuthenticationConfigBuilder.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ final class AuthenticationConfigBuilder {
215215

216216
AuthenticationConfigBuilder(Element element, boolean forceAutoConfig, ParserContext pc,
217217
SessionCreationPolicy sessionPolicy, BeanReference requestCache, BeanReference authenticationManager,
218-
BeanReference authenticationFilterSecurityContextHolderStrategyRef,
218+
BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef,
219219
BeanReference authenticationFilterSecurityContextRepositoryRef, BeanReference sessionStrategy,
220220
BeanReference portMapper, BeanReference portResolver, BeanMetadataElement csrfLogoutHandler) {
221221
this.httpElt = element;
@@ -272,7 +272,7 @@ private void createRememberMeProvider(String key) {
272272
}
273273

274274
void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authManager,
275-
BeanReference authenticationFilterSecurityContextHolderStrategyRef,
275+
BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef,
276276
BeanReference authenticationFilterSecurityContextRepositoryRef) {
277277
Element formLoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.FORM_LOGIN);
278278
RootBeanDefinition formFilter = null;
@@ -442,7 +442,7 @@ private void injectRememberMeServicesRef(RootBeanDefinition bean, String remembe
442442
}
443443

444444
void createBasicFilter(BeanReference authManager,
445-
BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
445+
BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef) {
446446
Element basicAuthElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.BASIC_AUTH);
447447
if (basicAuthElt == null && !this.autoConfig) {
448448
// No basic auth, do nothing
@@ -612,7 +612,7 @@ void createLoginPageFilterIfNeeded() {
612612
}
613613
}
614614

615-
void createLogoutFilter(BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
615+
void createLogoutFilter(BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef) {
616616
Element logoutElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.LOGOUT);
617617
if (logoutElt != null || this.autoConfig) {
618618
String formLoginPage = this.formLoginPage;
@@ -677,7 +677,7 @@ List<BeanDefinition> getCsrfIgnoreRequestMatchers() {
677677
return this.csrfIgnoreRequestMatchers;
678678
}
679679

680-
void createAnonymousFilter(BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
680+
void createAnonymousFilter(BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef) {
681681
Element anonymousElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.ANONYMOUS);
682682
if (anonymousElt != null && "false".equals(anonymousElt.getAttribute("enabled"))) {
683683
return;
@@ -723,7 +723,7 @@ private String createKey() {
723723
return Long.toString(random.nextLong());
724724
}
725725

726-
void createExceptionTranslationFilter(BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
726+
void createExceptionTranslationFilter(BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef) {
727727
BeanDefinitionBuilder etfBuilder = BeanDefinitionBuilder.rootBeanDefinition(ExceptionTranslationFilter.class);
728728
this.accessDeniedHandler = createAccessDeniedHandler(this.httpElt, this.pc);
729729
etfBuilder.addPropertyValue("accessDeniedHandler", this.accessDeniedHandler);

config/src/main/java/org/springframework/security/config/http/HttpConfigurationBuilder.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2021 the original author or authors.
2+
* Copyright 2002-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -160,7 +160,7 @@ class HttpConfigurationBuilder {
160160

161161
private BeanDefinition forceEagerSessionCreationFilter;
162162

163-
private BeanReference holderStrategyRef;
163+
private BeanMetadataElement holderStrategyRef;
164164

165165
private BeanReference contextRepoRef;
166166

@@ -301,7 +301,7 @@ static String createPath(String path, boolean lowerCase) {
301301
return lowerCase ? path.toLowerCase() : path;
302302
}
303303

304-
BeanReference getSecurityContextHolderStrategyForAuthenticationFilters() {
304+
BeanMetadataElement getSecurityContextHolderStrategyForAuthenticationFilters() {
305305
return this.holderStrategyRef;
306306
}
307307

@@ -350,13 +350,12 @@ private void createSecurityContextPersistenceFilter() {
350350

351351
private void createSecurityContextHolderStrategy() {
352352
String holderStrategyRef = this.httpElt.getAttribute(ATT_SECURITY_CONTEXT_HOLDER_STRATEGY);
353-
if (!StringUtils.hasText(holderStrategyRef)) {
354-
BeanDefinition holderStrategyBean = BeanDefinitionBuilder
355-
.rootBeanDefinition(SecurityContextHolderStrategyFactory.class).getBeanDefinition();
356-
holderStrategyRef = this.pc.getReaderContext().generateBeanName(holderStrategyBean);
357-
this.pc.registerBeanComponent(new BeanComponentDefinition(holderStrategyBean, holderStrategyRef));
353+
if (StringUtils.hasText(holderStrategyRef)) {
354+
this.holderStrategyRef = new RuntimeBeanReference(holderStrategyRef);
355+
return;
358356
}
359-
this.holderStrategyRef = new RuntimeBeanReference(holderStrategyRef);
357+
this.holderStrategyRef = BeanDefinitionBuilder.rootBeanDefinition(SecurityContextHolderStrategyFactory.class)
358+
.getBeanDefinition();
360359
}
361360

362361
private void createSecurityContextRepository() {

config/src/main/java/org/springframework/security/config/http/LogoutBeanDefinitionParser.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2019 the original author or authors.
2+
* Copyright 2002-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,7 +20,6 @@
2020

2121
import org.springframework.beans.BeanMetadataElement;
2222
import org.springframework.beans.factory.config.BeanDefinition;
23-
import org.springframework.beans.factory.config.BeanReference;
2423
import org.springframework.beans.factory.config.RuntimeBeanReference;
2524
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2625
import org.springframework.beans.factory.support.ManagedList;
@@ -62,10 +61,10 @@ class LogoutBeanDefinitionParser implements BeanDefinitionParser {
6261

6362
private BeanMetadataElement logoutSuccessHandler;
6463

65-
private BeanReference authenticationFilterSecurityContextHolderStrategyRef;
64+
private BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef;
6665

6766
LogoutBeanDefinitionParser(String loginPageUrl, String rememberMeServices, BeanMetadataElement csrfLogoutHandler,
68-
BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
67+
BeanMetadataElement authenticationFilterSecurityContextHolderStrategyRef) {
6968
this.defaultLogoutUrl = loginPageUrl + "?logout";
7069
this.rememberMeServices = rememberMeServices;
7170
this.csrfEnabled = csrfLogoutHandler != null;

0 commit comments

Comments
 (0)