Shiro更改用戶信息同時更改subject中的信息

閱讀目錄

問題描述

當更改用戶信息的時候,發現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);
    }
 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章