Spring Security使用详解7(注销登录配置)

Stella981
• 阅读 452

默认情况下,Spring Security 提供了注销接口是 /logout,访问这个接口即可注销当前登录用户并且自动跳转到登录页。如果需要修改注销接口,或者想在注销时做一些业务逻辑,或者注销后不是跳转到登录页而是返回一段 JSON 提示,只需在一些简单配置即可。

七、注销登录配置

1、样例代码

首先修改 Spring Security 配置,增加相关的自定义配置代码:

  • 开启并设置注销登录的 URL。

  • 在注销是做一些数据清除工作。

  • 注销后返回一段 JSON 提示,而是不是跳转到登录页。

    @Configuration public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter { // 指定密码的加密方式 @SuppressWarnings("deprecation") @Bean PasswordEncoder passwordEncoder(){ // 不对密码进行加密 return NoOpPasswordEncoder.getInstance(); } // 配置用户及其对应的角色 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("root").password("123").roles("DBA") .and() .withUser("admin").password("123").roles("ADMIN") .and() .withUser("hangge").password("123").roles("USER"); } // 配置 URL 访问权限 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 开启 HttpSecurity 配置 .antMatchers("/db/").hasRole("DBA") // db/ 模式URL需DBA角色 .antMatchers("/admin/").hasRole("ADMIN") // admin/ 模式URL需ADMIN角色 .antMatchers("/user/").hasRole("USER") // user/ 模式URL需USER角色 .anyRequest().authenticated() // 用户访问其它URL都必须认证后访问(登录后访问) .and().formLogin().loginProcessingUrl("/login").permitAll() // 开启表单登录并配置登录接口 .and().logout() // 开启注销登录的配置 .logoutUrl("/logout") // 配置注销登录请求URL为"/logout"(默认也就是 /logout) .clearAuthentication(true) // 清除身份认证信息 .invalidateHttpSession(true) // 使 session 失效 // 配置一个 LogoutHandler,开发者可以在这里完成一些数据清除工做 .addLogoutHandler(new LogoutHandler() { @Override public void logout(HttpServletRequest req, HttpServletResponse resp, Authentication auth) { System.out.println("注销登录,开始清除Cookie。"); } }) // 配置一个 LogoutSuccessHandler,开发者可以在这里处理注销成功后的业务逻辑 .logoutSuccessHandler(new LogoutSuccessHandler() { @Override public void onLogoutSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication auth) throws IOException, ServletException { // 我们可以跳转到登录页面 // resp.sendRedirect("/login"); // 也可以返回一段JSON提示 resp.setContentType("application/json;charset=utf-8"); PrintWriter out = resp.getWriter(); resp.setStatus(200); Map<String, Object> map = new HashMap<>(); map.put("status", 200); map.put("msg", "注销成功!"); ObjectMapper om = new ObjectMapper(); out.write(om.writeValueAsString(map)); out.flush(); out.close(); } }) .and().csrf().disable(); // 关闭csrf } }

2、运行测试

(1)用户登录后,我们访问 /logout 接口进行注销。注销后页面上返回如下信息,而是不是跳转到登录页面。

Spring Security使用详解7(注销登录配置)

(2)控制台输出如下:

Spring Security使用详解7(注销登录配置)

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
捉虫大师 捉虫大师
2年前
排查dubbo接口重复注销问题,我发现了一个巧妙的设计
背景我在公司内负责自研的dubbo注册中心相关工作,群里经常接到业务方反馈dubbo接口注销报错。经排查,确定是同一个接口调用了两次注销接口导致,由于我们的注册中心注销接口不能重复调用,调用第二次会因为实例已经注销而报实例找不到的错误。虽然这个报错仅会打印一条错误日志,不影响业务,但本着followthrough的精神,我决定还是一探究竟,更何况重复注销
Easter79 Easter79
2年前
SpringBoot集成SpringSecurity+CAS
1、简介本文主要讲述如何通过SpringSecurityCAS在springboot项目中实现单点登录和单点注销的功能。参考内容有SpringSecurity官方文档中的1.5\.JavaConfiguration(https://www.oschina.net/action/GoToLink?urlhttps%3
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
SpringBoot集成SpringSecurity+CAS
1、简介本文主要讲述如何通过SpringSecurityCAS在springboot项目中实现单点登录和单点注销的功能。参考内容有SpringSecurity官方文档中的1.5\.JavaConfiguration(https://www.oschina.net/action/GoToLink?urlhttps%3
Stella981 Stella981
2年前
Spring Security使用详解6(自定义登录页、接口、结果)
在之前的所有样例中,登录表单一直都是使用SpringSecurity提供的默认登录页,登录成功后也是默认的页面跳转。有时我们想要使用自定义的登录页,或者在前后端分离的开发方式中,前后端的数据交互通过JSON进行,这时登录成功后就不是页面跳转了,而是一段JSON提示。下面通过样例演示如何进行登录表单的个性化配置。六、自定义登录页面、
Stella981 Stella981
2年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
人间小土豆 人间小土豆
2年前
请问日志审计什么意思呢?
这里的“日志”和我们日常生活中的理解大有不同。什么是日志?简单的说,日志就是计算机系统、设备、软件等在某种情况下记录的信息。具体内容取决于日志的来源。例如:unix操作系统会记录用户登录和注销等信息的日志防火墙会记录访问控制协议acl通过和拒绝等消息的日志有些系统在用户登录时或者在系统本身认为会发生一些故障时发出带有告警信息的日志有些产品会在本身存储不足时发
Wesley13 Wesley13
2年前
Java 多用户登录限制的实现方法
Java多用户登录限制的实现方法现在有两种解决方案:1、将用户的登录信息用一个标志位的字段保存起来,每次登录成功就标记1,注销登录就标记为0,当标记为1的时候不允许别人登录。2、将用户的登录信息保存在application内置作用域内,然后利用session监听器监听每一个登录用户的登录情况。很显然,第一种方式每次登录都需要操作数据库,多了一