|
@@ -236,6 +236,7 @@ final class AuthenticationConfigBuilder {
|
|
|
|
|
|
AuthenticationConfigBuilder(Element element, boolean forceAutoConfig, ParserContext pc,
|
|
AuthenticationConfigBuilder(Element element, boolean forceAutoConfig, ParserContext pc,
|
|
SessionCreationPolicy sessionPolicy, BeanReference requestCache, BeanReference authenticationManager,
|
|
SessionCreationPolicy sessionPolicy, BeanReference requestCache, BeanReference authenticationManager,
|
|
|
|
+ BeanReference authenticationFilterSecurityContextHolderStrategyRef,
|
|
BeanReference authenticationFilterSecurityContextRepositoryRef, BeanReference sessionStrategy,
|
|
BeanReference authenticationFilterSecurityContextRepositoryRef, BeanReference sessionStrategy,
|
|
BeanReference portMapper, BeanReference portResolver, BeanMetadataElement csrfLogoutHandler) {
|
|
BeanReference portMapper, BeanReference portResolver, BeanMetadataElement csrfLogoutHandler) {
|
|
this.httpElt = element;
|
|
this.httpElt = element;
|
|
@@ -247,11 +248,12 @@ final class AuthenticationConfigBuilder {
|
|
this.portMapper = portMapper;
|
|
this.portMapper = portMapper;
|
|
this.portResolver = portResolver;
|
|
this.portResolver = portResolver;
|
|
this.csrfLogoutHandler = csrfLogoutHandler;
|
|
this.csrfLogoutHandler = csrfLogoutHandler;
|
|
- createAnonymousFilter();
|
|
|
|
|
|
+ createAnonymousFilter(authenticationFilterSecurityContextHolderStrategyRef);
|
|
createRememberMeFilter(authenticationManager);
|
|
createRememberMeFilter(authenticationManager);
|
|
- createBasicFilter(authenticationManager);
|
|
|
|
|
|
+ createBasicFilter(authenticationManager, authenticationFilterSecurityContextHolderStrategyRef);
|
|
createBearerTokenAuthenticationFilter(authenticationManager);
|
|
createBearerTokenAuthenticationFilter(authenticationManager);
|
|
- createFormLoginFilter(sessionStrategy, authenticationManager, authenticationFilterSecurityContextRepositoryRef);
|
|
|
|
|
|
+ createFormLoginFilter(sessionStrategy, authenticationManager,
|
|
|
|
+ authenticationFilterSecurityContextHolderStrategyRef, authenticationFilterSecurityContextRepositoryRef);
|
|
createOAuth2ClientFilters(sessionStrategy, requestCache, authenticationManager,
|
|
createOAuth2ClientFilters(sessionStrategy, requestCache, authenticationManager,
|
|
authenticationFilterSecurityContextRepositoryRef);
|
|
authenticationFilterSecurityContextRepositoryRef);
|
|
createOpenIDLoginFilter(sessionStrategy, authenticationManager,
|
|
createOpenIDLoginFilter(sessionStrategy, authenticationManager,
|
|
@@ -259,11 +261,11 @@ final class AuthenticationConfigBuilder {
|
|
createSaml2LoginFilter(authenticationManager, authenticationFilterSecurityContextRepositoryRef);
|
|
createSaml2LoginFilter(authenticationManager, authenticationFilterSecurityContextRepositoryRef);
|
|
createX509Filter(authenticationManager);
|
|
createX509Filter(authenticationManager);
|
|
createJeeFilter(authenticationManager);
|
|
createJeeFilter(authenticationManager);
|
|
- createLogoutFilter();
|
|
|
|
|
|
+ createLogoutFilter(authenticationFilterSecurityContextHolderStrategyRef);
|
|
createSaml2LogoutFilter();
|
|
createSaml2LogoutFilter();
|
|
createLoginPageFilterIfNeeded();
|
|
createLoginPageFilterIfNeeded();
|
|
createUserDetailsServiceFactory();
|
|
createUserDetailsServiceFactory();
|
|
- createExceptionTranslationFilter();
|
|
|
|
|
|
+ createExceptionTranslationFilter(authenticationFilterSecurityContextHolderStrategyRef);
|
|
}
|
|
}
|
|
|
|
|
|
void createRememberMeFilter(BeanReference authenticationManager) {
|
|
void createRememberMeFilter(BeanReference authenticationManager) {
|
|
@@ -293,6 +295,7 @@ final class AuthenticationConfigBuilder {
|
|
}
|
|
}
|
|
|
|
|
|
void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authManager,
|
|
void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authManager,
|
|
|
|
+ BeanReference authenticationFilterSecurityContextHolderStrategyRef,
|
|
BeanReference authenticationFilterSecurityContextRepositoryRef) {
|
|
BeanReference authenticationFilterSecurityContextRepositoryRef) {
|
|
Element formLoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.FORM_LOGIN);
|
|
Element formLoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.FORM_LOGIN);
|
|
RootBeanDefinition formFilter = null;
|
|
RootBeanDefinition formFilter = null;
|
|
@@ -313,6 +316,8 @@ final class AuthenticationConfigBuilder {
|
|
formFilter.getPropertyValues().addPropertyValue("securityContextRepository",
|
|
formFilter.getPropertyValues().addPropertyValue("securityContextRepository",
|
|
authenticationFilterSecurityContextRepositoryRef);
|
|
authenticationFilterSecurityContextRepositoryRef);
|
|
}
|
|
}
|
|
|
|
+ formFilter.getPropertyValues().addPropertyValue("securityContextHolderStrategy",
|
|
|
|
+ authenticationFilterSecurityContextHolderStrategyRef);
|
|
// Id is required by login page filter
|
|
// Id is required by login page filter
|
|
this.formFilterId = this.pc.getReaderContext().generateBeanName(formFilter);
|
|
this.formFilterId = this.pc.getReaderContext().generateBeanName(formFilter);
|
|
this.pc.registerBeanComponent(new BeanComponentDefinition(formFilter, this.formFilterId));
|
|
this.pc.registerBeanComponent(new BeanComponentDefinition(formFilter, this.formFilterId));
|
|
@@ -564,7 +569,8 @@ final class AuthenticationConfigBuilder {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- void createBasicFilter(BeanReference authManager) {
|
|
|
|
|
|
+ void createBasicFilter(BeanReference authManager,
|
|
|
|
+ BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
|
|
Element basicAuthElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.BASIC_AUTH);
|
|
Element basicAuthElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.BASIC_AUTH);
|
|
if (basicAuthElt == null && !this.autoConfig) {
|
|
if (basicAuthElt == null && !this.autoConfig) {
|
|
// No basic auth, do nothing
|
|
// No basic auth, do nothing
|
|
@@ -592,6 +598,8 @@ final class AuthenticationConfigBuilder {
|
|
}
|
|
}
|
|
filterBuilder.addConstructorArgValue(authManager);
|
|
filterBuilder.addConstructorArgValue(authManager);
|
|
filterBuilder.addConstructorArgValue(this.basicEntryPoint);
|
|
filterBuilder.addConstructorArgValue(this.basicEntryPoint);
|
|
|
|
+ filterBuilder.addPropertyValue("securityContextHolderStrategy",
|
|
|
|
+ authenticationFilterSecurityContextHolderStrategyRef);
|
|
this.basicFilter = filterBuilder.getBeanDefinition();
|
|
this.basicFilter = filterBuilder.getBeanDefinition();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -739,7 +747,7 @@ final class AuthenticationConfigBuilder {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- void createLogoutFilter() {
|
|
|
|
|
|
+ void createLogoutFilter(BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
|
|
Element logoutElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.LOGOUT);
|
|
Element logoutElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.LOGOUT);
|
|
if (logoutElt != null || this.autoConfig) {
|
|
if (logoutElt != null || this.autoConfig) {
|
|
String formLoginPage = this.formLoginPage;
|
|
String formLoginPage = this.formLoginPage;
|
|
@@ -747,7 +755,8 @@ final class AuthenticationConfigBuilder {
|
|
formLoginPage = DefaultLoginPageGeneratingFilter.DEFAULT_LOGIN_PAGE_URL;
|
|
formLoginPage = DefaultLoginPageGeneratingFilter.DEFAULT_LOGIN_PAGE_URL;
|
|
}
|
|
}
|
|
LogoutBeanDefinitionParser logoutParser = new LogoutBeanDefinitionParser(formLoginPage,
|
|
LogoutBeanDefinitionParser logoutParser = new LogoutBeanDefinitionParser(formLoginPage,
|
|
- this.rememberMeServicesId, this.csrfLogoutHandler);
|
|
|
|
|
|
+ this.rememberMeServicesId, this.csrfLogoutHandler,
|
|
|
|
+ authenticationFilterSecurityContextHolderStrategyRef);
|
|
this.logoutFilter = logoutParser.parse(logoutElt, this.pc);
|
|
this.logoutFilter = logoutParser.parse(logoutElt, this.pc);
|
|
this.logoutHandlers = logoutParser.getLogoutHandlers();
|
|
this.logoutHandlers = logoutParser.getLogoutHandlers();
|
|
this.logoutSuccessHandler = logoutParser.getLogoutSuccessHandler();
|
|
this.logoutSuccessHandler = logoutParser.getLogoutSuccessHandler();
|
|
@@ -803,7 +812,7 @@ final class AuthenticationConfigBuilder {
|
|
return this.csrfIgnoreRequestMatchers;
|
|
return this.csrfIgnoreRequestMatchers;
|
|
}
|
|
}
|
|
|
|
|
|
- void createAnonymousFilter() {
|
|
|
|
|
|
+ void createAnonymousFilter(BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
|
|
Element anonymousElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.ANONYMOUS);
|
|
Element anonymousElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.ANONYMOUS);
|
|
if (anonymousElt != null && "false".equals(anonymousElt.getAttribute("enabled"))) {
|
|
if (anonymousElt != null && "false".equals(anonymousElt.getAttribute("enabled"))) {
|
|
return;
|
|
return;
|
|
@@ -833,6 +842,8 @@ final class AuthenticationConfigBuilder {
|
|
this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(1, username);
|
|
this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(1, username);
|
|
this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(2,
|
|
this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(2,
|
|
AuthorityUtils.commaSeparatedStringToAuthorityList(grantedAuthority));
|
|
AuthorityUtils.commaSeparatedStringToAuthorityList(grantedAuthority));
|
|
|
|
+ this.anonymousFilter.getPropertyValues().addPropertyValue("securityContextHolderStrategy",
|
|
|
|
+ authenticationFilterSecurityContextHolderStrategyRef);
|
|
this.anonymousFilter.setSource(source);
|
|
this.anonymousFilter.setSource(source);
|
|
RootBeanDefinition anonymousProviderBean = new RootBeanDefinition(AnonymousAuthenticationProvider.class);
|
|
RootBeanDefinition anonymousProviderBean = new RootBeanDefinition(AnonymousAuthenticationProvider.class);
|
|
anonymousProviderBean.getConstructorArgumentValues().addIndexedArgumentValue(0, key);
|
|
anonymousProviderBean.getConstructorArgumentValues().addIndexedArgumentValue(0, key);
|
|
@@ -847,7 +858,7 @@ final class AuthenticationConfigBuilder {
|
|
return Long.toString(random.nextLong());
|
|
return Long.toString(random.nextLong());
|
|
}
|
|
}
|
|
|
|
|
|
- void createExceptionTranslationFilter() {
|
|
|
|
|
|
+ void createExceptionTranslationFilter(BeanReference authenticationFilterSecurityContextHolderStrategyRef) {
|
|
BeanDefinitionBuilder etfBuilder = BeanDefinitionBuilder.rootBeanDefinition(ExceptionTranslationFilter.class);
|
|
BeanDefinitionBuilder etfBuilder = BeanDefinitionBuilder.rootBeanDefinition(ExceptionTranslationFilter.class);
|
|
this.accessDeniedHandler = createAccessDeniedHandler(this.httpElt, this.pc);
|
|
this.accessDeniedHandler = createAccessDeniedHandler(this.httpElt, this.pc);
|
|
etfBuilder.addPropertyValue("accessDeniedHandler", this.accessDeniedHandler);
|
|
etfBuilder.addPropertyValue("accessDeniedHandler", this.accessDeniedHandler);
|
|
@@ -855,6 +866,8 @@ final class AuthenticationConfigBuilder {
|
|
this.mainEntryPoint = selectEntryPoint();
|
|
this.mainEntryPoint = selectEntryPoint();
|
|
etfBuilder.addConstructorArgValue(this.mainEntryPoint);
|
|
etfBuilder.addConstructorArgValue(this.mainEntryPoint);
|
|
etfBuilder.addConstructorArgValue(this.requestCache);
|
|
etfBuilder.addConstructorArgValue(this.requestCache);
|
|
|
|
+ etfBuilder.addPropertyValue("securityContextHolderStrategy",
|
|
|
|
+ authenticationFilterSecurityContextHolderStrategyRef);
|
|
this.etf = etfBuilder.getBeanDefinition();
|
|
this.etf = etfBuilder.getBeanDefinition();
|
|
}
|
|
}
|
|
|
|
|