当更改用户信息的时候,发现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);
}
}