|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Security 6.4.3! |
处理注销
注销 Java/Kotlin 配置
注入HttpSecuritybean,则会自动应用注销功能。
默认情况下,访问 URL/logout将通过以下方式注销用户:
-
使 HTTP 会话失效
-
清理已配置的任何 RememberMe 身份验证
-
清除
SecurityContextHolder -
清除
SecurityContextRepository -
重定向到
/login?logout
但是,与配置登录功能类似,您也有多种选项可以进一步自定义注销要求:
-
Java
-
Kotlin
public SecurityFilterChain filterChain(HttpSecurity http) {
http
.logout(logout -> logout (1)
.logoutUrl("/my/logout") (2)
.logoutSuccessUrl("/my/index") (3)
.logoutSuccessHandler(logoutSuccessHandler) (4)
.invalidateHttpSession(true) (5)
.addLogoutHandler(logoutHandler) (6)
.deleteCookies(cookieNamesToClear) (7)
)
...
}
open fun filterChain(http: HttpSecurity): SecurityFilterChain {
http {
logout { (1)
logoutUrl = "/my/logout" (2)
logoutSuccessUrl = "/my/index" (3)
logoutSuccessHandler = customLogoutSuccessHandler (4)
invalidateHttpSession = true (5)
addLogoutHandler(logoutHandler) (6)
deleteCookies(cookieNamesToClear) (7)
}
}
// ...
}
| 1 | 提供注销支持。 |
| 2 | 触发 log out 发生的 URL(默认值为/logout).
如果启用了 CSRF 保护(默认),则请求也必须是 POST。
有关更多信息,请参阅 Javadoc。 |
| 3 | 注销后要重定向到的 URL。
默认值为/login?logout.
有关更多信息,请参阅 Javadoc。 |
| 4 | 允许您指定自定义LogoutSuccessHandler.
如果指定了此项,则logoutSuccessUrl()被忽略。
有关更多信息,请参阅 Javadoc。 |
| 5 | 指定是否使HttpSession在注销时。
默认情况下,这是 true。
配置SecurityContextLogoutHandler在被窝里。
有关更多信息,请参阅 Javadoc。 |
| 6 | 添加LogoutHandler.SecurityContextLogoutHandler将添加为最后一个LogoutHandler默认情况下。 |
| 7 | 允许指定注销成功时要删除的 Cookie 的名称。
这是添加CookieClearingLogoutHandler明确地。 |
|
当然,也可以使用 XML Namespace 表示法来配置注销。 有关更多详细信息,请参阅 Spring Security XML Namespace 部分中 logout 元素的文档。 |
通常,为了自定义注销功能,您可以添加LogoutHandler和/或LogoutSuccessHandler实现。
对于许多常见场景,这些处理程序在
涵盖使用 Fluent API 时。
注销 XML 配置
这logout元素添加了对通过导航到特定 URL 进行注销的支持。
默认注销 URL 为/logout,但您可以使用logout-url属性。
有关其他可用属性的更多信息,请参阅 namespace appendix。
Logout处理程序
一般LogoutHandlerimplementations 表示能够参与 logout handling 的类。
应调用它们来执行必要的清理。
因此,他们应该
不会引发异常。
提供了各种实现:
有关详细信息,请参阅 Remember-Me Interfaces and Implementations 。
而不是提供LogoutHandler实现中,Fluent API 还提供了快捷方式,这些快捷方式提供了相应的LogoutHandler实施。
例如deleteCookies()允许指定在注销成功时要删除的一个或多个 Cookie 的名称。
与添加CookieClearingLogoutHandler.
LogoutSuccessHandler (登录成功处理程序)
这LogoutSuccessHandler在成功注销后由LogoutFilter,以处理例如
重定向或转发到适当的目标。
请注意,该接口与LogoutHandler但可能会引发异常。
提供了以下实现:
-
HttpStatusReturningLogoutSuccessHandler
如上所述,您无需指定SimpleUrlLogoutSuccessHandler径直。
相反,Fluent API 通过设置logoutSuccessUrl().
这将设置SimpleUrlLogoutSuccessHandler在被窝里。
注销后,提供的 URL 将被重定向到。
默认值为/login?logout.
这HttpStatusReturningLogoutSuccessHandler在 REST API 类型的场景中可能很有趣。
此 URL 不是在成功注销后重定向到 URL,而是LogoutSuccessHandler允许您提供要返回的纯 HTTP 状态代码。
如果未配置,则默认返回状态码 200。
更多与 Logout 相关的参考
-
在 CSRF 注意事项 一节中注销
-
部分 Single Logout (CAS protocol)
-
Spring Security XML Namespace 部分中的 logout 元素的文档