6. Spring Seurity 5.1 之注销实现

1.1 Handling Logouts

使用WebSecurityConfigurerAdapter时,会自动应用注销功能。 默认情况下,访问URL /logout将通过以下方式记录用户:

  • 使HTTP会话无效
  • 清理已配置的任何RememberMe身份验证
  • 清除SecurityContextHolder
  • 重定向到 /login?logout

但是,与配置登录功能类似,您还可以使用各种选项来进一步自定义注销要求:

protected void configure(HttpSecurity http) throws Exception {
    http
        .logout()                  1
            .logoutUrl("/my/logout")      2
            .logoutSuccessUrl("/my/index")     3
            .logoutSuccessHandler(logoutSuccessHandler)     4
            .invalidateHttpSession(true)         5
            .addLogoutHandler(logoutHandler)       6
            .deleteCookies(cookieNamesToClear)       7
            .and()
        ...
}
  • 1.提供注销支持。使用WebSecurityConfigurerAdapter时会自动应用此选项。

  • 2触发注销的URL(默认为/ logout)。如果启用了CSRF保护(默认),则该请求也必须是POST。有关更多信息,请参阅JavaDoc。

  • 3注销后重定向到的URL。默认为/ login?logout。有关更多信息,请参阅JavaDoc。

  • 4我们指定一个自定义的LogoutSuccessHandler。如果指定了此参数,则忽略logoutSuccessUrl()。有关更多信息,请参阅JavaDoc。

  • 5.指定在注销时是否使HttpSession无效。默认情况下这是真的。配置封面下的SecurityContextLogoutHandler。有关更多信息,请参阅JavaDoc。

  • 6添加LogoutHandler。默认情况下,SecurityContextLogoutHandler被添加为最后一个LogoutHandler。

  • 7允许指定在注销成功时删除的cookie的名称。这是显式添加CookieClearingLogoutHandler的快捷方式。

当然也可以使用XML Namespace表示法配置注销。 有关更多详细信息,请参阅Spring Security XML Namespace部分中logout元素的文档

通常,为了自定义注销功能,您可以添加LogoutHandler和/或LogoutSuccessHandler实现。 对于许多常见场景,使用流畅的API时,这些处理程序将在幕后应用。

1.2 LogoutHandler

通常,LogoutHandler实现指示能够参与注销处理的类。 预计将调用它们以进行必要的清理。 因此,他们不应该抛出异常。 提供了各种实现:

  • PersistentTokenBasedRememberMeServices
  • TokenBasedRememberMeServices
  • CookieClearingLogoutHandler
  • CsrfLogoutHandler
  • SecurityContextLogoutHandler

有关详细信息,请参见第10.5.4节“记住我的接口和实现”。

而不是直接提供LogoutHandler实现,流畅的API还提供了快捷方式,提供了相应的LogoutHandler实现。 例如。 deleteCookies()允许指定在注销成功时删除的一个或多个cookie的名称。 与添加CookieClearingLogoutHandler相比,这是一种快捷方式。

1.3 LogoutSuccessHandler

在LogoutFilter成功注销后调用LogoutSuccessHandler来处理例如 重定向或转发到适当的目的地。 请注意,该接口与LogoutHandler几乎相同,但可能引发异常。

提供以下实现:

  • SimpleUrlLogoutSuccessHandler
  • HttpStatusReturningLogoutSuccessHandler

如上所述,您不需要直接指定SimpleUrlLogoutSuccessHandler。 相反,fluent API通过设置logoutSuccessUrl()来提供快捷方式。 这将在封面下设置SimpleUrlLogoutSuccessHandler。 发生注销后,提供的URL将重定向到。 默认为/login?logout

HttpStatusReturningLogoutSuccessHandler在REST API类型场景中可能很有趣。 此LogoutSuccessHandler允许您提供要返回的纯HTTP状态代码,而不是在成功注销后重定向到URL。 如果未配置,则默认情况下将返回状态代码200

猜你喜欢

转载自blog.csdn.net/hadues/article/details/89297736