ViewExpiredException suite à un time out
Bonjour,
Je vais essayer de vous expliquer mon problème à l'aide de scénario.
Scénario 1: Un utilisateur se connecte à mon IHM. Si l'authentification est correcte alors la page index.jsp est appelée et redirige la requete sur la page Acceptor.faces. Ensuite l'utilisateur va sur une autre page , par exemple users.faces. ensuite il attend que la session expire. L'utilisateur essaye de cliquer sur un lien quelconque la il est directement rediriger sur la page de login grace à mon filtre. L'utilisateur se connecte à nouveau pas de problème la page Acceptors est bien affichée.
Scénario 2: On met les compteurs à zéro. L'utilisateur s'identifie puis voit la page acceptors.faces (redirection de la page index.jsp). Ensuite il reste sur cette page en attendant que la session expire. Une fois le temps écoulé, il essayer de cliquer sur un des lien et l'utilisateur et redirigé sur la page de login. Cette fois, lorsqu'il essaye de se reconnecter j'ai l'expception suivante qui s'affiche dans mon navigateur et mes logs:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
Description: An unhandled exception occurred during the execution of the web application. Please review the following stack trace for more information regarding the error.
Exception Details: javax.faces.application.ViewExpiredException
viewId:/webui/acceptors/Acceptors.faces - View /webui/acceptors/Acceptors.faces could not be restored.
Possible Source of Error:
Class Name: com.sun.faces.lifecycle.RestoreViewPhase
File Name: RestoreViewPhase.java
Method Name: execute
Line Number: 187
Stack Trace:
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:187)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
com.archipel.administration.web.servlet.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:81)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) |
Je ne comprend pas du tout pourquoi cela fonctionne pour n'importe quelle page de mon application sauf la page acceptors.
Code index.jsp
Code:
1 2 3 4
|
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:redirect url="webui/acceptors/Acceptors.faces"/> |
Code du filtre:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) {
HttpServletRequest hRequest = (HttpServletRequest) request;
HttpServletResponse hResponse = (HttpServletResponse) response;
if (checkResource(hRequest)) {
if (checkSession(hRequest)) {
String timeoutUrl = hRequest.getContextPath() + "/webui/login.faces";
logger.error("Session time out. Redirecting to login page.");
hResponse.sendRedirect(timeoutUrl);
return;
}
if (null == hRequest.getSession().getAttribute("NewSessionBean")) {
if (checkResource(hRequest) && !hRequest.getRequestURI().contains("Acceptors.faces")) {
String timeoutUrl = hRequest.getContextPath() + "/webui/acceptors/Acceptors.faces";
logger.error("Invalid session. Redirecting to acceptor page.");
hResponse.sendRedirect(timeoutUrl);
return;
}
}
}
}
filterChain.doFilter(request, response);
} |
Mzeric de votre aide