Spring boot后台搭建二集成Shiro添加Remember Me
上一片文章实现了用户验证 查看
当用户成功登录后,关闭浏览器,重新打开浏览器访问http://localhost:8080,页面会跳转到登录页,因为浏览器的关闭后之前的登录已失效
Shiro提供了Remember Me的功能,用户的登录状态不会因为浏览器的关闭而失效,直到Cookie过期
1.修改ShiroConfig
(1)添加
/*** cookie对象* @return*/public SimpleCookie rememberMeCookie() {// 设置cookie名称,对应login.html页面的<input type="checkbox" name="rememberMe"/>SimpleCookie cookie = new SimpleCookie("rememberMe");// 设置cookie的过期时间,单位为秒,这里为一天cookie.setMaxAge(86400);return cookie;}/*** cookie管理对象* @return*/public CookieRememberMeManager rememberMeManager() {CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();cookieRememberMeManager.setCookie(rememberMeCookie());// rememberMe cookie加密的密钥cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));return cookieRememberMeManager;}
(2)将cookie管理对象设置到SecurityManager
修改securityManager()为
@Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(myShiroRealm());securityManager.setRememberMeManager(rememberMeManager());//新加return securityManager;}
(3)改权限配置
将ShiroFilterFactoryBean的
filterChainDefinitionMap.put("/**", "authc")
修改为
filterChainDefinitionMap.put("/**", "user");
说明:
user
指的是用户认证通过或者配置了Remember Me记住用户登录状态后可访问
2.修改login.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" th:href="@{/css/login.css}" type="text/css"><link rel="stylesheet" th:href="@{css/iCheck/minimal/blue.css}" type="text/css"><link rel="stylesheet" th:href="@{css/app.css}" type="text/css"><script th:src="@{/js/jquery.min.js}"></script> </head> <body> <div class="login-page"><!-- Form--><div class="form"><div class="form-toggle"></div><div class="form-panel one"><div class="form-header"><h1>账户登录</h1></div><div class="form-content"><div class="form-group"><label>用户名</label><input type="text" name="account" /></div><div class="form-group"><label>密码</label><input type="password" name="password" /></div><div class="form-group" style="margin: 0px;"><p><input type="checkbox" name="rememberMe" /> 记住我</p></div><div class="form-group"><button onclick="login()" id="loginButton">登录</button></div></div></div></div></div> </body> <script th:inline="javascript">var ctx = [[@{/}]];function login() {var account = $("input[name='account']").val();var password = $("input[name='password']").val();var rememberMe = $("input[name='rememberMe']").is(':checked');$.ajax({type: "post",url: ctx + "login",data: {"account": account,"password": password,"rememberMe": rememberMe},dataType: "json",success: function (r) {if (r.code == 0) {location.href = ctx + 'index';} else {alert(r.msg);}}});} </script> </html>
View Code
3.修改LoginController
@PostMapping("/login")@ResponseBodypublic ResponseBo login(String account, String password, Boolean rememberMe) {System.out.println(rememberMe);// 密码MD5加密password = MD5Utils.encrypt(account, password);System.out.println(password);UsernamePasswordToken token = new UsernamePasswordToken(account, password);rememberMe = rememberMe == null ? false : rememberMe; //null=>false token.setRememberMe(rememberMe);//UsernamePasswordToken token = new UsernamePasswordToken(username, password,rememberMe);// 获取Subject对象Subject subject = SecurityUtils.getSubject();try {subject.login(token);if (rememberMe) System.out.println("rememberMe--------");return ResponseBo.ok();} catch (UnknownAccountException e) {return ResponseBo.error(e.getMessage());} catch (IncorrectCredentialsException e) {return ResponseBo.error(e.getMessage());} catch (LockedAccountException e) {return ResponseBo.error(e.getMessage());} catch (AuthenticationException e) {return ResponseBo.error("认证失败!");}}
View Code
rememberMe选中的时候,Shiro就会帮忙记住用户的登录状态
说明:
如果遇到下面错误
2019-06-24 15:37:49.620 WARN 12952 --- [nio-8088-exec-2] o.a.shiro.mgt.DefaultSecurityManager : Delegate RememberMeManager instance of type [org.apache.shiro.web.mgt.CookieRememberMeManager] threw an exception during onSuccessfulLogin. RememberMe services will not be performed for account [com.sfn.bms.system.model.User@86fc436].
org.apache.shiro.io.SerializationException: Unable to serialize object [com.sfn.bms.system.model.User@86fc436]. In order for the DefaultSerializer to serialize this object, the [org.apache.shiro.subject.SimplePrincipalCollection] class must implement java.io.Serializable.
解决方法查看
转载于:https://www.cnblogs.com/baby123/p/11074662.html
Spring boot后台搭建二集成Shiro添加Remember Me相关推荐
- 从服务器基础环境配置到搭建Docker+Gitlab+Gitlab Runner,完整介绍Spring Boot项目的持续集成与持续交付具体实现!
1. 序言 在大学的课程学习,非常注重团队协作的培养,在企业开发中,团队协作开发项目的场景更是甚多.另外,在当下的热门技术栈中,微服务开发模式.前后端分离开发模式逐渐盛行,Spring Boot.VU ...
- Spring Boot(十二)集成spring-boot-starter-mail发送邮件
项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发 ...
- 【Spring Boot】使用Spring Boot来搭建Java web项目以及开发过程
[Spring Boot]使用Spring Boot来搭建Java web项目以及开发过程 一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 ...
- Spring Boot 模板引擎FreeMarker集成
Spring Boot 模板引擎FreeMarker集成 一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代 ...
- Spring Boot Admin在线查看spring boot后台日志
当前,应用系统微服务架构.前后端分离(前端vue,后端springboot),已经成为大部分项目的标准技术架构,但在项目上线后,spring boot后端服务部署在服务器上,大部分公司对服务器都有安全 ...
- Spring Boot框架搭建
目录 一.Spring Boot概述 二.Spring Boot的优点 三.Spring Boot框架搭建 一.Spring Boot概述 Spring Boot 是 Spring 框架的一个新的子项 ...
- Spring Boot 内置Tomcat——集成PHP解决方案
Demo:https://gitee.com/shentuzhigang/mini-project/tree/master/springboot-embed-tomcat-php-demo 问题分析 ...
- Spring Boot:(二)启动原理解析
Spring Boot:(二)启动原理解析 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏. ...
- Spring Boot 1.5.8集成Swagger2 + YApi —— Swagger常用注解说明
前言 受新型冠状病毒的影响,在家像猪一样不是睡就是吃,闲着就学着用下Swagger和YApi,特将这几天的学习成果写成了这系列的文章,希望能对大家有所帮助.武汉加油,中国加油! Spring Boot ...
最新文章
- mysql 5.7 收费_MySQL5.7 常用用户操作
- NLP研究方向的「情感分析领域」的简单调研
- python能开发什么产品_三周学 Python ?不,三周做个产品
- 转:SQL SERVER中一些常见性能问题的总结
- Vue.js - Day2
- idea中java文件红色处理
- Python Cheat Sheet 中文版
- 广州橙优设计:学习UI需要那些?UI设计必须会的软件
- Docker引擎客户端工具docker的总结
- MDK5软件入门之——基础工程创建及下载和调试
- C#_根据银行卡卡号判断银行名称
- Android之APP跳转到权限设置界面适配华为、小米、vivo等
- 西班牙首相被中国新零售圈粉!天猫总裁靖捷透露了一个“合伙人计划”
- Windows下通过注册表修改某个类型文件的默认打开方式和文件图标
- 2018 ICPC 焦作区域赛 Resistors in Parallel(找规律+大数)
- mosquitto使用的基本流程以及一些遇见的问题
- 基于Java的XML编辑器:Oxygen XML Editor Mac中文版
- 想要出国读博作博后的看过来:德国马普育种所植物与微生物互作方向招收3名博士1名博后
- 丁苯嵌段共聚物的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 简简单单做一个带过期时间的内存缓存
热门文章
- 计生委称老龄化是社会进步表现 暂不放开二胎--如此之文章一定要转载,等待鞭尸...
- 如何用微博推广淘宝店铺
- 基于 Nios II 的串口打印和流水灯设计【使用 Quartus 软件】【掌握 SOPC 开发流程】
- 超简单的页面(图片、文字、布局。。。)等比缩放
- Kafka+Scram认证+eagle管理
- Apache Kafka API AdminClient Scram账户的创建与删除
- foxmail发生RCPT错误
- 彻底解决Eclipse自动补全变量名问题的方法步骤
- 在window上提交spark代码到远程测试环境上运行
- 并发编程之CPU缓存架构缓存一致性协议详解(二)