阅读 195

SpringSecurity学习 - 表单退出登录的例子

简介

前面我们介绍了表单登录的入门案例;

本篇介绍下表单退出登录的入门案例,代码基于表单登录的案例进行了修改;

代码地址见文末

目录

  1. 退出登录的基本配置

  2. 退出登录的相关跳转

  3. 退出登录时的缓存更新

  4. 退出登录时的处理器

正文

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


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐