1. 程式人生 > >shiro 動態修改資源許可權不需要重啟專案或者重新登入使用者

shiro 動態修改資源許可權不需要重啟專案或者重新登入使用者

用shiro做許可權控制的時候,變更使用者或者角色的許可權後重新整理介面不會重新載入許可權,需要重啟tomcat或者使用者重新登入,特別的不人性化,通過下面的方式可以解決這個問題,但僅僅針對於單機,對叢集來說就不太清楚,以後有了更好的方法再去使用(菜鳥級別,還需要學習很多):

程式碼使用:

工具類中:

	/**
	 * 
	* @Title: clearAuth 
	* @Description: TODO 清空所有資源許可權  
	* @return void    返回型別
	 */
	public static void clearAuth(){
		RealmSecurityManager rsm = (RealmSecurityManager)SecurityUtils.getSecurityManager();
		ShiroDbRealm realm = (ShiroDbRealm)rsm.getRealms().iterator().next();
		realm.clearAuthz();
	}


自定義AuthorizingRealm中:
public void clearAuthz(){
		this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
	}

在進行許可權修改完成之後,進行去許可權的清空

效果:

授權改變前



授權改變重新整理後:


當你把許可權清空之後,重新整理介面,shiro會自動重新載入自定義realm中的doGetAuthorizationInfo()方法進行角色和許可權的驗證,這樣可以達到預期的結果了