Redirection après le délai d'expiration de HttpSession

J'ai été à la recherche à de nombreux posts sur ce sujet mais n'a pas pu obtenir une solution qui fonctionne dans mon cas.

Je suis à l'aide de Java EE 6 avec JSF 2.0 (déployé sur JBoss as 7.1)

Dans mon web.xml j'ai:

    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

et je voulez que l'utilisateur soit redirigé vers la page de connexion lors de la session automatiquement.

ce que j'ai essayé:

Méthode 1: utilisation du filtre

J'ai essayé le filtre suivant:

@WebFilter()
public class TimeOutFilter implements Filter {

        @Override
        public void init(FilterConfig filterConfig) throws ServletException { 
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {
        System.out.println("filter called");
        final HttpServletRequest req = (HttpServletRequest) request;
        final HttpSession session = req.getSession(false);
        if (session != null && !session.isNew()) {
            chain.doFilter(request, response);
        } else {
            System.out.println("Has timed out");
            req.getRequestDispatcher("/logon.xthml").forward(request, response);
        }
    }

    @Override
    public void destroy() {
    }
}

Dans le web.xml j'ai essayé

<filter-mapping>
    <filter-name>TimeOutFilter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>

et

<filter-mapping>
    <filter-name>TimeOutFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

Le filtre fonctionne comme il est appelé à chaque demande (enregistrement de "fiter appelé" dans la console). Cependant, il n'est pas appelé lors de la session expire.

Approche 2: HttpSessionLister

J'ai essayé d'utiliser un HttpSessionListerner. La méthode ayant la signature suivante:

public void sessionDestroyed(HttpSessionEvent se) {
}

Je n'étais pas en mesure de rediriger vers une page spécifique. Quand je veux rediriger un utilisateur que j'utilise habituellement le NavigationHandler de la FacesContext mais dans ce cas il n'y a pas de FacesContext (FacesContext.getCurrentInstance() retourne null).

Selon cette postle HttpListener ne peut pas rediriger l'utilisateur car il ne fait pas partie d'une demande.

Question

Quelle est la meilleure voie à suivre pour résoudre ce problème? Que puis-je faire pour l'un des deux mentionnés ci-dessus dans les approches de travail?

source d'informationauteur phoenix7360