1.1 Handling Logouts
使用WebSecurityConfigurerAdapter
时,会自动应用注销功能。 默认情况下,访问URL /logout
将通过以下方式记录用户:
- 使HTTP会话无效
- 清理已配置的任何RememberMe身份验证
- 清除SecurityContextHolder
- 重定向到
/login?logout
但是,与配置登录功能类似,您还可以使用各种选项来进一步自定义注销要求:
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。有关更多信息,请参阅JavaDoc。
-
4我们指定一个自定义的LogoutSuccessHandler。如果指定了此参数,则忽略logoutSuccessUrl()。有关更多信息,请参阅JavaDoc。
-
5.指定在注销时是否使HttpSession无效。默认情况下这是真的。配置封面下的SecurityContextLogoutHandler。有关更多信息,请参阅JavaDoc。
-
6添加LogoutHandler。默认情况下,SecurityContextLogoutHandler被添加为最后一个LogoutHandler。
-
7允许指定在注销成功时删除的cookie的名称。这是显式添加CookieClearingLogoutHandler的快捷方式。
当然也可以使用XML Namespace表示法配置注销。 有关更多详细信息,请参阅Spring Security XML Namespace部分中logout元素的文档
通常,为了自定义注销功能,您可以添加LogoutHandler和/或LogoutSuccessHandler实现。 对于许多常见场景,使用流畅的API时,这些处理程序将在幕后应用。
1.2 LogoutHandler
通常,LogoutHandler实现指示能够参与注销处理的类。 预计将调用它们以进行必要的清理。 因此,他们不应该抛出异常。 提供了各种实现:
- PersistentTokenBasedRememberMeServices
- TokenBasedRememberMeServices
- CookieClearingLogoutHandler
- CsrfLogoutHandler
- SecurityContextLogoutHandler
有关详细信息,请参见第10.5.4节“记住我的接口和实现”。
而不是直接提供LogoutHandler实现,流畅的API还提供了快捷方式,提供了相应的LogoutHandler实现。 例如。 deleteCookies()
允许指定在注销成功时删除的一个或多个cookie的名称。 与添加CookieClearingLogoutHandler
相比,这是一种快捷方式。
1.3 LogoutSuccessHandler
在LogoutFilter成功注销后调用LogoutSuccessHandler来处理例如 重定向或转发到适当的目的地。 请注意,该接口与LogoutHandler几乎相同,但可能引发异常。
提供以下实现:
- SimpleUrlLogoutSuccessHandler
- HttpStatusReturningLogoutSuccessHandler
如上所述,您不需要直接指定SimpleUrlLogoutSuccessHandler
。 相反,fluent API通过设置logoutSuccessUrl()
来提供快捷方式。 这将在封面下设置SimpleUrlLogoutSuccessHandler
。 发生注销后,提供的URL将重定向到。 默认为/login?logout
HttpStatusReturningLogoutSuccessHandler
在REST API类型场景中可能很有趣。 此LogoutSuccessHandler
允许您提供要返回的纯HTTP状态代码,而不是在成功注销后重定向到URL。 如果未配置,则默认情况下将返回状态代码200
。