在Shiro授权时我们开启了缓存,导致更改用户权限无法生效,必须要清除缓存才能生效。Shiro他去查询你当前是否开始缓存和缓存中是否有改Subject的principals。
Shiro查询授权的源码:
protected AuthorizationInfo getAuthorizationInfo(PrincipalCollection principals) {
if (principals == null) {
return null;
}
AuthorizationInfo info = null;
if (log.isTraceEnabled()) {
log.trace("Retrieving AuthorizationInfo for principals [" + principals + "]");
}
//通过CacheManager获取Cache
Cache<Object, AuthorizationInfo> cache = getAvailableAuthorizationCache();
//判断缓存中是否有数据
if (cache != null) {
if (log.isTraceEnabled()) {
log.trace("Attempting to retrieve the AuthorizationInfo from cache.");
}
Object key = getAuthorizationCacheKey(principals);
//根据principals获取改主体的授权数据
info =