问题描述
当更改用户信息的时候,发现subject
却还是原来的信息,
解决
没有直接的办法更改,只能给当前用户切换身份,切换一个认证信息给安全管理器。
当更改用户信息后,调用setUser
方法,UserInfo
是原来放在SimpleAuthenticationInfo
中的对象,realName
是原来realm
的名字。
public class ShiroUtils {
public static Subject getSubjct(){
return SecurityUtils.getSubject();
}
public static UserInfo getUser(){
return (UserInfo) getSubjct().getPrincipal();
}
/**
* 切换身份,登录后,动态更改subject的用户属性
* @param userInfo
*/
public static void setUser(UserInfo userInfo) {
Subject subject = SecurityUtils.getSubject();
PrincipalCollection principalCollection = subject.getPrincipals();
String realmName = principalCollection.getRealmNames().iterator().next();
PrincipalCollection newPrincipalCollection =
new SimplePrincipalCollection(userInfo, realmName);
subject.runAs(newPrincipalCollection);
}
}