|  | @@ -0,0 +1,76 @@
 | 
	
		
			
				|  |  | +.Explicit Saving of SecurityContext
 | 
	
		
			
				|  |  | +====
 | 
	
		
			
				|  |  | +.Java
 | 
	
		
			
				|  |  | +[source,java,role="primary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +public SecurityFilterChain filterChain(HttpSecurity http) {
 | 
	
		
			
				|  |  | +	http
 | 
	
		
			
				|  |  | +		// ...
 | 
	
		
			
				|  |  | +		.securityContext((securityContext) -> securityContext
 | 
	
		
			
				|  |  | +			.requireExplicitSave(true)
 | 
	
		
			
				|  |  | +		);
 | 
	
		
			
				|  |  | +	return http.build();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.Kotlin
 | 
	
		
			
				|  |  | +[source,kotlin,role="secondary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +@Bean
 | 
	
		
			
				|  |  | +open fun springSecurity(http: HttpSecurity): SecurityFilterChain {
 | 
	
		
			
				|  |  | +    http {
 | 
	
		
			
				|  |  | +        securityContext {
 | 
	
		
			
				|  |  | +            requireExplicitSave = true
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return http.build()
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.XML
 | 
	
		
			
				|  |  | +[source,xml,role="secondary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +<http security-context-explicit-save="true">
 | 
	
		
			
				|  |  | +	<!-- ... -->
 | 
	
		
			
				|  |  | +</http>
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +====
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Upon using the configuration, it is important that any code that sets the `SecurityContextHolder` with a `SecurityContext` also saves the `SecurityContext` to the `SecurityContextRepository` if it should be persisted between requests.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +For example, the following code:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.Setting `SecurityContextHolder` with `SecurityContextPersistenceFilter`
 | 
	
		
			
				|  |  | +====
 | 
	
		
			
				|  |  | +.Java
 | 
	
		
			
				|  |  | +[source,java,role="primary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +SecurityContextHolder.setContext(securityContext);
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.Kotlin
 | 
	
		
			
				|  |  | +[source,kotlin,role="secondary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +SecurityContextHolder.setContext(securityContext)
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +====
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +should be replaced with
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.Setting `SecurityContextHolder` with `SecurityContextHolderFilter`
 | 
	
		
			
				|  |  | +====
 | 
	
		
			
				|  |  | +.Java
 | 
	
		
			
				|  |  | +[source,java,role="primary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +SecurityContextHolder.setContext(securityContext);
 | 
	
		
			
				|  |  | +securityContextRepository.saveContext(securityContext, httpServletRequest, httpServletResponse);
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.Kotlin
 | 
	
		
			
				|  |  | +[source,kotlin,role="secondary"]
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +SecurityContextHolder.setContext(securityContext)
 | 
	
		
			
				|  |  | +securityContextRepository.saveContext(securityContext, httpServletRequest, httpServletResponse)
 | 
	
		
			
				|  |  | +----
 | 
	
		
			
				|  |  | +====
 |