18.Spring Security应用详解-会话管理

作者: LANSHENGYANG | 来源:发表于2020-03-27 11:24 被阅读0次

退出

  • Spring Security默认实现了logout退出,访问/logout,果然不出所料,退出功能Spring也替我们做好了。
  • 这个也可以自定义退出成功的页面:
  • 在WebSecurityConfig的protected void configure(HttpSecurity http)中配置:
. and()
. logout()
. logoutUrl("/logout")
. logoutSuccessUrl("/login-view?logout");
  • 当退出操作触发时,将发生:
    • 使HTTP Session无效
    • 清除SecurityContextHolder
    • 跳转到/login-view?logout
  • 但是。类似于配置登录功能,咱们可以进一步自定义退出功能:
    //安全拦截机制(最重要)
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .and()
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login-view?logout");
                .logoutSuccessHandler(logoutSuccessHandler)
                .addLogoutHandler( logoutHandler)
                .invalidateHttpSession(true);
    }
  • (1)提供系统退出支持,使用WebSecurityConfigurationAdapter会自动被应用
  • (2)设置触发退出操作的URL(默认是/logout)。
  • (3)退出之后跳转的URL。默认是/logout?logout
  • (4)制定的LogoutSuccessHandler,用于实现用户退出成功是的处理。如果指定了这个选项那么logoutSuccessUrl()的设置会被忽略。
  • (5)添加一个LogoutHandler,用于实现用户退出时的清理工作,默认SecurityContextLogoutHandler会被添加为最后一个LogoutHandler
  • (6)指定是否在退出时让HttpSession无效。默认设置为true。

注意让logout在GET请求下生效,必须关闭防止CSRF攻击csrf().disable()。如果开启了CSRF,必须使用post方式请求/logout

logoutHandler:

  • 一般来说,LogoutHandler的实现类被用来执行必要的清理,因而他们不应该抛出异常。
  • 下面是Spring Security提供的一些实现:
  • PersistentTokenBasedRememberMeServices 基于持久化token的RememberMe功能的相关清理
  • TokenBasedRememberMeService 基于token的RememberMe功能的相关清理
  • CookieClearinglogoutHander 退出时Cookie的相关清理
  • CsrfLogoutHandler 负责在退出时移除csrfToken
  • SecurityContextLogoutHandler 退出时SecurityContext的相关清理
  • 链式API提供了调用相应的LogoutHandler实现的快捷方式,比如deleteCookies()。

相关文章

网友评论

    本文标题:18.Spring Security应用详解-会话管理

    本文链接:https://www.haomeiwen.com/subject/xfcluhtx.html