SpringSecurity(六)注销登录
注销登录
SpringScurity中提供了默认的注销页面,当然我们也可以根据自己的需求对注销登录进行定制。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().logout().logoutUrl("/logout").invalidateHttpSession(true).clearAuthentication(true).logoutSuccessUrl("/login.html").permitAll().and().csrf().disable();}
}
(1)、logout:开启注销登录配置
(2)、logoutUrl:指定了注销登录的请求地址,默认是GET,路径为/logout
(3)、invalidateHttpSession:表示是否使session失效,默认为true
(4)、clearAuthentication:表示是否清楚认证信息,默认为true
(5)、logoutSuccessUrl:表示注销登录之后的跳转地址。
配置完成后,再次启动项目,登录成功之后,在浏览器中输入http://localhost:8080/logout就可以发起注销登录请求了。注销登录成功后,会自动跳转到login.html页面。
如果项目有需要,开发者也可以配置多个注销登录的请求,同时还可以指定请求的方法:
@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/login.html").loginProcessingUrl("/doLogin").successHandler(new MyAuthenticationSuccessHandler()).failureHandler(new MyAuthenticationFailureHandler()).usernameParameter("uname").passwordParameter("passwd").permitAll().and().logout().logoutUrl("/logout")
// .invalidateHttpSession(true).logoutRequestMatcher(new OrRequestMatcher(new AntPathRequestMatcher("/logout1", "GET"),new AntPathRequestMatcher("/logout2", "POST"))).clearAuthentication(true).logoutSuccessUrl("/login.html").and().csrf().disable();}
上面配置表示注销登录路径有两个:
- 第一个是/logout1,请求方法是GET
- 第二个是/logout2,请求方法是POST
使用任意一个请求都可以完成登录注销。
如果是前后的分离的架构,注销登录成功后就不需要页面跳转了,只需要将注销成功的信息返回给前端即可,此时我们额可以自定义返回内容。
@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/login.html").loginProcessingUrl("/doLogin").successHandler(new MyAuthenticationSuccessHandler()).failureHandler(new MyAuthenticationFailureHandler()).usernameParameter("uname").passwordParameter("passwd").permitAll().and().logout().logoutUrl("/logout")
// .invalidateHttpSession(true).logoutRequestMatcher(new OrRequestMatcher(new AntPathRequestMatcher("/logout1", "GET"),new AntPathRequestMatcher("/logout2", "POST"))).logoutSuccessHandler((req,res,aut)->{res.setContentType("application/json;charset=utf-8");HashMap<String,Object> resp = new HashMap<>();resp.put("status",200);resp.put("msg","注销成功!");ObjectMapper om = new ObjectMapper();final String writeValueAsString = om.writeValueAsString(resp);res.getWriter().write(writeValueAsString);}).clearAuthentication(true).and().csrf().disable();}
配置logoutSuccessHandler和logoutSuccessUrl类似前面所介绍的successHandler和defaultSuccessUrl之间的关系,只是类不同而已,这里就不在细说了,有兴趣的朋友可以参考一下前面两篇文章。
配置完成后,启动项目,登录成功后去注销登录,无论是使用/logout1还是/logout2进行注销,只要注销成功,就会返回一段JSON字符串,如果我们希望为不同的注销地址返回不同的结果,可以参考如下:
@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/login.html").loginProcessingUrl("/doLogin").successHandler(new MyAuthenticationSuccessHandler()).failureHandler(new MyAuthenticationFailureHandler()).usernameParameter("uname").passwordParameter("passwd").permitAll().and().logout().logoutUrl("/logout")
// .invalidateHttpSession(true).logoutRequestMatcher(new OrRequestMatcher(new AntPathRequestMatcher("/logout1", "GET"),new AntPathRequestMatcher("/logout2", "POST"))).defaultLogoutSuccessHandlerFor((req,res,auth)->{res.setContentType("application/json;charset=utf-8");HashMap<String,Object> resp = new HashMap<>();resp.put("status",200);resp.put("msg","logout1注销成功!");ObjectMapper om = new ObjectMapper();final String writeValueAsString = om.writeValueAsString(resp);res.getWriter().write(writeValueAsString);},new AntPathRequestMatcher("/logout1","GET")).defaultLogoutSuccessHandlerFor((req,res,auth)->{res.setContentType("application/json;charset=utf-8");HashMap<String,Object> resp = new HashMap<>();resp.put("status",200);resp.put("msg","logout2注销成功!");ObjectMapper om = new ObjectMapper();final String writeValueAsString = om.writeValueAsString(resp);res.getWriter().write(writeValueAsString);},new AntPathRequestMatcher("/logout2","POST")).clearAuthentication(true).logoutSuccessUrl("/login.html").and().csrf().disable();}
通过defaultLogoutSuccessHandlerFor方法可以注册多个不同的注销成功回调函数,该方法第一个参数是注销成功回调,第二个参数是具体的注销请求。当用户注销成功后,使用了哪个注销请求,就会给出对象的相应。
SpringSecurity(六)注销登录相关推荐
- QT开发(六十六)——登录对话框的验证机制
QT开发(六十六)--登录对话框的验证机制 一.验证码机制 为了避免被恶意程序***,程序通常要使用安全机制.验证码机制是提供产生随机验证码,由用户识别填写来判断用户有效性的安全机制. 验证码必须动态 ...
- Springsecurity搭建自定义登录页面
Springsecurity搭建自定义登录页面 1.springSecurity的搭建 新建一个springboot的web项目,我这边只选中了web,建立后如下: image.png pom依赖: ...
- 用户登录色一句java_SpringBoot中用SpringSecurity实现用户登录并返回其拥有哪些角色...
注:在使用springsecurity之前我们用普通的登录方式 - _1 v2 C4 a8 h, m8 h6 q2 q+ l: [1.前端发来登录请求会带上username,password: M) ...
- Linux自动注销登录的帐户
曾经碰到一个事情,一个好朋友用我的机器登录到服务器,然后忘记退出了,我呢不知情,所以在下班的时候,直接在命令行就poweroff了,于是乎,服务器就被poweroff掉了..今天在网上发现有解决方法, ...
- linux注销登录用户
linux注销登录用户 然后删除该用户 如下: 进入根用户 su 或者 su - root 查看当前在线用户 w 或者 who -a USER TTY FROM ...
- logout 注销登录
logout就是退出呢登录的shell,即注销登录的意思,命令行直接输入logout,登录就会被注销,回到了登录页面,其语法格式如下: [root@Centos8 ~]# logout logout与 ...
- 厉害,我带的实习生仅用四步就整合好SpringSecurity+JWT实现登录认证
小二是新来的实习生,作为技术 leader,我还是很负责任的,有什么锅都想甩给他,啊,不,一不小心怎么把心里话全说出来了呢?重来! 小二是新来的实习生,作为技术 leader,我还是很负责任的,有什么 ...
- oauth2.0 注销登录再次访问authorize授权接口会跳过登录页面问题解决
[重要提示,该种做法纯属技术理解和技术探索,禁止用于生产环境!因为违背了oauth2.0自动认证的宗旨!会导致无法自动登录问题] [禁止用于生产环境] [禁止用于生产环境] [禁止用于生产环境] [禁 ...
- SpringSecurity的简单概述以及配置SpringSecurity的默认登录页面
SpringSecurity的简单概述 是什么:SpringSecurity融合Spring技术栈,提供JavaEE应 用的整体安全解决方案:提供全面的安全服务 有什么用:可以进行身份验证,就是证明你 ...
最新文章
- 云栖小镇不是“镇”,就像中关村不是“村”。小镇是一个符号,就像起建于50年前的硅谷的“谷”,和100年前爱迪生所在的门洛公园。...
- docker删除image失败,conflict
- 【SpringCloud】Feigin-实例
- OpenCV下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码
- 文档型数据库设计模式-如何存储树形数据
- 云给数据中心带来了什么特性?
- ADO Execute 方法
- git 拉代码_一篇文章理清Git
- 后台getshell常用技巧总结
- html 查找添加联系人,使用phonegap查找联系人的实现方法
- LeetCode 61旋转链表-中等
- iOS Emoji表情编码/解码
- nginx apache 服务器配置
- 手机锁屏js倒计时停止问题解决办法探索
- 浅入MFC之对话框及MFC程序的运行
- 【老孙随笔】想学程序设计,先学人生设计!
- call、aplay 和 bind 三者之间的区别?
- Linux命令行配置网络(有线网络,无线网络)// Debian
- linux下iso镜像的制作工具,ISO镜像文件制作转换工具(AnyToISO)
- mybatis sql语句格式化 trim prefix suffix