在使用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);
}