SpringSecurity学习 - 表单退出登录的例子
简介
前面我们介绍了表单登录的入门案例;
本篇介绍下表单退出登录的入门案例,代码基于表单登录的案例进行了修改;
代码地址见文末
目录
退出登录的基本配置
退出登录的相关跳转
退出登录时的缓存更新
退出登录时的处理器
正文
1. 退出登录的基本配置
最基本的配置如下所示:
@Override protected void configure(HttpSecurity http) throws Exception { http // 退出登录 所有用户都可以访问 .logout().permitAll(); } 复制代码
这里默认的退出登录url为/logout
,通过在url中访问http://localhost:8090/logout
就可以退出登录了。
当然最方便的还是在界面中进行链接跳转,如下所示:
<a href="logout">退出</a> 复制代码
2. 退出登录的相关跳转
logoutSuccessUrl配置:
退出登录跳转成功后的默认界面是根路径,比如http://localhost:8090/
;
下面我们可以进行简单的配置,配置成自己指定的界面,如下所示:一般推荐将退出登录成功后跳转的链接设置为登录界面(习惯)
@Override protected void configure(HttpSecurity http) throws Exception { http // 退出登录 所有用户都可以访问 .logout().permitAll() .logoutSuccessUrl("/login"); } 复制代码
logoutUrl配置:
退出登录跳转的默认url为/logout
,比如http://localhost:8090/logout
,如果退出登录成功,就跳转到上面配置的路径;
配置如下所示:
@Override protected void configure(HttpSecurity http) throws Exception { http // 退出登录 所有用户都可以访问 .logout().permitAll() .logoutUrl("/logout"); } 复制代码
3. 退出登录时的缓存更新
这里的缓存指的就是session和cookie;
在退出登录之后,需要将session失效处理,并删除对应的cookie;
对应的命令为:invalidateHttpSession()
和 deleteCookies(...name)
;
配置如下所示:
其中删除的Cookies名称为
JSESSIONID
,这个就是前后端交互的一个凭证id,是在第一次前端请求后端时,后端返回的id;后续的请求后端会根据JSESSIONID来匹配对应的session
@Override protected void configure(HttpSecurity http) throws Exception { http // 退出登录 所有用户都可以访问 .logout().permitAll() .logoutUrl("/logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID"); } 复制代码
4. 退出登录时的处理器
退出成功后,不仅可以设置特定的url,还可以执行一些自定义的操作;
对应的命令为:logoutSuccessHandler
比如我们需要记录退出登录时访问的最后一个界面,那么可以通过如下的代码来实现;
先定义一个处理器:CustomLogoutSuccessHandler.java
public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler { @Override public void onLogoutSuccess( HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { String refererUrl = request.getHeader("Referer"); System.out.println("Logout from: " + refererUrl); super.onLogoutSuccess(request, response, authentication); } } 复制代码
然后在配置中注入该处理器,通过方法注入,如下所示:
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Bean public LogoutSuccessHandler logoutSuccessHandler(){ return new CustomLogoutSuccessHandler(); } @Override protected void configure(HttpSecurity http) throws Exception { http // 退出登录 所有用户都可以访问 .logout() .permitAll() .logoutSuccessUrl("/login") .logoutUrl("/logout") .logoutSuccessHandler(logoutSuccessHandler()); } } 复制代码
这样我们在退出登录时,就可以看到控制台打印下面的内容:
Logout from: http://localhost:8090/home 复制代码
总结
本篇介绍了退出登录的相关配置和处理;
配置有:
logoutUrl(): 退出登录链接配置
logoutSuccessUrl(): 退出登录成功后的跳转链接
invalidateHttpSession: 失效session
deleteCookies() : 删除对应cookie,多个cookieName逗号分隔
LogoutSuccessHandler:退出登录时执行的相关操作
作者:汤圆学Java
链接:https://juejin.cn/post/7032214530214068261