springboot shiro 更新用户AuthorizationInfo的问题

shiroFilter过滤链的刷新已经做好了
但是还需要在线修改用户的授权信息才能做到不下线不重启,
也就是修改用户在doGetAuthorization函数中的授权信息


我试过在更新系统 shiro过滤链调用ShiroUtil.getSubjct().isPermitted("");来重新出发realm的授权,
但是没有效果,用户的授权信息没有变化

请问用什么方法可以在不关闭程序、不登出用户的情况下在动态改变线上用户包含的授权信息呢?

补一个问题,怎么获取在线用户的授权信息?
可能是再次调用授权时没有改变用户的授权信息,也就是白白调用了doGetAuthorization()

:neutral_face: 不会shiro。

  • 简单处理,更新之后直接踢出,重新登陆即可。
  • 如果非是要更新参考地址

核心,更新缓存

this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
2 Likes

能有不登出的做法吗??

  • 参考上面回复,在自己的AuthorizingRealm类中调用
     this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
}

更新权限调用这个方法完事

2 Likes

各位!!!
解决了,在线的修改用户Realm的授权信息
在更新shiro系统后台的过滤链后增加一条:
ShiroUtil.getSubjct().isPermitted(“123”);
image
这条代码能触发用户Realm的doGetAuthorizationInfo,重新授权

之前我用着不行其实是我的shiro过滤链有问题,新加的鉴权地址被排在了/**==perms[233]后面,所以导致了用户一直鉴权失败
在这里我要感谢下我现在在学习的这个项目的大佬,我提出bug后他研究了下发现了问题所在


红圈是原来清空shiro过滤链的代码
绿圈是加上的代码,绿圈的部分才能真正清空每个filter中的过滤链!
@Jonny @ojbk