2017-06-07 8 views
0

私はSSOを有効にするためにehcache.xmlと一緒に認証にshiroを使用しています。shiroとehcacheに関する問題

私は

public class SharedEhCacheManagerFactory implements Factory<CacheManager> { 

    private String cacheManagerConfigFile = "/ehcache.xml"; 

    @Override 
    public CacheManager getInstance() 
    { 
     return CacheManager.create(readCacheManagerConfigFileAsInputStream()); 
    } 

    public InputStream readCacheManagerConfigFileAsInputStream() 
    { 
     InputStream is = getClass().getResourceAsStream(cacheManagerConfigFile); 
     return is; 
    } 
} 

以下のようなファクトリクラスを持っており、すべてのWebアプリケーションのための私のshiro.iniファイルのメインセクションが

[main] 
ehCacheManager = com.nokia.anv.app.security.service.SharedEhCacheManagerFactory 
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager 
cacheManager.cacheManager=$ehCacheManager 
securityManager.cacheManager = $cacheManager 

sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO 
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
sessionManager.sessionDAO = $sessionDAO 

cookie = org.apache.shiro.web.servlet.SimpleCookie 
cookie.name = SSOCookie 
cookie.path =/
sessionManager.sessionIdCookie = $cookie 
sessionManager.sessionIdUrlRewritingEnabled = false 
securityManager.sessionManager = $sessionManager 
のようなものです
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" 
     monitoring="autodetect" dynamicConfig="true" name="my-cache"> 

    <diskStore path="java.io.tmpdir/mycache" /> 


    <cache name="shiro-activeSessionCache" maxElementsInMemory="1000" 
      eternal="true" overflowToDisk="true" memoryStoreEvictionPolicy="LFU"> 

    </cache> 

    <defaultCache maxElementsInMemory="100" eternal="true" 
        overflowToDisk="true" memoryStoreEvictionPolicy="LFU"> 
    </defaultCache> 
</ehcache> 

のように私のehcache.xmlに見えます

私はapache karafを使用しています。このアプリケーションはドッカーコンテナに入っています。私が最初にコンテナを起動するとすべてが大丈夫ですが、私はコンテナを停止して開始した場合、私は

javax.servlet.ServletException: java.lang.IllegalStateException: The CacheManager has been shut down. It can no longer be used. 
     at org.apache.shiro.web.servlet.AdviceFilter.cleanup(AdviceFilter.java:196) 
     at org.apache.shiro.web.filter.authc.AuthenticatingFilter.cleanup(AuthenticatingFilter.java:155) 
     at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:148) 
     at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
     at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) 
     at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 
     at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) 
     at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 

ようappllicationsのほとんどのエラーを取得していますが、常に2つのアプリケーションが細かいです。問題が何であるか教えてください。

答えて

1

私はCacheManagerでdestroy()メソッドを呼び出すと推測しています。いくつかのロギングを追加したり、ブレークポイントを設定して原因を特定することができます。

関連する問題