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 :

Redirection d'un filtre


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 36
    Par défaut Redirection d'un filtre
    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 :

  2. #2
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 36
    Par défaut
    Petite précision : le but c'est que le filtre redonne la main au faces-config.

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 36
    Par défaut
    J'ai essayé d'une autre manière en faisant une sendRedirect plutôt que de laisser le faces-config rediriger :

    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
       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();
                        String timeoutUrl = hRequest.getContextPath() + "/faces/"
                                + TIMOUT_PAGE;
                        log.info("Session is invalid! redirecting to timeoutpage : {}",
                                TIMOUT_PAGE);
     
                        hResponse.sendRedirect(timeoutUrl);
                        return;
                    }
     
     
                }
                filterChain.doFilter(request, response);
            }
        }
    Mais il reste un problème c'est les adresses url qui sont affichées. Comme c'est plus le faces-config qui dirige il faut que dans l'adresse j'ajoute le /faces/ et l'adresse devient visible:



    au lieu de :

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu travaille dans un filtre HTTP, tu travaille d'office en dehors du context JSF. Ne t'attends donc pas à avoir accès à la moindre fonctionnalité de JSF. En particulier il n'y a aucune raison que JSF voie le résultat de renvoiLogin()

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 36
    Par défaut
    Bon donc je suis obligé de me contenter de la deuxième solution.

    Tant pis merci je ferme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection d'un filtre
    Par Gwenc dans le forum JSF
    Réponses: 2
    Dernier message: 03/11/2010, 12h00
  2. [1.x] redirection d'un filtre
    Par lepopol dans le forum Symfony
    Réponses: 14
    Dernier message: 15/06/2010, 19h08
  3. Redirection & Filtre
    Par Debault dans le forum JSF
    Réponses: 5
    Dernier message: 17/02/2009, 09h32
  4. [1.x] redirect dans un filtre
    Par NVCyril dans le forum Symfony
    Réponses: 1
    Dernier message: 02/05/2008, 13h35
  5. Filtre et redirection
    Par biniou14 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 23/04/2007, 21h51

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