我在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
答案 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统计信息。
现在,您可以查看缓存的属性。使用您的应用程序,观察“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中看到尝试访问缓存的尝试
祝你好运!