IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Filtre timeout erreur de faceContext


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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() {
    	}
    
    }

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    pourquoi t'utilise le faceContext dans le filtre? tu as l'objet de request et session..
    tu peux mettre le lien de l'article que tu as lu?

  3. #3
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    interessant,
    mais tu peux verifier si le bean existe en session en utilisant simplement l'objet session..sans passer par le context de spring
    je ne vois pas ou tu utilises le context JSF, je suis pas bien reveillé encore..

  5. #5
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut
    Le but c'est pas trop de vérifier si le bean existe mais de catcher les timeout donc de vérifier si la session est pas expoiré

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    mais je ne vois pas le faceContext..
    peu eter qq chose dans la config de spring,
    si dj-mos est de passage, il peut nous dire s'il a testé la méthode avec myfaces 1.2 et richfaces ou JSF 1.2 et richfaces 3.2.0

    sinon tu peux y'avait un probleme avec la version 3.2.0 et JSF 1.2.un jira a été ouvert, le probleme semble etre corrigé, mais pas eu le temps de tester, si ma mémoire est bonne, y'a dans le FAQ comment utiliser onExpired avec richfaces pour gerer l'expiration de la session...

  7. #7
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut
    Je suis toujours à la recherche d'une solution, si quelqu'un à une piste ?

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    qu'est ce qui change dans ton environnement par rapport à la solution de djo.mos?

  9. #9
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut
    Tout est expliqué juste au dessus

  10. #10
    Membre confirmé Avatar de Rizzen
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 115
    Par défaut
    Bon j'ai trouvé un solution je try/catch, je sais pas si c'est très propre mais ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    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 = "pages/accueil/timeout.html";
    	//private static final String LOGIN_PAGE = "/pages/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());
    					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; 
    					} 
    				} 
    			}
    			try{
    				filterChain.doFilter(request, response);
    			}catch (Exception e) {
    				//redériger vers la page d'accueil ... 
    				String timeoutUrl = hRequest.getContextPath() + "/" + ACCUEIL_PAGE; 
    				log.info("Session is invalid! " + e.getMessage()); 
    				hResponse.sendRedirect(timeoutUrl); 
    				return; 
    			}
    		}
    	}
     
    	private boolean checkSession(HttpServletRequest request) {
    		return request.getRequestedSessionId() != null
    				&& !request.isRequestedSessionIdValid();
     
    	}
     
    	public void destroy() {
    	}
     
    }

Discussions similaires

  1. [AC-2003] Problème filtres multiples - Erreur 2001
    Par themaskedduck dans le forum VBA Access
    Réponses: 11
    Dernier message: 14/01/2011, 10h06
  2. Timeout Gateway Timeout erreur 504
    Par poupouce5 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/02/2009, 17h42
  3. Réponses: 7
    Dernier message: 20/11/2008, 10h58
  4. erreur sur un non filtre
    Par nico.chev dans le forum Access
    Réponses: 1
    Dernier message: 20/09/2005, 12h16
  5. Erreur d'expression arithmetique et filtre
    Par smail21 dans le forum Bases de données
    Réponses: 11
    Dernier message: 24/08/2005, 01h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo