对于最新的稳定版本,请使用 Spring Security 6.3.1! |
对于最新的稳定版本,请使用 Spring Security 6.3.1! |
注销 Java/Kotlin 配置
注入 Bean 时,会自动应用注销功能。
默认情况下,访问 URL 将通过以下方式注销用户:HttpSecurity
/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 | 触发注销的 URL(默认值为 )。
如果启用了 CSRF 保护(默认),则请求也必须是 POST。
有关更多信息,请查阅 Javadoc。/logout |
3 | 注销后要重定向到的 URL。
默认值为 。
有关更多信息,请查阅 Javadoc。/login?logout |
4 | 让我们指定一个自定义 .
如果指定了此项,则忽略此项。
有关更多信息,请查阅 Javadoc。LogoutSuccessHandler logoutSuccessUrl() |
5 | 指定是否在注销时使 失效。
默认情况下,这是 true 的。
配置底盖。
有关更多信息,请查阅 Javadoc。HttpSession SecurityContextLogoutHandler |
6 | 添加 . 默认添加为最后一个。LogoutHandler SecurityContextLogoutHandler LogoutHandler |
7 | 允许指定在注销成功时要删除的 Cookie 的名称。
这是显式添加的快捷方式。CookieClearingLogoutHandler |
当然,也可以使用 XML 命名空间表示法来配置注销。 有关更多详细信息,请参阅 Spring Security XML 命名空间部分中 logout 元素的文档。 |
通常,为了自定义注销功能,您可以添加和/或实现。
对于许多常见方案,这些处理程序应用在
涵盖使用 Fluent API 时的情况。LogoutHandler
LogoutSuccessHandler
1 | 提供注销支持。 |
2 | 触发注销的 URL(默认值为 )。
如果启用了 CSRF 保护(默认),则请求也必须是 POST。
有关更多信息,请查阅 Javadoc。/logout |
3 | 注销后要重定向到的 URL。
默认值为 。
有关更多信息,请查阅 Javadoc。/login?logout |
4 | 让我们指定一个自定义 .
如果指定了此项,则忽略此项。
有关更多信息,请查阅 Javadoc。LogoutSuccessHandler logoutSuccessUrl() |
5 | 指定是否在注销时使 失效。
默认情况下,这是 true 的。
配置底盖。
有关更多信息,请查阅 Javadoc。HttpSession SecurityContextLogoutHandler |
6 | 添加 . 默认添加为最后一个。LogoutHandler SecurityContextLogoutHandler LogoutHandler |
7 | 允许指定在注销成功时要删除的 Cookie 的名称。
这是显式添加的快捷方式。CookieClearingLogoutHandler |
当然,也可以使用 XML 命名空间表示法来配置注销。 有关更多详细信息,请参阅 Spring Security XML 命名空间部分中 logout 元素的文档。 |
注销 XML 配置
该元素添加了对通过导航到特定 URL 注销的支持。
默认注销 URL 为 ,但您可以使用该属性将其设置为其他 URL。
有关其他可用属性的详细信息,请参阅命名空间附录。logout
/logout
logout-url
LogoutHandler
通常,实现指示能够参与注销处理的类。
应调用它们来执行必要的清理。
因此,他们应该
不抛出异常。
提供了各种实现:LogoutHandler
有关详细信息,请参阅 Remember-Me 接口和实现。
Fluent API 不是直接提供实现,而是提供快捷方式,在后台提供相应的实现。
例如: 允许指定在注销成功时要删除的一个或多个 cookie 的名称。
与添加 .LogoutHandler
LogoutHandler
deleteCookies()
CookieClearingLogoutHandler
LogoutSuccessHandler
在成功注销后调用 ,以处理例如
重定向或转发到相应的目标。
请注意,该接口与 几乎相同,但可能会引发异常。LogoutSuccessHandler
LogoutFilter
LogoutHandler
提供了以下实现:
-
HttpStatusReturningLogoutSuccessHandler
如上所述,您不需要直接指定。
相反,Fluent API 通过设置 .
这将设置幕后。
注销后,将重定向到提供的 URL。
默认值为 。SimpleUrlLogoutSuccessHandler
logoutSuccessUrl()
SimpleUrlLogoutSuccessHandler
/login?logout
这在 REST API 类型方案中可能很有趣。
这允许您提供要返回的纯 HTTP 状态代码,而不是在成功注销时重定向到 URL。
如果未配置,则默认情况下将返回状态代码 200。HttpStatusReturningLogoutSuccessHandler
LogoutSuccessHandler