2017-02-01 32 views
0

JSF 2とPrimefaceとともにApache Shiroを使用しています。そして、何が起こるかは、ユーザーがログインすると、セッションは自動的に期限切れになります。このようにして、ViewExpiredExceptionがスローされます。Apache shiro - ログイン後のセッションタイムアウト

サーバからクライアントへjavax.faces.STATE_SAVING_METHODを変更すると、それは機能し、ユーザは正常にログインし、最初のページにリダイレクトされます。ただし、この後、ブラウザのURLを入力すると、たとえばhttp://localhost:8080/myApp/initial.xhtmlのようにセッションは復元されず、アプリケーションから別の例外がスローされます。最初のリダイレクトのように見えます。他のページに移動しようとすると、セッションを復元できません(subject.getSession(false)がnullを返します)。

ここに私の設定ファイルがあります。

shiro.ini

[main] 

authc.loginUrl = /login.xhtml 

customRealm = xx.xxx.xxxx.xxxx.xxxx.CustomRealm 

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 

authenticator = xx.xxx.xxxx.xxxxx.xxxx.CustomAuthenticator 

sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO 

securityManager = org.apache.shiro.web.mgt.DefaultWebSecurityManager 
securityManager.realms = $customRealm 
securityManager.sessionManager = $sessionManager 
securityManager.sessionManager.globalSessionTimeout = 1800000 
securityManager.authenticator = $authenticator 
sessionManager.sessionDAO = $sessionDAO 

ssl.enabled = false 


[users] 


[roles] 


[urls] 

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 
    <context-param> 
     <param-name>primefaces.THEME</param-name> 
     <param-value>omega</param-value> 
    </context-param> 
    <context-param> 
     <param-name>primefaces.FONT_AWESOME</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <!-- <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> </context-param> --> 
    <context-param> 
     <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name> 
     <param-value>0</param-value> 
    </context-param> 
    <mime-mapping> 
     <extension>woff</extension> 
     <mime-type>application/font-woff</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>woff2</extension> 
     <mime-type>application/font-woff2</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>eot</extension> 
     <mime-type>application/vnd.ms-fontobject</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>ttf</extension> 
     <mime-type>application/x-font-ttf</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 


    <context-param> 
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
     <param-value>server</param-value> 
    </context-param> 

    <!-- Apache Shiro --> 
    <listener> 
     <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> 
    </listener> 
    <filter> 
     <filter-name>ShiroFilter</filter-name> 
     <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>ShiroFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>INCLUDE</dispatcher> 
     <dispatcher>ERROR</dispatcher> 
    </filter-mapping> 


</web-app> 

私は今、いくつかの時間のためにこれで苦労しています。私の設定ファイルは正しいですか?私は何か不足していますか?

は エリック

、ありがとう-----編集------

は例外を発見、史郎が私は私のshiro.ini上で設定DefaultWebSessionManagerを使用していないように見えます。

DEBUG [default task-33] (AbstractShiroFilter.java:411) - No FilterChainResolver configured. Returning original FilterChain. 
DEBUG [default task-37] (SimpleCookie.java:389) - Found 'JSESSIONID' cookie value [0c5717a5-545b-4033-880c-6c5e4d65a6f5.sesco11] 
DEBUG [default task-37] (DefaultSecurityManager.java:447) - Resolved SubjectContext context session is invalid. Ignoring and creating an anonymous (session-less) Subject instance. 
org.apache.shiro.session.UnknownSessionException: There is no session with id [0c5717a5-545b-4033-880c-6c5e4d65a6f5.sesco11] 
    at org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170) 
    at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236) 
    at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222) 
    at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118) 
    at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:148) 
    at org.apache.shiro.session.mgt.AbstractNativeSessionManager.getSession(AbstractNativeSessionManager.java:140) 
    at org.apache.shiro.mgt.SessionsSecurityManager.getSession(SessionsSecurityManager.java:156) 
    at org.apache.shiro.mgt.DefaultSecurityManager.resolveContextSession(DefaultSecurityManager.java:456) 
    at org.apache.shiro.mgt.DefaultSecurityManager.resolveSession(DefaultSecurityManager.java:442) 
    at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:338) 
    at org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846) 
    at org.apache.shiro.web.subject.WebSubject$Builder.buildWebSubject(WebSubject.java:148) 
    at org.apache.shiro.web.servlet.AbstractShiroFilter.createSubject(AbstractShiroFilter.java:292) 
    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:359) 
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 

ShiroがAbstractDAOを呼び出すDefaultSessionManagerを呼び出しています。セッションがHttpSessionとして管理されていないように見えます。 (DefaultSessionManager.retrieveSessionFromDataSource)

+0

どのキャッシュ実装を使用していますか? –

+0

こんにちはブライアン、私はキャッシュの実装を指定していない。 – Erick

答えて

0

sessionManager.sessionDAO = $sessionDAO行を削除してみます。 または設定するcacheManager

+0

チップをありがとうが、私は例外を取得し続けます。私はそれを私の質問に貼り付けました。 – Erick

+0

sessionDAO行を削除したか、cacheMangerを設定しましたか? –

関連する問題