19.Spring Security应用详解-自定义退出

退出

  • 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()。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容