Comment gérer le Timeout de la session avec JSF

Dans l’application sur laquelle je travaille, j’ai eu un ennuyeux problème avec le Session Timeout, surtout avec IE 6 (tiens, c’est bizarre ça ;))
Bref, j’ai pas trouvé grand chose en googlant la chose, alors j’ai du concocter ma propre solution fait maison que voici:

[Suite:]

Je passe par un filtre mappé avec la Faces Servlet dont voici le code:

public class TimeoutFilter implements Filter { 
  private static final Logger log = Logger.getLogger(TimeoutFilter.class); 
 
  public void init(FilterConfig conf) throws ServletException {} 
  public void destroy() {} 
 
  public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest r = ((HttpServletRequest) request); 
    if (r.getSession(false) == null) { 
      r.getSession(); 
      ((HttpServletResponse) response).sendRedirect(r.getContextPath()+"/timeout.html"); 
    } else { 
      chain.doFilter(request, response); 
    } 
  } 
}

En gros, voici ce qu fait ce filtre:

  1. Je castes le paramètre request en HttpServletRequest.
  2. Je récupère la session en cours sans pour autant la créer si elle n’existe pas (d’ou le false passé à getSession)
  3. Si pas de session, alors j’en crée une nouvelle et je redirige vers une page html qui affiche “Session expirée, reconnectez vous, bla bla bla”.
  4. Sinon, je ne fais rien, je passe la main aux autres filtres de la chaîne.

Il faut ensuite déclarer ce filtre dans web.xml et l’associer à la Faces Servlet:

<filter> 
  <display-name>Timeout Filter</display-name> 
  <filter-name>timeout</filter-name> 
  <filter-class>TimeoutFilter</filter-class> 
</filter> 
<filter-mapping> 
  <filter-name>timeout</filter-name> 
  <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping>

Et voilou, le tour est joué: plus d’écran moche d’exception de Tomcat lors du timeout.

—-

About these ads

One Response to Comment gérer le Timeout de la session avec JSF

  1. Dieudonné says:

    Merci beaucoup j’avais le même problème et ce code vient de me sauver!

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: