# 处理注销
# 注销 爪哇/ Kotlin 配置
当使用[WebSecurityConfigurerAdapter](https://docs.spring.io/spring-security/site/docs/5.6.2/api/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html)
时,将自动应用注销功能。默认情况下,访问 URL/logout
将通过以下方式将用户注销:
使 HTTP会话无效
清除所有已配置的 RememberMe 身份验证
清除
SecurityContextHolder
重定向到
/login?logout
然而,与配置登录功能类似,你还可以使用各种选项来进一步定制你的注销需求:
例 1。注销配置
Java
protected void configure(HttpSecurity http) throws Exception {
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)
)
...
}
Kotlin
override fun configure(http: HttpSecurity) {
http {
logout {
logoutUrl = "/my/logout" (1)
logoutSuccessUrl = "/my/index" (2)
logoutSuccessHandler = customLogoutSuccessHandler (3)
invalidateHttpSession = true (4)
addLogoutHandler(logoutHandler) (5)
deleteCookies(cookieNamesToClear) (6)
}
}
}
1 | 提供注销支持。 当使用 WebSecurityConfigurerAdapter 时,会自动应用此功能。 |
---|---|
2 | 触发注销发生的 URL(默认值是/logout )。如果启用了 CSRF 保护(默认值),那么请求也必须是 POST。 有关更多信息,请咨询Javadoc (opens new window)。 |
3 | 发生注销后要重定向到的 URL。 默认值为 /login?logout 。有关更多信息,请咨询Javadoc (opens new window)。 |
4 | 让我们指定一个自定义LogoutSuccessShandler 。如果指定了这个, logoutSuccessUrl() 将被忽略。有关更多信息,请咨询Javadoc (opens new window)。 |
5 | 指定是否在注销时使HttpSession 无效。默认情况下这是true。 配置了封面下的 SecurityContextLogouthandler 。有关更多信息,请咨询Javadoc (opens new window)。 |
6 | 添加LogoutHandler 。默认情况下,SecurityContextLogoutHandler 是作为最后一个LogoutHandler 添加的。 |
7 | 允许指定注销成功后要删除的 cookie 的名称。 这是显式添加 CookieClearingLogoutHandler 的快捷方式。 |
当然,也可以使用 XML 命名空间符号来配置注销。 请参阅 Spring Security XML 命名空间小节中注销元素的文档以获取更多详细信息。 |
---|
通常,为了定制注销功能,可以添加[LogoutHandler](https://docs.spring.io/spring-security/site/docs/5.6.2/api/org/springframework/security/web/authentication/logout/LogoutHandler.html)
和/或[LogoutSuccessHandler](https://docs.spring.io/spring-security/site/docs/5.6.2/api/org/springframework/security/web/authentication/logout/LogoutSuccessHandler.html)
实现。对于许多常见的场景,在使用 Fluent API 时,这些处理程序会被隐藏起来。
# 注销 XML 配置
logout
元素通过导航到特定的 URL,增加了对注销的支持。默认的注销 URL 是/logout
,但你可以使用logout-url
属性将其设置为其他内容。有关其他可用属性的更多信息,请参见名称空间附录。
# LogoutHandler
通常,[LogoutHandler](https://docs.spring.io/spring-security/site/docs/5.6.2/api/org/springframework/security/web/authentication/logout/LogoutHandler.html)
实现表示能够参与注销处理的类。预计将调用它们来执行必要的清理。因此,他们不应该抛出例外。提供了各种实现方式:
详情请见Remember-Me 接口和实现。
与其直接提供LogoutHandler
实现,Fluent API 还提供了一些快捷方式,这些快捷方式在封面下提供了相应的LogoutHandler
实现。例如:deleteCookies()
允许指定注销成功后要删除的一个或多个 Cookie 的名称。与添加CookieClearingLogoutHandler
相比,这是一个快捷方式。
# LogoutSuccessHandler
LogoutSuccessHandler
在LogoutFilter
成功注销后调用LogoutSuccessHandler
,以处理例如重定向或转发到适当的目的地。请注意,该接口几乎与LogoutHandler
相同,但可能会引发异常。
提供了以下实现方式:
HttpStatusReturningLogOutSuccessShandler
如上所述,你不需要直接指定SimpleUrlLogoutSuccessHandler
。相反,Fluent API 通过设置logoutSuccessUrl()
提供了一个快捷方式。这将在封面下设置SimpleUrlLogoutSuccessHandler
。注销发生后,提供的 URL 将被重定向到该 URL。默认值为/login?logout
。
在 REST API 类型场景中,HttpStatusReturningLogoutSuccessHandler
可能很有趣。这LogoutSuccessHandler
不是在成功注销后重定向到 URL,而是允许你提供一个要返回的普通 HTTP 状态代码。如果未配置状态代码 200,将在默认情况下返回。
# 更多与注销相关的参考资料
← run-as 身份验证替换 认证事件 →