zhangkaitao / shiro-example

跟我学Shiro(我的公众号:kaitao-1234567,我的新书:《亿级流量网站架构核心技术》)
4.82k stars 3.94k forks source link

关于clearCachedAuthorizationInfo #4

Closed chinesejie closed 10 years ago

chinesejie commented 10 years ago

很感谢你写了这么一篇教程,让入门者得益。我遇到这么一个问题,项目用了ehcache,作为管理员打算删除用户A的权限,这时候修改了数据库用户A的之后,需要删除用户A的AuthorizationInfo cache。但是管理员拿不到用户A的principal,我暂时用了这招来删除。 public class ShiroDbRealm extends AuthorizingRealm { public void clearSomeoneCachedAuthorizationInfo(String username) { //用户名肯定是唯一的 Cache<Object, AuthorizationInfo> cache = getAuthorizationCache();

    Object k = null;
    if (cache != null) {
        for (Object key : cache.keys()) {
            if (key.toString().equals(username)) {
                k = key;
                break;
            }
        }
        cache.remove(k);
    }
}

} 但是我觉得这种遍历的方法很差劲,其次也没有考虑到对cache加锁。你有更好的建议吗?或者shiro已经内置了更好的api可以处理这种需求。 望告知,谢谢

zhangkaitao commented 10 years ago

我记得后边有例子讲这个 你看下