老规矩先上代码(干货)
/**
* 清空用户关联权限认证,待下次使用时重新加载
*/
public void clearCachedAuthorizationInfo(Principal principal) {
Subject subject = SecurityUtils.getSubject();
// String realmName = subject.getPrincipals().getRealmNames().iterator().next();
SimplePrincipalCollection principals = new SimplePrincipalCollection(principal,getName());
subject.runAs(principals);
clearCachedAuthorizationInfo(subject.getPrincipals());
subject.releaseRunAs();
}
解决思路,利用shiro清空当前用户权限的方法,将当前用户进行设置假身份为目标用户,也就是需要修改的用户,subject.runAs(principals); 然后进行clearCachedAuthorizationInfo权限清空,清空后再恢复原身份,subject.releaseRunAs();
1、获取当前用户subject(shiro登录对象)
2、生成目标用户自定义信息SimplePrincipalCollection
3、将当前用户设置为目标用户(假定身份)
4、进行权限清空操作
5、将假定身份恢复为之前登录用户;