先上代码块:
/** * 清空用户关联权限认证,待下次使用时重新加载 */ 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、将假定身份恢复为之前登录用户;