最近在弄權限相關的東西,用了shiro后發現權限的緩存會存在redis中,分配用戶角色后,並沒有刷新緩存,需要手動修改,在網上看了很多博客后,總算試出來一個好用的,
就是在分配用戶角色后,可以使用這段代碼來清除想要重置的用戶的權限緩存。
/** * 重新賦值權限(在比如:給一個角色臨時添加一個權限,需要調用此方法刷新權限,否則還是沒有剛賦值的權限) * @param myRealm 自定義的realm * @param username 用戶名 */ public static void reloadAuthorizing(MyRealm myRealm,String username){ Subject subject = SecurityUtils.getSubject(); String realmName = subject.getPrincipals().getRealmNames().iterator().next(); //第一個參數為用戶名,第二個參數為realmName,test想要操作權限的用戶 SimplePrincipalCollection principals = new SimplePrincipalCollection(username,realmName); subject.runAs(principals); myRealm.getAuthorizationCache().remove(subject.getPrincipals()); subject.releaseRunAs(); }