由于我开启使用了shiro的缓存,目前使用的是redis缓存。如果修改了用户的权限或者修改了权限的配置,但是由于有缓存,在缓存失效前shiro不会重新加载用户新的权限,这就导致了修改无法立即生效。查看了网上的解决方案有如下几种:
1、在自定义的AuthorizingRealm中调用this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
这个方案可以解决删除操作者权限缓存的问题,但是无法清除其他人的权限缓存
2、重载过滤链 ,重新设置 ShiroFilterFactoryBean的FilterChains。比如:https://lee1177.iteye.com/blog/2155952。结果是然并卵。
3、在自定义的AuthorizingRealm的doGetAuthenticationInfo方法后调用this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
这样每次登陆就会删除缓存,从而会调用doGetAuthorizationInfo加载最新的权限。这样就可以在每次修改了权限之后通过重新登录来实现权限的刷新。
解决shiro修改权限后无法立刻生效
最新推荐文章于 2023-12-13 17:52:34 发布