Apache shiro - 我怎么知道缓存是否适用于授权?

时间:2012-02-20 10:06:26

标签: tomcat ehcache shiro

我在Tomcat中使用Apache Shiro,我希望通过EhCache启用授权缓存。

我所做的是在shiro.ini中添加这两行:

cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager

并在我的WEB-INF / lib目录中复制了ehcache-core-2.5.1.jar。对于授权,我实现了一个自定义Realm,它从MySQL Databaase读取权限。所以我想启用缓存以尽可能减少对数据库的查询...我不得不提到我不熟悉EhCache而我只想启用授权缓存!

如果我正确理解了Shiro文档,上面的内容足以启用缓存 - 但是我没有看到:(

Tomcat开始没有异常,并且在测试JSP中我使用授权工作正常。如果我对数据库的权限进行了更改,我发现测试JSP立即意识到了这一变化!我原以为测试JSP会从缓存中返回值...你能告诉我什么可能是错的吗?另外,有没有办法找出EhCache是​​否实际被调用以及它是如何运行的(如果需要启用日志记录,如果你给我详细信息,我将不胜感激,因为我对此并不十分熟悉)。

更新:我还要提到我添加了一行

System.out.println("Caching is enabled " + isCachingEnabled() );

在我的自定义领域的初始化中,我得到了真的!

TIA,

Serafeim

3 个答案:

答案 0 :(得分:1)

就个人而言,我不认识Shiro,我不太了解Tomcat,但我对EHCache有一个公平的理解。我知道API支持缓存更新。根据Shiro如何使用EHCache,它可能会在更改时更新缓存的信息。显示更新的JSP不能证明缓存是否正常工作。

在编程中,插入代码来捕获EHCache的统计信息相当容易,但我不确定如何以这种方式集成它。当封闭应用程序设置为高日志记录级别时,EHCache具有内置日志记录,但是我在2.5.1中无法使用它。此处描述了EHCache的日志记录设置:http://ehcache.org/documentation/operations/logging,但我不知道如何设置Shiro来输出消息。

我希望有所帮助。

答案 1 :(得分:1)

使用jconsole观察EHCache的JMX统计信息。

  1. 启动jconsole
  2. 打开MBeans选项卡
  3. 在左侧,打开“net.sf.ehcache”树。
  4. 导航到net.sf.ehcache / CacheStatistics / [您的缓存名称,默认为net.sf.ehcache.CacheManager@some_id]
  5. 按名称查找缓存,打开树并选择“属性”
  6. 现在,您可以查看缓存的属性。使用您的应用程序,观察“CacheHits”和“ObjectCount”变量是否会发生变化。 ObjectCount是ehcache在任何给定时间缓存的所有项目; CacheHits显示这些项目是否实际被使用。

    您也可以远程执行此操作,但这有点毛茸茸 - 您需要通过SOCKS代理隧道JConsole。本文详细介绍了执行此操作的步骤:http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

答案 2 :(得分:0)

如果您有逐步调试器,请尝试在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中看到尝试访问缓存的尝试

祝你好运!