shiro用户权限始终是登录的第一个用户的权限?

小白一枚,在使用springboot+shiro的时候,发现一个问题,使用注解来判断
用户是否具有该权限时,

@RequiresRoles(value = {"admin"},logical = Logical.AND)

退出当前用户后

 Subject subject = SecurityUtils.getSubject();
 subject.logout();

shiro始终使用的是第一个登录用户的权限角色信息,
也就是说如果我第一次登录admin用户后,访问带有权限验证的注解时,shiro会去调用方法如下

AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)

我在这里去构建了该用户的权限,我了解shiro会缓存用户的认证和授权,但是用户退出后,shiro依然缓存上一个用户的权限。

因为没太明白shiro对授权这一块是否有缓存,或者说缓存机制是怎么样的,所以这个问题一直没解决。

1个回答

你的意思是指 你用具有admin权限的用户登录并访问该接口 , 可以正常访问 , 但是登出了之后 , 使用不具有admin权限的用户登录进来依旧可以访问该接口 ?

php_sir
php_sir 楼主有答案了吗,我也有同样的问题
7 个月之前 回复
qq_38167579
农夫丶果园 你可以再写一个test接口 , 打印一下subject , 看他里边的principal , 以及roles , 看看你切换用户之后这些信息的改变情况
一年多之前 回复
qq_32550077
风摇曳着叶子 回复农夫丶果园: doGetAuthorizationInfo 只在访问类似@RequiresRoles的注解,或者subject.hasRole()才会进入,对吧,第一个用户访问这些需要鉴权的接口时候,会进入doGetAuthorizationInfo 方法,但是下一个用户就不会进入该方法了,问题应该是出在缓存上,但是我并不明白shiro的权限缓存
一年多之前 回复
qq_38167579
农夫丶果园 建议你debug一下 doGetAuthorizationInfo 这个方法 , 看看每次鉴权的结果是否都添加了admin权限
一年多之前 回复
qq_32550077
风摇曳着叶子 对的,而且总是第一个,我清除了浏览器的cookie之后,这样第一个登录的又会对后面的所有登录者造成影响
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐