用shiro做权限控制的时候,变更用户或者角色的权限后刷新界面不会重新加载权限,需要重启tomcat或者用户重新登录,特别的不人性化,通过下面的方式可以解决这个问题,但仅仅针对于单机,对集群来说就不太清楚,以后有了更好的方法再去使用(菜鸟级别,还需要学习很多):
代码使用:
工具类中:
/**
*
* @Title: clearAuth
* @Description: TODO 清空所有资源权限
* @return void 返回类型
*/
public static void clearAuth(){
RealmSecurityManager rsm = (RealmSecurityManager)SecurityUtils.getSecurityManager();
ShiroDbRealm realm = (ShiroDbRealm)rsm.getRealms().iterator().next();
realm.clearAuthz();
}
自定义AuthorizingRealm中:
public void clearAuthz(){
this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
}
在进行权限修改完成之后,进行去权限的清空
效果:
授权改变前
授权改变刷新后:
当你把权限清空之后,刷新界面,shiro会自动重新加载自定义realm中的doGetAuthorizationInfo()方法进行角色和权限的验证,这样可以达到预期的结果了