当使用WebSecurityConfigurerAdapter
时注销功能会被自动运用上,默认是通过访问/logout
这个URL将用户登出,该操作执行以下动作:
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()
...
}
WebSecurityConfigurerAdapter.
是会自动被应用。/login?logout
,具体查看JaveDoc文档LogoutSuccessHandler
,如果指定了这个选项那么logoutSuccessUrl()
的设置会被忽略,请查阅JavaDoc文档SecurityContextLogoutHandler
选项。请参阅JavaDoclogoutHandler
,默认SecurityContextLogoutHandler
会被添加为最后一个logoutHandler.允许指定在注销成功时将移除的cookie.这是一个显示的添加一个CookieClearingLogoutHandler
的快捷方式。
注销也可以通过XML命名空间进行配置,请参阅Spring Security XML命令空间相关文档获取更多细节。
一般来说,为了定制注销功能,你可以添加LogoutHandler
以及LogoutSuccessHandler
的实现。对于许多常见场景,当使用流式API时,这些处理器会在幕后进行添加。
一般来说,LogoutHandler
的实现类可以参与到注销处理中。他们被用来执行必要的清理,因而他们不应该抛出错误,我们提供各种实现:
请查看 "Remember-Me接口和实现"获取详情。
流式API提供了调用相应的LogoutHandler
实现的快捷方式,而不用直接提供LogoutHandler
的实现。例如:deleteCookies()
允许指定注销成功时要删除的一个或者多个cookie.这是一个添加CookieClearingLogoutHandler
的快捷方式。
LogoutSuccessHandler
被LogoutFiler
在成功注销后调用,用来进行重定向或者转发相应的目的地。注意这个接口与LogoutHandler几乎一样,但是可以抛出异常。
下面是 提供的一些实现:
和前面提到的一样,你不需要直接指定SimpleUrlLogoutSuccessHandler
.而使用流式API通过设置logoutSuccessUrl()
快捷的进行设置。这样会隐式的设置SimpleUrlLogoutSuccessHandler
. 注销成功后将重定向到设置的URL地址。默认的地址是/login?logout
.
在REST API场景中HttpStatusReturningLogoutSuccessHandler
会进行一些有趣的改变。LogoutSuccessHandler
允许你设置一个返回给客户端的HTTP状态码(默认返回200)来替换重定向到URL这个动作.