Java配置 - 处理登出

优质
小牛编辑
134浏览
2023-12-01

当使用WebSecurityConfigurerAdapter时注销功能会被自动运用上,默认是通过访问/logout这个URL将用户登出,该操作执行以下动作:

  • 使Session无效
  • 清除所有已经配置的RememberMe认证
  • 清除SecurityContextHolder
  • 跳转到/login?success

和登录功能类似,你也有不同的选项来定制你的注销功能。

  1. protected void configure(HttpSecurity http) throws Exception {
  2. http
  3. .logout() // 1
  4. .logoutUrl("/my/logout")// 2
  5. .logoutSuccessUrl("/my/index") // 3
  6. .logoutSuccessHandler(logoutSuccessHandler)//4
  7. .invalidateHttpSession(true) // 5
  8. .addLogoutHandler(logoutHandler) // 6
  9. .deleteCookies(cookieNamesToClear) //7
  10. .and()
  11. ...
  12. }
  1. 提供注销支持,使用WebSecurityConfigurerAdapter.是会自动被应用。
  2. 设置触发注销操作的URL(默认是logout),如果CSRF保护被启用(默认是启用的)的话这个请求的方式被限定为POST.请查阅javaDoc相关信息。
  3. 注销之后跳转的URL.默认是/login?logout,具体查看JaveDoc文档
  4. 让你设置定制的LogoutSuccessHandler,如果指定了这个选项那么logoutSuccessUrl()的设置会被忽略,请查阅JavaDoc文档
  5. 指定是否在注销时让HttpSession无效。默认设置为true,在内部配置SecurityContextLogoutHandler选项。请参阅JavaDoc
  6. 添加一个logoutHandler,默认SecurityContextLogoutHandler会被添加为最后一个logoutHandler.
  7. 允许指定在注销成功时将移除的cookie.这是一个显示的添加一个CookieClearingLogoutHandler的快捷方式。

    注销也可以通过XML命名空间进行配置,请参阅Spring Security XML命令空间相关文档获取更多细节。

    一般来说,为了定制注销功能,你可以添加LogoutHandler以及LogoutSuccessHandler的实现。对于许多常见场景,当使用流式API时,这些处理器会在幕后进行添加。

    LogoutHandler

    一般来说,LogoutHandler的实现类可以参与到注销处理中。他们被用来执行必要的清理,因而他们不应该抛出错误,我们提供各种实现:

请查看 “Remember-Me接口和实现”获取详情。

流式API提供了调用相应的LogoutHandler实现的快捷方式,而不用直接提供LogoutHandler的实现。例如:deleteCookies() 允许指定注销成功时要删除的一个或者多个cookie.这是一个添加CookieClearingLogoutHandler的快捷方式。

LogoutSuccessHandler

LogoutSuccessHandlerLogoutFiler在成功注销后调用,用来进行重定向或者转发相应的目的地。注意这个接口与LogoutHandler几乎一样,但是可以抛出异常。

下面是 提供的一些实现:

和前面提到的一样,你不需要直接指定SimpleUrlLogoutSuccessHandler.而使用流式API通过设置logoutSuccessUrl()快捷的进行设置。这样会隐式的设置SimpleUrlLogoutSuccessHandler. 注销成功后将重定向到设置的URL地址。默认的地址是/login?logout.

在REST API场景中HttpStatusReturningLogoutSuccessHandler 会进行一些有趣的改变。LogoutSuccessHandler允许你设置一个返回给客户端的HTTP状态码(默认返回200)来替换重定向到URL这个动作.

进一步的注销相关的参考(TODO)