1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- .Explicit Saving of SecurityContext
- [tabs]
- ======
- 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`
- [tabs]
- ======
- Java::
- +
- [source,java,role="primary"]
- ----
- SecurityContextHolder.setContext(securityContext);
- ----
- Kotlin::
- +
- [source,kotlin,role="secondary"]
- ----
- SecurityContextHolder.setContext(securityContext)
- ----
- ======
- should be replaced with
- .Setting `SecurityContextHolder` with `SecurityContextHolderFilter`
- [tabs]
- ======
- 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)
- ----
- ======
|