一般来讲,记住密码的基本处理,就是把用户的一些基本信息(密码)存入浏览器的Cookie,下次登录的时候优先验证Cookie,后端做处理;以此来实现记住密码的功能!使用shiro自带的RememberMe功能,使用起来比较简单,只需简单的配置。

需注意一点的是,网站如果对安全性要求比较高的,一般都不建议有记住密码的功能! 因为Cookie是保存在本机电脑浏览器里,不排除其他用户能使用此电脑,拷走Cookie,导入其他电脑继续使用您的账号登录!


shiro实现了身份验证和权限验证。但是,如果我们登录之后多次访问http://localhost:8080/userInfo/userDel的话,会发现权限验证会每次都执行一次。这是有问题的,因为像用户的权限这些我们提供给shiro一次就够了。

下面,我们开始给shiro添加缓存支持:

1.添加依赖

        <!-- shiro ehcache --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-ehcache</artifactId><version>1.2.2</version></dependency><!--包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)。--><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency>

2.注入缓存

com.example.demo.config.Shiro.ShiroConfiguration中添加以下方法。

    @Beanpublic EhCacheManager ehCacheManager() {System.out.println("ShiroConfiguration.getEhCacheManager()");EhCacheManager ehCacheManager = new EhCacheManager();ehCacheManager.setCacheManagerConfigFile("classpath:config/ehcache-shiro.xml");return ehCacheManager;}

将缓存对象注入到SecurityManager中:

    @Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(myShiroRealm());securityManager.setCacheManager(ehCacheManager()); //注入缓存对象。return securityManager;}

3.添加配置文件

在src/main/resouces/config中添加ehcache-shiro.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="es"><diskStore path="java.io.tmpdir"/><!--name:缓存名称。maxElementsInMemory:缓存最大数目maxElementsOnDisk:硬盘最大缓存个数。eternal:对象是否永久有效,一但设置了,timeout将不起作用。overflowToDisk:是否保存到磁盘,当系统当机时timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。clearOnFlush:内存数量最大时是否清除。memoryStoreEvictionPolicy:Ehcache的三种清空策略;FIFO,first in first out,这个是大家最熟的,先进先出。LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。--><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="false"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"/><!-- 登录记录缓存锁定10分钟 --><cache name="passwordRetryCache"maxEntriesLocalHeap="2000"eternal="false"timeToIdleSeconds="3600"timeToLiveSeconds="0"overflowToDisk="false"statistics="true"></cache></ehcache>

启动项目,再多次访问http://localhost:8080/userInfo/userDel,这时候只会在后台打印一次配置权限的信息了,说明shiro缓存起了作用。

---------------------下面我们开始配置记住密码-----------

1.在com.example.demo.config.Shiro.ShiroConfiguration中加入下面两个方法:

    //cookie对象;@Beanpublic SimpleCookie rememberMeCookie() {System.out.println("ShiroConfiguration.rememberMeCookie()");//这个参数是cookie的名称,对应前端的checkbox的name = rememberMeSimpleCookie simpleCookie = new SimpleCookie("rememberMe");//<!-- 记住我cookie生效时间30天 ,单位秒;-->simpleCookie.setMaxAge(259200);return simpleCookie;}//cookie管理对象;@Beanpublic CookieRememberMeManager cookieRememberMeManager() {System.out.println("ShiroConfiguration.rememberMeManager()");CookieRememberMeManager manager = new CookieRememberMeManager();manager.setCookie(rememberMeCookie());return manager;}

将rememberMeManager注入到SecurityManager中

@Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(myShiroRealm());securityManager.setCacheManager(ehCacheManager());securityManager.setRememberMeManager(cookieRememberMeManager()); //注入rememberMeManager;return securityManager;}

ShiroFilterFactoryBean中添加记住我过滤器user,添加user过滤器的资源在记住我或认证之后就可以直接访问了。

Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
...filterChainDefinitionMap.put("/index", "user");filterChainDefinitionMap.put("/", "user");
....

最后,在login.html页面添加记住我单选框

<P><input type="checkbox" name="rememberMe" />记住我</P>

启动项目,正常登录后关闭浏览器,再打开浏览器输入http://localhost:8080/index,这时候就可以直接访问index页面,不需要再登录了。

SpringBoot + Shiro 缓存记住密码相关推荐

  1. SpringBoot Shiro 配置自定义密码加密器

    SpringBoot Shiro 配置自定义密码加密器 自定义认证加密方式 /*** 自定义认证加密方式*/ public static class CustomCredentialsMatcher ...

  2. java shiro 访问频率_java shiro配置记住密码功能 RememberMe

    一般来讲,记住密码的基本处理,就是把用户的一些基本信息(密码)存入浏览器的Cookie,下次登录的时候优先验证Cookie,后端做处理:以此来实现记住密码的功能!使用shiro自带的RememberM ...

  3. SpringBoot+Shiro实现MD5密码加密认证

    一.数据库实体类 数据库实体类要包括用户ID.密码.盐值以及账户状态. username password salt status 二.自定义Realm /*** Shiro自定义Realm*/ pu ...

  4. springboot + shiro之登录人数限制、登录判断重定向、session时间设置

    springboot + shiro之登录人数控制 项目 前篇:spring boot + mybatis + layui + shiro后台权限管理系统:https://blog.51cto.com ...

  5. springboot+shiro前后端分离过程中跨域问题、sessionId问题、302鉴权失败问题

    写在前面:2020年2月29号修改该文章,之前针对302鉴权失败问题的解决方案存在 "WebUtils.toHttp 往返回response写返回值的时候出现回写跨域问题".现已进 ...

  6. 使用shiro进行登录密码安全验证

    使用shiro进行登录密码安全验证 使用框架版本 SpringBoot 1.5.3.RELEASE shiro-spring 1.2.5 shiro-ehcache 1.2.5 Shiro配置 Shi ...

  7. SpringBoot+Shiro学习(一):主要模块介绍

    这篇文章是我最近对SpringBoot+Shiro+mybatis+redis一个练手项目的记录. 我是按照慕课网的一篇课程+百度进行练手的 慕课课程 练手项目Github地址 跟着开涛学Shiro ...

  8. springboot + shiro的配置

    第一次写博客好紧张,为了使自己使用过的技术不被忘记,在此将一些配置方法记下来,方便自己复习 呵呵 今天写的是springboot+shiro的配置 首先需要在application.yml的配置文件中 ...

  9. springboot+shiro+jwt实现登录+权限验证

    目录 一.简介: JWT优点: JWT缺点: shiro: JWT: 1.JWT头 2.有效载荷 3.签名哈希 4.Base64URL算法 二.实现 1.引入maven依赖 2.编写shiro配置类 ...

最新文章

  1. leetcode-21 合并两个有序链表
  2. JAVA基础13-Java抽象方法、抽象类、抽象之模板方法模式
  3. Docker-compose 安装配置 Nginx PHP MySQL Laravel
  4. C#是面向对象编程语言
  5. mysql死锁无法查询_MySQL死锁导致无法查询
  6. 服务器与HTML客户端通信,服务器与HTML客户端通信
  7. 一款基于jquery和css3实现的摩天轮式分享按钮
  8. shader变体是什么_shader 里面的分支
  9. BUG没确认就重启机器,大哥你凭什么说有这样的BUG
  10. java简单的小程序_编写一个简单的入门java小程序
  11. 清华大学python教材怎么样_经典!清华大学计算机系教材曝光:《Python编程金典》...
  12. Compose 实现页面侧滑返回
  13. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。
  14. 基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪
  15. 成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题
  16. 3.Vue.js 实战 调查问卷WebApp项目
  17. Docker-centos安装docker及docker命令
  18. 人鱼之伤的怪物原型=克苏鲁的deep one
  19. Android手机:破解锁屏密码
  20. 免费空间提供永久免费个人网站空间申请

热门文章

  1. android so abi适配,Android NDK学习(六): so文件兼容之abiFilters的使用
  2. kailinux mysql提权_linux下mysql提权
  3. android光照传感器,详解 android 光线传感器 light sensor的使用
  4. 错误:使用printf()打印Hello world时未声明'Hello'/ Text
  5. ThreadLocal中的3个大坑,内存泄露都是小儿科!
  6. Spring IoC?看这篇文章就够了...
  7. 二维码的生成(可设置大小)以及插件下载地址
  8. Oracle中insert into select和select into的区别
  9. Pytorch 版YOLOV5训练自己的数据集
  10. 关于C语言中的Bool类型变量的一点看法