security-context-explicit.adoc 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. .Explicit Saving of SecurityContext
  2. ====
  3. .Java
  4. [source,java,role="primary"]
  5. ----
  6. public SecurityFilterChain filterChain(HttpSecurity http) {
  7. http
  8. // ...
  9. .securityContext((securityContext) -> securityContext
  10. .requireExplicitSave(true)
  11. );
  12. return http.build();
  13. }
  14. ----
  15. .Kotlin
  16. [source,kotlin,role="secondary"]
  17. ----
  18. @Bean
  19. open fun springSecurity(http: HttpSecurity): SecurityFilterChain {
  20. http {
  21. securityContext {
  22. requireExplicitSave = true
  23. }
  24. }
  25. return http.build()
  26. }
  27. ----
  28. .XML
  29. [source,xml,role="secondary"]
  30. ----
  31. <http security-context-explicit-save="true">
  32. <!-- ... -->
  33. </http>
  34. ----
  35. ====
  36. 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.
  37. For example, the following code:
  38. .Setting `SecurityContextHolder` with `SecurityContextPersistenceFilter`
  39. ====
  40. .Java
  41. [source,java,role="primary"]
  42. ----
  43. SecurityContextHolder.setContext(securityContext);
  44. ----
  45. .Kotlin
  46. [source,kotlin,role="secondary"]
  47. ----
  48. SecurityContextHolder.setContext(securityContext)
  49. ----
  50. ====
  51. should be replaced with
  52. .Setting `SecurityContextHolder` with `SecurityContextHolderFilter`
  53. ====
  54. .Java
  55. [source,java,role="primary"]
  56. ----
  57. SecurityContextHolder.setContext(securityContext);
  58. securityContextRepository.saveContext(securityContext, httpServletRequest, httpServletResponse);
  59. ----
  60. .Kotlin
  61. [source,kotlin,role="secondary"]
  62. ----
  63. SecurityContextHolder.setContext(securityContext)
  64. securityContextRepository.saveContext(securityContext, httpServletRequest, httpServletResponse)
  65. ----
  66. ====