2017-02-01 27 views
0

Я использую apache shiro вместе с JSF 2 и Primefaces. И что происходит, когда пользователь входит в систему, сеанс автоматически истекает. Таким образом, возникает исключение 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> 

Я сейчас борется с этим в течение некоторого времени. Правильны ли мои файлы конфигурации? Я что-то пропустил?

Спасибо, Erick

----- редактировать ------

Найдены исключением, выглядит как Shiro не использует DefaultWebSessionManager я настроенный на моем shiro.ini.

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 вызывает DefaultSessionManager, который обращается к AbstractDAO. Похоже, что он не управляет сессиями как HttpSession. (DefaultSessionManager.retrieveSessionFromDataSource)

+0

Какую реализацию кеша вы используете? –

+0

Привет, Брайан, я не указал реализацию кеша. – Erick

ответ

0

Попробуйте удалить линию sessionManager.sessionDAO = $sessionDAO. Или установка cacheManager

+0

Спасибо за подсказку, но я продолжаю получать исключение. Я вставил его на мой вопрос. – Erick

+0

вы удалили строку sessionDAO или вы установили cacheManger? –