Bonjour,

J'utilise un filtre dans mon application afin d'intercepter une connection closed.

Voici le source de mon filtre :

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
64
65
66
public class TimeoutFilter implements Filter {
 
    private static final Logger log = LoggerFactory.getLogger("fr.tennis.jsf.utils.timeoutFilter");
    private static final String TIMOUT_PAGE = "desactive.jsp";
    private static final String LOGIN_PAGE = "connexion.jsp";
 
    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;
 
            String path = hRequest.getContextPath();
            System.out.println("request path " +path);
 
            if (checkResource(hRequest)) {
                String requestPath = hRequest.getRequestURI();
                if (checkSession(hRequest)) {
                    this.renvoiLogin();
                    return;
                }
 
 
            }
            filterChain.doFilter(request, response);
        }
    }
 
    /**
     * Vérification si c'est une page protégèe
     * Par défaut toutes les pages sont protègées sauf TIMOUT_PAGE et LOGIN_PAGE
     * @param request
     * @return
     */
    private boolean checkResource(HttpServletRequest request) {
        String requestPath = request.getRequestURI();
        log.debug("reqPath={}", requestPath);
        return !(requestPath.contains(TIMOUT_PAGE)
                || requestPath.contains(LOGIN_PAGE)
                || requestPath.equals(request.getContextPath() + "/"));
 
    }
 
 
    private boolean checkSession(HttpServletRequest request) {
        return request.getRequestedSessionId() != null
                && !request.isRequestedSessionIdValid();
 
    }
 
    public void destroy() {
    }
 
     public String renvoiLogin() {
        System.out.println("Début renvoiLogin");
 
 
        System.out.println("Fin renvoiLogin" );
        return "Reconnexion";
 
    }
}
Le problème est dans l'appel de ma page de reconnexion.
le faces-config est celui-ci et normalement mon évenement Reconnexion doit renvoyer sur ma page desactive.jsp

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
       <!-- Pour la connexion  -->
    <navigation-rule>
        <from-view-id>*</from-view-id>
        <navigation-case>
            <from-outcome>Reconnexion</from-outcome>
            <to-view-id>/desactive.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
 
    <navigation-rule>
        <from-view-id>/connexion.jsp</from-view-id>
        <navigation-case>
            <from-outcome>Accepted</from-outcome>
            <to-view-id>/done.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
 
    <navigation-rule>
        <from-view-id>/done.jsp</from-view-id>
        <navigation-case>
            <from-outcome>goToConnexion</from-outcome>
            <to-view-id>/connexion.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
 
    <navigation-rule>
        <from-view-id>/desactive.jsp</from-view-id>
        <navigation-case>
            <from-outcome>goToConnexion</from-outcome>
            <to-view-id>/connexion.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
Malheureusement il bloque : il affiche une page vide :