shiro认证缓存信息导致:修改用户信息后立刻重新登录仍然能登录问题

问题描述

  • 使用shiro进行权限认证
  • 并且,使用了shiro的缓存管理,ehcache.xml配置如下
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="shiroCache"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">

<!-- 	<diskStore path="java.io.tmpdir" /> -->
	<diskStore path="C:\test" />
	<defaultCache maxElementsInMemory="10000"
		maxElementsOnDisk="0" eternal="true" overflowToDisk="true"
		diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="0"
		diskSpoolBufferSizeMB="50" diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LFU" />
	<!-- 缓存授权信息 -->	
	<cache name="expectauthorizationCache" maxEntriesLocalHeap="5000"
		eternal="false" timeToIdleSeconds="180" timeToLiveSeconds="600"
		overflowToDisk="true" statistics="true">
	</cache>
	<!-- 缓存认证信息 -->	
	<cache name="expectauthenticationCache" maxEntriesLocalHeap="5000"
		eternal="false" timeToIdleSeconds="180" timeToLiveSeconds="600"
		overflowToDisk="true" statistics="true">
	</cache>
	
	<!-- shiro session的缓存 -->
	<cache name="shiroSessionCache" maxEntriesLocalHeap="5000"
		eternal="false" timeToIdleSeconds="60" timeToLiveSeconds="60"
		overflowToDisk="true" statistics="true">
	</cache>

</ehcache>

如上配置,当用户登录后会 通过"缓存认证信息"对其认证进行缓存,只有在缓存时间到期后,缓存才会消失!!

  • 如果在缓存到期之前,再次登录,那么shiro就不会去调用相关的业务认证AuthorizingRealm的实现,如:访问数据库的用户信息(是否是待审核状态等等)
  • 那么,如题"立刻重新登录",此时缓存的认证信息还为过期,也就不会去调用相关的业务认证AuthorizingRealm的实现, 也就是 虽然 用户信息修改了要等待审核,审核通过之后才能登陆,但是,由于缓存的存在,并且缓存并未到期,所以,实际上并不会走这部分业务验证。所以! 可以立刻重新登录(不必等待审核)。
  • 解决 : 在修改用户信息时,手动清除认证的缓存信息,关键代码如下:
java 复制代码
			    @Autowired
			    private EhCacheManager ehCacheManager;

				// 清除认证的缓存信息
				Doctor doctorLogin = (Doctor)SecurityUtils.getSubject().getPrincipal();
				Cache<String, ?> cache = ehCacheManager.getCache("doctorauthenticationCache");
				// 这里remove取的是登录的用户名
				Object obj = cache.remove(doctorLogin.getCellphone());
				return map;
相关推荐
程序猿编码1 小时前
纯 C++ 手写 LLM 推理引擎:分页 KV 缓存、连续批、多卡张量并行全部内置
c++·深度学习·缓存·大模型推理·自动微分·模型推理
code2cat1 小时前
【随笔】RAG检索缓存:复用证据之前,先把权限和版本放进缓存键
java·人工智能·缓存·知识库·rag
牧瀬クリスだ5 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
讯捷蓝达6 小时前
HPE Nimble CS3000存储,断电恢复后,双控缓存异常,存储卷无法正常启动
缓存
Lucis__17 小时前
Redis持久化机制解析
redis·缓存·操作系统·文件·非关系型数据库·1024程序员节
李纲明18 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
码士集团小青21 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
一条泥憨鱼1 天前
【Redis | 黑马点评】附近商铺功能源码解读
数据库·redis·缓存
小南家的青蛙1 天前
Redis的资料
redis·缓存·1024程序员节
深圳市恒星物联科技有限公司1 天前
排水管网监测后期运维成本高吗?成本构成与控制策略分析
运维·缓存