Apache shiro - 我怎么知道缓存正在为授权工作?
Posted
技术标签:
【中文标题】Apache shiro - 我怎么知道缓存正在为授权工作?【英文标题】:Apache shiro - how do I know that caching is working for authorization? 【发布时间】:2012-03-10 16:29:10 【问题描述】:我在我的 Tomcat 中使用 Apache Shiro,我想通过 EhCache 启用授权缓存。
我所做的是在 shiro.ini 中添加这两行:
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager securityManager.cacheManager = $cacheManager并将 ehcache-core-2.5.1.jar 复制到我的 WEB-INF/lib 目录中。对于授权,我实现了一个从 mysql 数据库读取权限的自定义领域。所以我想开启缓存,尽可能减少对数据库的查询……不得不提,我对EhCache不熟悉,只想开启授权的缓存!
如果我正确理解了 Shiro 文档,以上内容足以启用缓存 - 但是我没有看到 :(
Tomcat 无异常启动,并且在测试 JSP 中,我使用的授权起初可以正常工作。如果我对数据库的权限进行更改,我会看到测试 JSP 立即意识到更改!我期待测试 JSP 会从缓存中返回值...你能告诉我可能有什么问题吗?另外,有没有办法查明是否实际调用了 EhCache 以及它的行为方式(如果需要启用日志记录,如果您提供详细信息,我将不胜感激,因为我对此不太熟悉)。
更新:我还必须提到我添加了这一行
System.out.println("缓存已启用" + isCachingEnabled());
在我的自定义领域的初始化中,我得到了真实的!
TIA,
塞拉芬
【问题讨论】:
【参考方案1】:个人不太了解Shiro,对Tomcat也不是很了解,但是对EHCache还是比较了解的。我知道 API 支持缓存更新。根据 Shiro 使用 EHCache 的方式,它可能会在缓存信息发生变化时更新它。您的 JSP 显示它已更新并不能证明缓存是否有效。
在编程中,插入代码来捕获 EHCache 的统计信息是相当容易的,但我不确定当它以这种方式集成时你会如何。当封闭应用程序设置为高日志记录级别时,EHCache 具有内置日志记录,但我在 2.5.1 中无法使其工作。此处描述了 EHCache 的日志记录设置:http://ehcache.org/documentation/operations/logging,但我不知道您将如何设置 Shiro 以输出消息。
希望对你有帮助。
【讨论】:
【参考方案2】:使用 jconsole 查看 EHCache 的 JMX 统计数据。
-
启动 jconsole
打开 MBean 选项卡
在左侧,打开“net.sf.ehcache”树。
导航到 net.sf.ehcache/CacheStatistics/[您的缓存名称,默认为 net.sf.ehcache.CacheManager@some_id]
按名称查找缓存,打开树并选择“属性”
现在,您可以查看缓存的属性。使用您的应用程序并观察“CacheHits”和“ObjectCount”变量是否按应有的变化。 ObjectCount 是 ehcache 在任何给定时间缓存的所有项目; CacheHits 显示这些项目是否实际被使用。
您也可以远程执行此操作,但这有点麻烦 - 您需要通过 SOCKS 代理来隧道化 JConsole。本文详细介绍了执行此操作的步骤:http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html。
【讨论】:
【参考方案3】:如果您有单步调试器,请尝试在 subject.login() 处设置断点,即:
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
subject.login(token);
这应该会引导您完成:org.apache.shiro.authc.pam.ModularRealmAuthenticator.java org.apache.shiro.realm.AuthenticatingRealm.java
您将在 AuthenticatingRealm.java 中看到访问缓存的尝试
祝你好运!
【讨论】:
以上是关于Apache shiro - 我怎么知道缓存正在为授权工作?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Shiro EhCache 初始化异常:另一个未命名的 CacheManager 已存在于同一个 VM 中