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)
どのキャッシュ実装を使用していますか? –
こんにちはブライアン、私はキャッシュの実装を指定していない。 – Erick