|  | @@ -236,8 +236,8 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	AuthenticationConfigBuilder(Element element, boolean forceAutoConfig, ParserContext pc,
 | 
	
		
			
				|  |  |  			SessionCreationPolicy sessionPolicy, BeanReference requestCache, BeanReference authenticationManager,
 | 
	
		
			
				|  |  | -			BeanReference sessionStrategy, BeanReference portMapper, BeanReference portResolver,
 | 
	
		
			
				|  |  | -			BeanMetadataElement csrfLogoutHandler) {
 | 
	
		
			
				|  |  | +			BeanReference authenticationFilterSecurityContextRepositoryRef, BeanReference sessionStrategy,
 | 
	
		
			
				|  |  | +			BeanReference portMapper, BeanReference portResolver, BeanMetadataElement csrfLogoutHandler) {
 | 
	
		
			
				|  |  |  		this.httpElt = element;
 | 
	
		
			
				|  |  |  		this.pc = pc;
 | 
	
		
			
				|  |  |  		this.requestCache = requestCache;
 | 
	
	
		
			
				|  | @@ -251,10 +251,12 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		createRememberMeFilter(authenticationManager);
 | 
	
		
			
				|  |  |  		createBasicFilter(authenticationManager);
 | 
	
		
			
				|  |  |  		createBearerTokenAuthenticationFilter(authenticationManager);
 | 
	
		
			
				|  |  | -		createFormLoginFilter(sessionStrategy, authenticationManager);
 | 
	
		
			
				|  |  | -		createOAuth2ClientFilters(sessionStrategy, requestCache, authenticationManager);
 | 
	
		
			
				|  |  | -		createOpenIDLoginFilter(sessionStrategy, authenticationManager);
 | 
	
		
			
				|  |  | -		createSaml2LoginFilter(authenticationManager);
 | 
	
		
			
				|  |  | +		createFormLoginFilter(sessionStrategy, authenticationManager, authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +		createOAuth2ClientFilters(sessionStrategy, requestCache, authenticationManager,
 | 
	
		
			
				|  |  | +				authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +		createOpenIDLoginFilter(sessionStrategy, authenticationManager,
 | 
	
		
			
				|  |  | +				authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +		createSaml2LoginFilter(authenticationManager, authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  |  		createX509Filter(authenticationManager);
 | 
	
		
			
				|  |  |  		createJeeFilter(authenticationManager);
 | 
	
		
			
				|  |  |  		createLogoutFilter();
 | 
	
	
		
			
				|  | @@ -290,7 +292,8 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		this.rememberMeProviderRef = new RuntimeBeanReference(id);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authManager) {
 | 
	
		
			
				|  |  | +	void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authManager,
 | 
	
		
			
				|  |  | +			BeanReference authenticationFilterSecurityContextRepositoryRef) {
 | 
	
		
			
				|  |  |  		Element formLoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.FORM_LOGIN);
 | 
	
		
			
				|  |  |  		RootBeanDefinition formFilter = null;
 | 
	
		
			
				|  |  |  		if (formLoginElt != null || this.autoConfig) {
 | 
	
	
		
			
				|  | @@ -306,6 +309,10 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		if (formFilter != null) {
 | 
	
		
			
				|  |  |  			formFilter.getPropertyValues().addPropertyValue("allowSessionCreation", this.allowSessionCreation);
 | 
	
		
			
				|  |  |  			formFilter.getPropertyValues().addPropertyValue("authenticationManager", authManager);
 | 
	
		
			
				|  |  | +			if (authenticationFilterSecurityContextRepositoryRef != null) {
 | 
	
		
			
				|  |  | +				formFilter.getPropertyValues().addPropertyValue("securityContextRepository",
 | 
	
		
			
				|  |  | +						authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  			// Id is required by login page filter
 | 
	
		
			
				|  |  |  			this.formFilterId = this.pc.getReaderContext().generateBeanName(formFilter);
 | 
	
		
			
				|  |  |  			this.pc.registerBeanComponent(new BeanComponentDefinition(formFilter, this.formFilterId));
 | 
	
	
		
			
				|  | @@ -314,13 +321,15 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	void createOAuth2ClientFilters(BeanReference sessionStrategy, BeanReference requestCache,
 | 
	
		
			
				|  |  | -			BeanReference authenticationManager) {
 | 
	
		
			
				|  |  | -		createOAuth2LoginFilter(sessionStrategy, authenticationManager);
 | 
	
		
			
				|  |  | -		createOAuth2ClientFilter(requestCache, authenticationManager);
 | 
	
		
			
				|  |  | +			BeanReference authenticationManager, BeanReference authenticationFilterSecurityContextRepositoryRef) {
 | 
	
		
			
				|  |  | +		createOAuth2LoginFilter(sessionStrategy, authenticationManager,
 | 
	
		
			
				|  |  | +				authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +		createOAuth2ClientFilter(requestCache, authenticationManager, authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  |  		registerOAuth2ClientPostProcessors();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	void createOAuth2LoginFilter(BeanReference sessionStrategy, BeanReference authManager) {
 | 
	
		
			
				|  |  | +	void createOAuth2LoginFilter(BeanReference sessionStrategy, BeanReference authManager,
 | 
	
		
			
				|  |  | +			BeanReference authenticationFilterSecurityContextRepositoryRef) {
 | 
	
		
			
				|  |  |  		Element oauth2LoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.OAUTH2_LOGIN);
 | 
	
		
			
				|  |  |  		if (oauth2LoginElt == null) {
 | 
	
		
			
				|  |  |  			return;
 | 
	
	
		
			
				|  | @@ -332,6 +341,10 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		BeanDefinition defaultAuthorizedClientRepository = parser.getDefaultAuthorizedClientRepository();
 | 
	
		
			
				|  |  |  		registerDefaultAuthorizedClientRepositoryIfNecessary(defaultAuthorizedClientRepository);
 | 
	
		
			
				|  |  |  		oauth2LoginFilterBean.getPropertyValues().addPropertyValue("authenticationManager", authManager);
 | 
	
		
			
				|  |  | +		if (authenticationFilterSecurityContextRepositoryRef != null) {
 | 
	
		
			
				|  |  | +			oauth2LoginFilterBean.getPropertyValues().addPropertyValue("securityContextRepository",
 | 
	
		
			
				|  |  | +					authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		// retrieve the other bean result
 | 
	
		
			
				|  |  |  		BeanDefinition oauth2LoginAuthProvider = parser.getOAuth2LoginAuthenticationProvider();
 | 
	
	
		
			
				|  | @@ -361,14 +374,15 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		this.oauth2LoginOidcAuthenticationProviderRef = new RuntimeBeanReference(oauth2LoginOidcAuthProviderId);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	void createOAuth2ClientFilter(BeanReference requestCache, BeanReference authenticationManager) {
 | 
	
		
			
				|  |  | +	void createOAuth2ClientFilter(BeanReference requestCache, BeanReference authenticationManager,
 | 
	
		
			
				|  |  | +			BeanReference authenticationFilterSecurityContextRepositoryRef) {
 | 
	
		
			
				|  |  |  		Element oauth2ClientElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.OAUTH2_CLIENT);
 | 
	
		
			
				|  |  |  		if (oauth2ClientElt == null) {
 | 
	
		
			
				|  |  |  			return;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		this.oauth2ClientEnabled = true;
 | 
	
		
			
				|  |  |  		OAuth2ClientBeanDefinitionParser parser = new OAuth2ClientBeanDefinitionParser(requestCache,
 | 
	
		
			
				|  |  | -				authenticationManager);
 | 
	
		
			
				|  |  | +				authenticationManager, authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  |  		parser.parse(oauth2ClientElt, this.pc);
 | 
	
		
			
				|  |  |  		BeanDefinition defaultAuthorizedClientRepository = parser.getDefaultAuthorizedClientRepository();
 | 
	
		
			
				|  |  |  		registerDefaultAuthorizedClientRepositoryIfNecessary(defaultAuthorizedClientRepository);
 | 
	
	
		
			
				|  | @@ -413,7 +427,8 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	void createOpenIDLoginFilter(BeanReference sessionStrategy, BeanReference authManager) {
 | 
	
		
			
				|  |  | +	void createOpenIDLoginFilter(BeanReference sessionStrategy, BeanReference authManager,
 | 
	
		
			
				|  |  | +			BeanReference authenticationFilterSecurityContextRepositoryRef) {
 | 
	
		
			
				|  |  |  		Element openIDLoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.OPENID_LOGIN);
 | 
	
		
			
				|  |  |  		RootBeanDefinition openIDFilter = null;
 | 
	
		
			
				|  |  |  		if (openIDLoginElt != null) {
 | 
	
	
		
			
				|  | @@ -422,6 +437,10 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		if (openIDFilter != null) {
 | 
	
		
			
				|  |  |  			openIDFilter.getPropertyValues().addPropertyValue("allowSessionCreation", this.allowSessionCreation);
 | 
	
		
			
				|  |  |  			openIDFilter.getPropertyValues().addPropertyValue("authenticationManager", authManager);
 | 
	
		
			
				|  |  | +			if (authenticationFilterSecurityContextRepositoryRef != null) {
 | 
	
		
			
				|  |  | +				openIDFilter.getPropertyValues().addPropertyValue("securityContextRepository",
 | 
	
		
			
				|  |  | +						authenticationFilterSecurityContextRepositoryRef);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  			// Required by login page filter
 | 
	
		
			
				|  |  |  			this.openIDFilterId = this.pc.getReaderContext().generateBeanName(openIDFilter);
 | 
	
		
			
				|  |  |  			this.pc.registerBeanComponent(new BeanComponentDefinition(openIDFilter, this.openIDFilterId));
 | 
	
	
		
			
				|  | @@ -430,14 +449,16 @@ final class AuthenticationConfigBuilder {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	private void createSaml2LoginFilter(BeanReference authenticationManager) {
 | 
	
		
			
				|  |  | +	private void createSaml2LoginFilter(BeanReference authenticationManager,
 | 
	
		
			
				|  |  | +			BeanReference authenticationFilterSecurityContextRepositoryRef) {
 | 
	
		
			
				|  |  |  		Element saml2LoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.SAML2_LOGIN);
 | 
	
		
			
				|  |  |  		if (saml2LoginElt == null) {
 | 
	
		
			
				|  |  |  			return;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		Saml2LoginBeanDefinitionParser parser = new Saml2LoginBeanDefinitionParser(this.csrfIgnoreRequestMatchers,
 | 
	
		
			
				|  |  |  				this.portMapper, this.portResolver, this.requestCache, this.allowSessionCreation, authenticationManager,
 | 
	
		
			
				|  |  | -				this.authenticationProviders, this.defaultEntryPointMappings);
 | 
	
		
			
				|  |  | +				authenticationFilterSecurityContextRepositoryRef, this.authenticationProviders,
 | 
	
		
			
				|  |  | +				this.defaultEntryPointMappings);
 | 
	
		
			
				|  |  |  		BeanDefinition saml2WebSsoAuthenticationFilter = parser.parse(saml2LoginElt, this.pc);
 | 
	
		
			
				|  |  |  		this.saml2AuthorizationRequestFilter = parser.getSaml2WebSsoAuthenticationRequestFilter();
 | 
	
		
			
				|  |  |  
 |