对于最新的稳定版本,请使用 Spring Security 6.5.3spring-doc.cadn.net.cn

处理注销

注销 Java/Kotlin 配置

当注入HttpSecuritybean,注销功能会自动应用。默认是访问 URL/logout将通过以下方式将用户注销:spring-doc.cadn.net.cn

但是,与配置登录功能类似,您还可以选择各种选项来进一步自定义注销要求:spring-doc.cadn.net.cn

注销配置
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(默认值为/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 命名空间表示法配置注销。有关更多详细信息,请参阅 Spring Security XML 命名空间部分中注销元素的文档。spring-doc.cadn.net.cn

通常,为了自定义注销功能,您可以添加LogoutHandler和/或LogoutSuccessHandler实现。 对于许多常见方案,这些处理程序在covers 下使用 fluent API 时。spring-doc.cadn.net.cn

注销 XML 配置

logout元素添加了对通过导航到特定 URL 注销的支持。默认注销 URL 为/logout,但您可以使用logout-url属性。 有关其他可用属性的更多信息,请参阅命名空间附录。spring-doc.cadn.net.cn

注销处理程序

一般LogoutHandler实现表示能够参与注销处理的类。预计将调用它们来执行必要的清理。因此,它们应该不抛出异常。提供了各种实现:spring-doc.cadn.net.cn

有关详细信息,请参阅 Remember-Me 接口和实现spring-doc.cadn.net.cn

而不是提供LogoutHandler直接实现,Fluent API 还提供了快捷方式,这些快捷方式提供了相应的LogoutHandler幕后实施。 例如deleteCookies()允许指定注销成功时要删除的一个或多个 cookie 的名称。 与添加CookieClearingLogoutHandler.spring-doc.cadn.net.cn

LogoutSuccessHandler

LogoutSuccessHandler在成功注销后被调用LogoutFilter,以处理例如 重定向或转发到适当的目的地。 请注意,该接口与LogoutHandler但可能会引发异常。spring-doc.cadn.net.cn

提供了以下实现:spring-doc.cadn.net.cn

如上所述,您无需指定SimpleUrlLogoutSuccessHandler径直。 相反,Fluent API 通过设置logoutSuccessUrl(). 这将设置SimpleUrlLogoutSuccessHandler在被窝里。 注销后,提供的 URL 将被重定向到。 默认值为/login?logout.spring-doc.cadn.net.cn

HttpStatusReturningLogoutSuccessHandler在 REST API 类型方案中可能很有趣。 成功注销后,此 URL 不是重定向到 URLLogoutSuccessHandler允许您提供要返回的纯 HTTP 状态代码。 如果未配置,则默认情况下将返回状态代码 200。spring-doc.cadn.net.cn