Hi again,
I'm having trouble with specifying my own Cache.
I've specified my own CacheManager and Cache classes in my ShiroFilter:
realmA = com.vonage.auth.VonageAuthenticationRealm
securityManager =
org.apache.shiro.web.DefaultWebSecurityManager
sessionManager =
org.apache.shiro.web.session.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
securityManager.sessionMode = native
#cacheManager =
org.apache.shiro.cache.DefaultCacheManager
cacheManager =
com.vonage.auth.VonageDistributedSessionCacheManager
sessionDAO =
org.apache.shiro.session.mgt.eis.MemorySessionDAO
sessionDAO.cacheManager = $cacheManager
securityManager.sessionDAO = $sessionDAO
securityManager.cacheManager = $cacheManager
securityManager.realm = $realmA
realmA.cacheManager = $cacheManager
My VonageDistributedSessionCacheManager class simply returns an instance
of my VonageDistributedSessionCache class, which implements the Cache
interface.
The problem is that the various methods in my
VonageDistributedSessionCache class (get(), put(), etc) are never being
called. By adding tracing, I can confirm that my
VonageDistributedSessionCache constructor is being called from
AuthorizationRealm.initAuthorizationCache(). But when I login to my
servlet, my get() and put() methods are never called. On my first login
attempt to get to my servlet, I have no session and so I'm challenged
for username/password. Then on a second attempt, it lets me through. So
somewhere Shiro is caching my sessionid, but I don't know where. All I
know is that it's not using the Cache that I told it to :) In fact, I
told it 3 times ($cacheManager is mentioned 3 times above)!
So where is it in Shiro that checks the session cache? I see that
AuthorizingRealm.initAuthorizationCache() does create an instance of my
VonageDistributedSessionCache class, and calls setAuthorizationCache()
to store it. But I don't see any calls to the corresponding
getAuthorizationCache() to actually use it.
I'm not sure if this helps or not, but below is a stack trace from my
servlet. Somewhere along this chain of calls, somebody should have
called AuthorizingRealm.getAuthorizationCache() but didn't.
Thanks,
Andy
------------------------------------------------------------------------
----------------------
at java.lang.Thread.dumpStack(Thread.java:1206)
at
com.vonage.authenticatorTest.TestServlet1.doGet(TestServlet1.java:15)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:269)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:188)
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterCh
ain.java:58)
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java
:107)
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.
java:137)
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerReques
tFilter.java:190)
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterCh
ain.java:63)
at
org.apache.shiro.web.servlet.ShiroFilter.executeChain(ShiroFilter.java:6
48)
at
org.apache.shiro.web.servlet.ShiroFilter.doFilterInternal(ShiroFilter.ja
va:588)
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerReques
tFilter.java:190)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:215)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:188)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:172)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:117)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:108)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:1
74)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:87
5)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.proc
essConnection(Http11BaseProtocol.java:665)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint
.java:528)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollow
erWorkerThread.java:81)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:689)
at java.lang.Thread.run(Thread.java:619)