Filtre timeout erreur de faceContext
J'ai suivit le blog de Djo.mos [Java] Gestion des sessions expirées dans JSF (rebelote) pour faire un filtre et gérer les session timeout. Je l'ai adapté à ma situation. qui est de redirigé sur ma page d'index.jsf. Mais j'obtiens une erreur facecontxt == null. Si quelqu'un à une idée (ou plusieurs ^^)
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| java.lang.NullPointerException: FacesContext is null
org.ajax4jsf.context.AjaxContext.getCurrentInstance(AjaxContext.java:126)
org.ajax4jsf.context.AjaxContext.getCurrentInstance(AjaxContext.java:111)
org.ajax4jsf.component.AjaxViewRoot.getViewId(AjaxViewRoot.java:576)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:104)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
com.elosi.norauto.rejetParebrise.ihm.filtre.TimeoutFilter.doFilter(TimeoutFilter.java:44)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493) |
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 50 51 52 53 54 55 56
| package com.elosi.norauto.rejetParebrise.ihm.filtre;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class TimeoutFilter implements Filter {
private static final Logger log = Logger.getLogger(TimeoutFilter.class);
private static final String ACCUEIL_PAGE = "../accueil/index.jsf";
public void init(FilterConfig filterConfig) throws ServletException {
}
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 (checkSession(hRequest)) {
if (hRequest.getSession(false) != null) {
final WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(hRequest.getSession(false).getServletContext());
System.out.println(ac);
if (ac == null) {
//redériger vers la page d'accueil ...
String timeoutUrl = hRequest.getContextPath() + "/" + ACCUEIL_PAGE;
log.info("Session is invalid! redirecting to timeoutpage : {}");
hResponse.sendRedirect(timeoutUrl);
return;
}
}
}
}
filterChain.doFilter(request, response);
}
private boolean checkSession(HttpServletRequest request) {
return request.getRequestedSessionId() != null
&& !request.isRequestedSessionIdValid();
}
public void destroy() {
}
} |