Я использую 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)
Какую реализацию кеша вы используете? –
Привет, Брайан, я не указал реализацию кеша. – Erick