Logout Java Configuration

当使用WebSecurityConfigurerAdapter时,注销功能被自动应用。默认情况下,访问URL /logout将通过以下方式注销用户。

  • 无效的 HTTP Session
  • 清理任何已配置的RememberMe认证
  • 清除SecurityContextHolder
  • 重定向到/login?logout

然而,与配置登录功能类似,也有各种选项来进一步定制你的注销要求:

  1. protected void configure(HttpSecurity http) throws Exception {
  2. http
  3. .logout(logout -> logout
  4. .logoutUrl("/my/logout")
  5. .logoutSuccessUrl("/my/index")
  6. .logoutSuccessHandler(logoutSuccessHandler)
  7. .invalidateHttpSession(true)
  8. .addLogoutHandler(logoutHandler)
  9. .deleteCookies(cookieNamesToClear)
  10. )
  11. ...
  12. }
  1. 提供注销支持。当使用WebSecurityConfigurerAdapter时,这将自动应用
  2. 触发注销发生的URL(默认为/logout)。如果CSRF保护被启用(默认),那么该请求也必须是POST
  3. 注销成功后重定向到的URL。默认是/login?logout
  4. 指定一个自定义的LogoutSuccessHandler。如果指定了这个,logoutSuccessUrl()会被忽略
  5. 指定是否在注销时使HttpSession失效。这在默认情况下为真。在SecurityContextLogoutHandler中进行配置
  6. 添加一个LogoutHandler。默认情况下,SecurityContextLogoutHandler被添加为最后一个LogoutHandler
  7. 允许指定在注销成功时要删除的cookie的名称。这是明确添加CookieClearingLogoutHandler的一个快捷方式

一般来说,为了定制注销功能,你可以添加LogoutHandler和/或LogoutSuccessHandler实现。

LogoutHandler

一般来说,LogoutHandler的实现表示能够参与注销处理的类。它们应该被调用以执行必要的清理工作。因此,它们不应该抛出异常。我们提供了各种实现:

Please see Remember-Me Interfaces and Implementations for details.
API提供了快捷方式来替代LogoutHandler的实现。例如,deleteCookies()允许指定一个或多个cookie的名称,以便在注销成功时被删除。与添加一个CookieClearingLogoutHandler相比,这是一个捷径。

LogoutSuccessHandler

LogoutSuccessHandler在LogoutFilter成功登出后被调用,以处理例如重定向或转发到适当的目的地。请注意,该接口与LogoutHandler几乎相同,但可能会引发一个异常。它的实现有:

如上所述,你不需要直接指定SimpleUrlLogoutSuccessHandler。相反,fluent API通过设置logoutSuccessUrl()提供了一个捷径。这将会设置到SimpleUrlLogoutSuccessHandler的属性上。在注销发生后,将会重定向到所提供的URL,默认是/login?logout。
HttpStatusReturningLogoutSuccessHandler在REST API类型的场景中可能很有趣。这个LogoutSuccessHandler允许你提供一个普通的HTTP状态代码来返回,而不是在成功注销后重定向到一个URL。如果没有配置,默认会返回状态代码200。