2
0

security-context-explicit.adoc 1.7 KB

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