問題描述
當更改用戶信息的時候,發現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);
}
}