我们正在使用 Apache Shiro 在我们的应用程序中管理身份验证。使用权限时,我使用的是开箱即用的基于内存的缓存,这是我的 shiro.ini。
在我的 JSP 中,我shiro:taglib
用来检查 hasPerimission 和 lacksPemrissons 标签。如果我更新数据库中的用户角色(因此相应的权限),并且当用户注销时,他的权限也会更新。我按预期看到未经授权的页面。但是,仍然呈现链接,这不应该。这些链接使用以下语法呈现。(注意:这些链接是 common 的一部分header.jsp
,并且包含在所有页面中)
<shiro:hasPermission name="admin:viewPage">
<a href="/pages/admin.jsp">Admin</a>
</shiro:hasPermission>
我的班级JNDIAwareJDBCRealm
继承JdbcRealm
了哪个继承CacheManagerAware
。似乎CacheManagerAware.onLogout()
清除了缓存。
它是标签库做一些缓存吗?我是否缺少一些缓存实现?
我的 Shiro.ini 文件:
[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
(意识到 Shiro 的文档非常少。)