前言
目前博主手上有在写一个权限方面的项目(watchdog-framework),项目基于Shiro进行了权限验证,不过开启了Cache之后,不同的用户登录之后其权限都和第一个登录者缓存的权限一样,这样肯定是行不通的,无法达到权限的期望效果,于是就开启了一番探索之旅。
正文
首先第一个想到的就是缓存的原因,因为我使用了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);
后记
在遇到问题只有通过不断的分析调试,才可以找到最终的问题的所在之处,愿世上没有解决不了的BUG!!!