Java 缓存失效在Shiro中不工作

Java 缓存失效在Shiro中不工作,java,jsp,shiro,Java,Jsp,Shiro,我们正在使用ApacheShiro管理应用程序中的身份验证。使用权限时,我使用的是开箱即用的基于内存的缓存,这是我的shiro.ini 在我的JSP中,我使用shiro:taglib检查hasPerimission和lackspemrisson标记。如果我更新数据库中的用户角色(因此相应的权限),当用户注销时,其权限将更新我看到了未经授权的页面。但是,链接仍然呈现,这不应该发生。这些链接使用以下语法呈现。(注意:这些链接是commonheader.jsp的一部分,包含在所有页面中) (意识到Sh

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

在我的JSP中,我使用
shiro:taglib
检查hasPerimission和lackspemrisson标记。如果我更新数据库中的用户角色(因此相应的权限),当用户注销时,其权限将更新我看到了未经授权的页面。但是,链接仍然呈现,这不应该发生。这些链接使用以下语法呈现。(注意:这些链接是common
header.jsp
的一部分,包含在所有页面中)


(意识到Shiro的文档非常少。)

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

  • 通过调用
    SecurityUtils.getSubject().logout()
    而不是session.invalidate(),使用正确的注销工作流
  • 登录时清除缓存,如下所示:
  • <shiro:hasPermission name="admin:viewPage">
            <a href="/pages/admin.jsp">Admin</a>
    </shiro:hasPermission>
    
    [main] 
    jndiJdbcRealm=com.my.domian.JNDIAwareJDBCRealm
    jndiJdbcRealm.jndiDataSourceName=jdbc/mySQLConnection 
    jndiJdbcRealm.authenticationQuery = select password FROM users where email_id=?
    jndiJdbcRealm.userRolesQuery= select role from user_roles, user where user.email_id =? AND user.id = user_roles.user_id 
    jndiJdbcRealm.permissionsQuery= SELECT permission FROM role_permission WHERE role=? jndiJdbcRealm.permissionsLookupEnabled=true
    
    bcryptCredentialsMatcher=com.my.domain.BCryptCredentialsMatcher
    jndiJdbcRealm.credentialsMatcher = $bcryptCredentialsMatcher
    
    securityManager.realms = $jndiJdbcRealm builtInCacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
    securityManager.cacheManager = $builtInCacheManager
    
    # unauthorized page
    perms.unauthorizedUrl = /pages/unauthorized.jsp
    
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
         throws AuthenticationException {
        ...
        SimplePrincipalCollection principals = new SimplePrincipalCollection(username, "jndiJdbcRealm");
        super.doClearCache(principals);
    
        ...
    }