Shiro开启Cache后无法进行不同用户的realm信息缓存

195 阅读1分钟
原文链接: www.licoy.cn

前言

目前博主手上有在写一个权限方面的项目(watchdog-framework),项目基于Shiro进行了权限验证,不过开启了Cache之后,不同的用户登录之后其权限都和第一个登录者缓存的权限一样,这样肯定是行不通的,无法达到权限的期望效果,于是就开启了一番探索之旅。
Shiro开启Cache后无法进行不同用户的realm信息缓存

正文

首先第一个想到的就是缓存的原因,因为我使用了Redis缓存,所以直接在管理工具里面查看,发现不管登录多少个用户,用户realm信息缓存都只是会缓存一条,在ShiroConfig中每个Bean都检查了一遍,也没有找到原因,最终把问题源头锁定在自定义的MyRealm中,然后在重写的doGetAuthenticationInfo方法中打了断点,发现在执行后返回的SimpleAuthenticationInfo对象中的第三个参数的值,即为realmName,其值和redis里面缓存的唯一一条realm的名称一样,看到这里貌似找到了问题的真正所在之处,于是就将返回语句中的realmName参数值变成如下的格式:

String name = Encrypt.md5(user.getId()+user.getUsername());
return new SimpleAuthenticationInfo(user,user.getPassword(),name);

然后再执行一次登录操作,果然达到期望的目标了:
Shiro开启Cache后无法进行不同用户的realm信息缓存

后记

在遇到问题只有通过不断的分析调试,才可以找到最终的问题的所在之处,愿世上没有解决不了的BUG!!!