spring boot整合 spring security之自定义退出
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot整合 spring security之自定义退出相关的知识,希望对你有一定的参考价值。
一 security默认的退出
Spring security
默认实现了
logout
退出,访问
/logout:
实现逻辑:
点击
“Log Out”
退出 成功。
退出 后访问其它
url
判断是否成功退出。
二 自定义退出
2.1 配置文件中配置
在
WebSecurityConfifig
的
protected void confifigure(HttpSecurity http)
中配置:
.and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login‐view?logout");
2.2 测试
输入退出地址:
退出之后,跳转到session失效的url制定的页面
将session失效的跳转路径注释掉:
重新登录访问,退出测试:
退出到登录界面:
可以看到:如果设置了session失效跳转路径,退出登录后,还要执行session失效跳转的路径。
当退出操作出发时,将发生:
使HTTP Session 无效
清除 SecurityContextHolder
跳转到 /login-view?logout
如果设置了session失效路径,则跳转到session失效的路径
。
2.3 自定退出的更丰富功能
@Overrideprotected void configure ( HttpSecurity http ) throws Exception {http. authorizeRequests ()//.... and (). logout () ( 1 ). logoutUrl ( "/logout" ) ( 2 ). logoutSuccessUrl ( "/login‐view?logout" ) ( 3 ). logoutSuccessHandler ( logoutSuccessHandler ) ( 4 ). addLogoutHandler ( logoutHandler ) ( 5 ). invalidateHttpSession ( true ); ( 6 )}
(
1
)提供系统退出支持,
使用 WebSecurityConfigurerAdapter 会自动被应用
(
2
)设置触发退出操作的URL (默认是 /logout ).
(
3
)退出之后跳转的
URL。默认是 /login?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功能的相关清理
CookieClearingLogoutHandler
退出时Cookie的相关清理
CsrfLogoutHandler
负
责在退出时移除csrfToken
SecurityContextLogoutHandler
退出时SecurityContext的相关清理
以上是关于spring boot整合 spring security之自定义退出的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot:Spring Boot整合FreeMarker