【问题标题】:Apache shiro - how do I know that caching is working for authorization?Apache shiro - 我怎么知道缓存正在为授权工作?
【发布时间】: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,

塞拉芬

【问题讨论】:

    标签: tomcat ehcache shiro


    【解决方案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 统计数据。

      1. 启动 jconsole
      2. 打开 MBean 选项卡
      3. 在左侧,打开“net.sf.ehcache”树。
      4. 导航到 net.sf.ehcache/CacheStatistics/[您的缓存名称,默认为 net.sf.ehcache.CacheManager@some_id]
      5. 按名称查找缓存,打开树并选择“属性”

      现在,您可以查看缓存的属性。使用您的应用程序并观察“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 中看到访问缓存的尝试

        祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-25
          • 1970-01-01
          • 2017-05-15
          • 2015-12-01
          • 2014-09-28
          • 2013-05-13
          相关资源
          最近更新 更多