缓存无效在Shiro中无效

时间:2013-07-15 14:56:57

标签: java jsp shiro

我们正在使用Apache Shiro在我们的应用程序中管理身份验证。使用权限时,我使用开箱即用的基于内存的缓存,这是我的shiro.ini。

在我的JSP中,我使用shiro:taglib来检查hasPerimission和lacksPemrissons标签。如果我更新数据库中的用户角色(因此具有相应的权限),并且当用户注销时,他的权限会更新。 我按预期看到了未经授权的页面。但是,链接仍然呈现,不应该呈现。这些链接使用以下语法呈现。 (注意:这些链接是常见header.jsp的一部分,并包含在所有页面中)

<shiro:hasPermission name="admin:viewPage">
        <a href="/pages/admin.jsp">Admin</a>
</shiro:hasPermission>

我的班级JNDIAwareJDBCRealm继承了继承JdbcRealm的{​​{1}}。似乎CacheManagerAware清除了缓存。

标签库是否正在进行缓存?我错过了一些缓存实现吗?

我的Shiro.ini文件:

CacheManagerAware.onLogout()

(意识到Shiro的文档很少。)

1 个答案:

答案 0 :(得分:2)

我得到了它的工作。注销工作流在我们的代码中错误地使用session.invalidate()。所以我需要的两件事是

  1. 通过调用SecurityUtils.getSubject().logout()而不是session.invalidate()来使用正确的注销工作流程。
  2. 登录清除缓存,如下所示:
  3. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
         throws AuthenticationException {
        ...
        SimplePrincipalCollection principals = new SimplePrincipalCollection(username, "jndiJdbcRealm");
        super.doClearCache(principals);
    
        ...
    }