Shiro删除指定用户得身份和权限

943 阅读1分钟

在使用shiro缓存用户信息和权限的时候,我的想法是修改用户的权限,不需要用户退出重新登录更新用户的权限,后台在修改权限后就直接删除权限缓存。

我在网上看了很多博客,大都千篇一律:

public static void reloadAuthorizing(ShiroRealm shiroRealm, String username){
        Subject subject = SecurityUtils.getSubject();
        String realmName = subject.getPrincipals().getRealmNames().iterator().next();
        //第一个参数为用户名,第二个参数为realmName
        SimplePrincipalCollection principals = new SimplePrincipalCollection(username,realmName);
        subject.runAs(principals);
        shiroRealm.getAuthorizationCache().remove(subject.getPrincipals());
        subject.releaseRunAs();
    }

我本地实际使用是不行了,我换了个思路,因为它的数据是存储在redis的,那我直接操作redis不就行了,可以在reids中看到生成的key

/**
*demoAuthCache是我自己设置的,网上看一下就知道怎么设置
*123,是我的用户名,shiro存储默认是用户的id
*可以在redisCacheManager.setPrincipalIdFieldName("tel");自己设置*/
shiro:cache:demoAuthCache:123

然后就是redis的操作了(看自己redis的封装吧,主要的就是删除这个key

shiro:cache:demoAuthCache:123

public static void clearPowerInfo(String username){    
    RedisUtil redis = ApplicationContextUtils.popBean(RedisUtil.class);    
    redis.del("shiro:cache:" + POWER_REALM_CACHE + ":" + username);
}