Spring Security 系列
Spring Security-01-Hello World
Spring Security-02-springboot 入门使用实战
Spring Security-04-密码加密详解及源码分析
Spring Security-08-Authentication 认证详解
Spring Security-09-Authentication session 管理
Spring Security-10-Authentication 记住我特性实现
Spring Security-11-Authentication 匿名登录特性 & RunAS 以 xx 身份
Spring Security-12-Authentication logout 登出特性
Spring Security-13-Authorization 授权
Spring Security-14-Authorization 使用FilterSecurityInterceptor授权HttpServletRequest
Spring Security-15-Authorization 基于表达式的访问控制
Spring Security-16-Authorization 安全对象实施
Spring Security-17-Authorization 方法安全
Spring Security-18-Authorization Domain Object Security (ACLs)
序言
这一节我们来学习一下 spring security 的整体架构设计。
处理注销
注销 Java 配置
使用WebSecurityConfigurerAdapter时,将自动应用注销功能。
默认是访问 URL/logout 将通过以下方式注销用户:
使HTTP会话无效
清理所有已配置的RememberMe身份验证
清除SecurityContextHolder
重定向到 /login?logout
但是,与配置登录功能相似,您还可以使用各种选项来进一步自定义注销要求:
- 配置
protected void configure(HttpSecurity http) throws Exception {
http
.logout(logout -> logout
.logoutUrl("/my/logout")
.logoutSuccessUrl("/my/index")
.logoutSuccessHandler(logoutSuccessHandler)
.invalidateHttpSession(true)
.addLogoutHandler(logoutHandler)
.deleteCookies(cookieNamesToClear)
)
...
}
注销XML配置
logout元素通过导航到特定URL来添加对注销的支持。
默认注销URL是 /logout
,但是您可以使用logout-url属性将其设置为其他名称。
注销处理程序
通常,LogoutHandler实现指示能够参与注销处理的类。 预计将调用它们以执行必要的清理。
因此,它们不应引发异常。
提供了各种实现:
PersistentTokenBasedRememberMeServices
TokenBasedRememberMeServices
CookieClearingLogoutHandler
CsrfLogoutHandler
SecurityContextLogoutHandler
HeaderWriterLogoutHandler
有关详细信息,请参见“记住我的界面和实现”。
除了直接提供LogoutHandler实现之外,fluent API还提供了快捷方式,这些快捷方式在幕后提供了各自的LogoutHandler实现。
例如。 deleteCookies()允许指定在注销成功后要删除的一个或多个cookie的名称。
与添加CookieClearingLogoutHandler相比,这是一种快捷方式。
注销成功处理程序
LogoutFilter成功注销后,将调用LogoutSuccessHandler来处理例如重定向或转发到适当的目的地。
请注意,该接口与LogoutHandler几乎相同,但可能会引发异常。
提供以下实现:
SimpleUrlLogoutSuccessHandler
HttpStatusReturningLogoutSuccessHandler
如上所述,您无需直接指定SimpleUrlLogoutSuccessHandler。相反,流利的API通过设置logoutSuccessUrl()提供了快捷方式。这将在幕后设置SimpleUrlLogoutSuccessHandler。
提供的URL将在注销后重定向到,默认值为 /login?logout
。
在REST API类型的场景中,HttpStatusReturningLogoutSuccessHandler可能很有趣。通过LogoutSuccessHandler,您不必提供在成功注销后重定向到URL的方法,而是可以提供要返回的纯HTTP状态代码。如果未配置,默认情况下将返回状态码200。
其他注销相关参考
注销处理
测试登出
HttpServletRequest.logout()
记住我的接口和实现
在CSRF警告部分注销
单节注销(CAS协议)
Spring Security XML命名空间部分中注销元素的文档
小结
希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。
我是老马,期待与你的下次相遇。
参考资料
https://docs.spring.io/spring-security/site/docs/5.4.2/reference/html5/#features