logout.adoc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. [[reactive-logout]]
  2. = Logout
  3. Spring Security provides a logout endpoint by default.
  4. Once logged in, you can `GET /logout` to see a default logout confirmation page, or you can `POST /logout` to initiate logout.
  5. This will:
  6. - clear the `ServerCsrfTokenRepository`, `ServerSecurityContextRepository`, and
  7. - redirect back to the login page
  8. Often, you will want to also invalidate the session on logout.
  9. To achieve this, you can add the `WebSessionServerLogoutHandler` to your logout configuration, like so:
  10. [tabs]
  11. ======
  12. Java::
  13. +
  14. [source,java,role="primary"]
  15. ----
  16. @Bean
  17. SecurityWebFilterChain http(ServerHttpSecurity http) throws Exception {
  18. DelegatingServerLogoutHandler logoutHandler = new DelegatingServerLogoutHandler(
  19. new SecurityContextServerLogoutHandler(), new WebSessionServerLogoutHandler()
  20. );
  21. http
  22. .authorizeExchange((authorize) -> authorize.anyExchange().authenticated())
  23. .logout((logout) -> logout.logoutHandler(logoutHandler));
  24. return http.build();
  25. }
  26. ----
  27. Kotlin::
  28. +
  29. [source,kotlin,role="secondary"]
  30. ----
  31. @Bean
  32. fun http(http: ServerHttpSecurity): SecurityWebFilterChain {
  33. val customLogoutHandler = DelegatingServerLogoutHandler(
  34. SecurityContextServerLogoutHandler(), WebSessionServerLogoutHandler()
  35. )
  36. return http {
  37. authorizeExchange {
  38. authorize(anyExchange, authenticated)
  39. }
  40. logout {
  41. logoutHandler = customLogoutHandler
  42. }
  43. }
  44. }
  45. ----
  46. ======