mirror of
				https://github.com/spring-projects/spring-security.git
				synced 2025-10-30 22:28:46 +00:00 
			
		
		
		
	Document Configure Default SessionAuthenticationStrategy
Closes gh-12192
This commit is contained in:
		
							parent
							
								
									aefc157953
								
							
						
					
					
						commit
						ef8c4d85bc
					
				| @ -13,6 +13,98 @@ endif::[] | |||||||
| 
 | 
 | ||||||
| == Servlet | == Servlet | ||||||
| 
 | 
 | ||||||
|  | === Explicit SessionAuthenticationStrategy | ||||||
|  | 
 | ||||||
|  | In Spring Security 5, the default configuration relies on `SessionManagementFilter` to detect if a user just authenticated and invoke the `SessionAuthenticationStrategy`. | ||||||
|  | The problem with this is that it means that in a typical setup, the `HttpSession` must be read for every request. | ||||||
|  | 
 | ||||||
|  | In Spring Security 6, the default is that authentication mechanisms themselves must invoke the `SessionAuthenticationStrategy`. | ||||||
|  | This means that there is no need to detect when `Authentication` is done and thus the `HttpSession` does not need to be read for every request. | ||||||
|  | 
 | ||||||
|  | To opt into the new Spring Security 6 default, the following configuration can be used. | ||||||
|  | 
 | ||||||
|  | .Require Explicit `SessionAuthenticationStrategy` Invocation | ||||||
|  | ==== | ||||||
|  | .Java | ||||||
|  | [source,java,role="primary"] | ||||||
|  | ---- | ||||||
|  | @Bean | ||||||
|  | DefaultSecurityFilterChain springSecurity(HttpSecurity http) throws Exception { | ||||||
|  | 	http | ||||||
|  | 		// ... | ||||||
|  | 		.sessionManagement((sessions) -> sessions | ||||||
|  | 			.requireExplicitAuthenticationStrategy(true) | ||||||
|  | 		); | ||||||
|  | 	return http.build(); | ||||||
|  | } | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | .Kotlin | ||||||
|  | [source,kotlin,role="secondary"] | ||||||
|  | ---- | ||||||
|  | @Bean | ||||||
|  | open fun springSecurity(http: HttpSecurity): SecurityFilterChain { | ||||||
|  | 	http { | ||||||
|  | 		sessionManagement { | ||||||
|  | 			requireExplicitAuthenticationStrategy = true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return http.build() | ||||||
|  | } | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | .XML | ||||||
|  | [source,xml,role="secondary"] | ||||||
|  | ---- | ||||||
|  | <http> | ||||||
|  | 	<!-- ... --> | ||||||
|  | 	<session-management authentication-strategy-explicit-invocation="true"/> | ||||||
|  | </http> | ||||||
|  | ---- | ||||||
|  | ==== | ||||||
|  | 
 | ||||||
|  | If this breaks your application, then you can explicitly opt into the 5.8 defaults using the following configuration: | ||||||
|  | 
 | ||||||
|  | .Explicit use Spring Security 5.8 defaults for `SessionAuthenticationStrategy` | ||||||
|  | ==== | ||||||
|  | .Java | ||||||
|  | [source,java,role="primary"] | ||||||
|  | ---- | ||||||
|  | @Bean | ||||||
|  | DefaultSecurityFilterChain springSecurity(HttpSecurity http) throws Exception { | ||||||
|  | 	http | ||||||
|  | 		// ... | ||||||
|  | 		.sessionManagement((sessions) -> sessions | ||||||
|  | 			.requireExplicitAuthenticationStrategy(false) | ||||||
|  | 		); | ||||||
|  | 	return http.build(); | ||||||
|  | } | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | .Kotlin | ||||||
|  | [source,kotlin,role="secondary"] | ||||||
|  | ---- | ||||||
|  | @Bean | ||||||
|  | open fun springSecurity(http: HttpSecurity): SecurityFilterChain { | ||||||
|  | 	http { | ||||||
|  | 		sessionManagement { | ||||||
|  | 			requireExplicitAuthenticationStrategy = false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return http.build() | ||||||
|  | } | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | .XML | ||||||
|  | [source,xml,role="secondary"] | ||||||
|  | ---- | ||||||
|  | <http> | ||||||
|  | 	<!-- ... --> | ||||||
|  | 	<session-management authentication-strategy-explicit-invocation="false"/> | ||||||
|  | </http> | ||||||
|  | ---- | ||||||
|  | ==== | ||||||
|  | 
 | ||||||
| === Defer Loading CsrfToken | === Defer Loading CsrfToken | ||||||
| 
 | 
 | ||||||
| In Spring Security 5, the default behavior is that the `CsrfToken` will be loaded on every request. | In Spring Security 5, the default behavior is that the `CsrfToken` will be loaded on every request. | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user