18.Spring Security应用详解-会话管理
2020-03-27 本文已影响0人
LANSHENGYANG
退出
- 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()。