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

前言

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

正文

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

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

后记

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

    A+
所属分类:Java

发表评论

请在下方填写评论信息

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

表情 粗体 斜体 图片 引用 链接 删除线 下划线 插代码 签到

目前评论:16   其中:访客  8   博主  8

  1. avatar sunshine 1  来自天朝的朋友 火狐浏览器 Windows 10 浙江省杭州市 电信VDSL

    大佬,问个问题,我用你的方法试了,完全没问题,但是实际情况是这样的,这里的不同用户在登陆时候,用的都是同一个浏览器,如果同一个浏览器进行登陆后,后面登陆的用户会把前面登陆的用户的权限给覆盖掉,请问该怎么处理?同一个浏览器下登陆不同的用户,cookie是一样的..

    • avatar 憧憬Licoy 博主  来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市成华区 电信

      @sunshine 你这个问题就存在一些问题,既然上个用户已经登出,为什么还要在浏览器端保存上个用户的相关身份信息在浏览器端呢?

      • avatar sunshine 1  来自天朝的朋友 火狐浏览器 Windows 10 浙江省杭州市 电信VDSL

        @憧憬Licoy 几个用户同时在线,同时用同一个浏览器,只是用不同的页签,且没有登出用户,这样会有权限冲突..

        • avatar 憧憬Licoy 博主  来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市成华区 电信

          @sunshine 第一次见到你这种需求,抱歉没针对这种情况作出开发。

  2. avatar sunshine 1  来自天朝的朋友 火狐浏览器 Windows 10 浙江省杭州市 电信VDSL

    谢谢,用处大大滴

  3. avatar sunshine 1  来自天朝的朋友 火狐浏览器 Windows 10 浙江省杭州市 电信VDSL

    谢谢楼主坑了一个月的问题总算找到a答案了

  4. avatar haoessays 1  Romania 火狐浏览器 Windows 10 罗马尼亚

    收藏了,赞赞

  5. avatar 皮皮虾 1  来自天朝的朋友 Safari浏览器 iPhone iPhone OS 11_3 like Mac OS X) AppleWebKit 山东省 联通

    请问您文章下面的赞和打赏的是用的插件还是自己写的,以及您网站没有登陆,文章发表吗

    • avatar 憧憬Licoy 博主  来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市成华区 电信

      @皮皮虾 是使用的张戈博主分享的文章弄得,因属于个人博客,网站没有开放登录。

  6. avatar 网站建设 4  来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信

    喜欢这句“没有解决不了的BUG”

  7. avatar 周松松博客 0  来自天朝的朋友 谷歌浏览器  Android 5.1 OPPO A59m Build/LMY47I 湖北省十堰市丹江口市郧阳师专 电信

    此文很实用!