10、处理登出
当使用WebSecurityConfigurerAdapter
时注销功能会被自动运用上,默认是通过访问/logout
这个URL将用户登出,该操作执行以下动作:
- 使Session无效
- 清除所有已经配置的RememberMe认证
- 清除SecurityContextHolder
- 跳转到/login?success
和登录功能类似,你也有不同的选项来定制你的注销功能。
protected void configure(HttpSecurity http) throws Exception {
http
.logout() // 1
.logoutUrl("/my/logout")// 2
.logoutSuccessUrl("/my/index") // 3
.logoutSuccessHandler(logoutSuccessHandler)//4
.invalidateHttpSession(true) // 5
.addLogoutHandler(logoutHandler) // 6
.deleteCookies(cookieNamesToClear) //7
.and()
...
}
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
的实现类可以参与到注销处理中。他们被用来执行必要的清理,因而他们不应该抛出错误,我们提供各种实现:
- PersistentTokenBasedRememberMeServices
- TokenBasedRememberMeServices
- CookieClearingLogoutHandler
- CsrfLogoutHandler
- SecurityContextLogoutHandler
请查看“Remember-Me接口和实现”获取详情。
流式API提供了调用相应的LogoutHandler
实现的快捷方式,而不用直接提供LogoutHandler
的实现。例如:deleteCookies()
允许指定注销成功时要删除的一个或者多个cookie.这是一个添加CookieClearingLogoutHandler
的快捷方式。
LogoutSuccessHandler
LogoutSuccessHandler
被LogoutFiler
在成功注销后调用,用来进行重定向或者转发相应的目的地。注意这个接口与LogoutHandler几乎一样,但是可以抛出异常。
下面是提供的一些实现:
- SimpleUrlLogoutSuccessHandler
- HttpStatusReturningLogoutSuccessHandler
和前面提到的一样,你不需要直接指定SimpleUrlLogoutSuccessHandler
.而使用流式API通过设置logoutSuccessUrl()
快捷的进行设置。这样会隐式的设置SimpleUrlLogoutSuccessHandler
. 注销成功后将重定向到设置的URL地址。默认的地址是/login?logout
.
在REST API场景中HttpStatusReturningLogoutSuccessHandler
会进行一些有趣的改变。LogoutSuccessHandler
允许你设置一个返回给客户端的HTTP状态码(默认返回200)来替换重定向到URL这个动作.
进一步的注销相关的参考(TODO)
- 处理注销
- 测试注销
- HttpServletRequest.logout()
- 章节 “Remember-Me 接口和实现”
- 注销的CSRF说明
- 单点注销(CAS协议)
- 注销的XML命名空间章节