アプリで認証を管理するために Apache Shiro を使用しています。Permission を使用する場合、すぐに使用できるメモリ ベースのキャッシュを使用しています。これが私の 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
ものを継承し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 のドキュメントが非常に少ないことに気付きました。)