前言
目前博主手上有在写一个权限方面的项目(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!!!
大佬,问个问题,我用你的方法试了,完全没问题,但是实际情况是这样的,这里的不同用户在登陆时候,用的都是同一个浏览器,如果同一个浏览器进行登陆后,后面登陆的用户会把前面登陆的用户的权限给覆盖掉,请问该怎么处理?同一个浏览器下登陆不同的用户,cookie是一样的..
@sunshine 你这个问题就存在一些问题,既然上个用户已经登出,为什么还要在浏览器端保存上个用户的相关身份信息在浏览器端呢?
@憧憬Licoy 几个用户同时在线,同时用同一个浏览器,只是用不同的页签,且没有登出用户,这样会有权限冲突..
@sunshine 第一次见到你这种需求,抱歉没针对这种情况作出开发。
谢谢,用处大大滴
@sunshine
谢谢楼主坑了一个月的问题总算找到a答案了
@sunshine 解决了就好
收藏了,赞赞
@haoessays
请问您文章下面的赞和打赏的是用的插件还是自己写的,以及您网站没有登陆,文章发表吗
@皮皮虾 是使用的张戈博主分享的文章弄得,因属于个人博客,网站没有开放登录。
喜欢这句“没有解决不了的BUG”
@网站建设 哈哈
此文很实用!
@周松松博客 可以的
SpringCloud使用Zuul出现“Forwarding error”错误解决方法
Chatroulette-全世界随机视频聊天网站
IntelliJ IDEA下将JavaWeb打包成war包并发布到tomcat步骤说明
LiRecord留言板系统V2.0正式版发布
SpringBoot打包成war包并放置在tomcat运行
SpringBoot+Shiro整合进行登录验证与权限控制
多风格自适应WordPress主题Puock正式开源!
非大众版WordPress纯代码实现阅读量统计
面包多WordPress插件 – 把你的文章变成付费版
git reset —hard后暂存区代码跑哪儿去了?
选择表情
分享至