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 & Filtre


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut Redirection & Filtre
    Salut,

    je suis débutant en JSF et après quelques heures de recherches sur le net je n'ai pas trouvé de réponse concluante. Si quelqu'un pouvait m'aider ça serait sympa parce que je rame.

    J'utilise JSF 1.2 et le serveur est GlassFish v2.

    J'ai une page Login.jsp qui authentifie les utilisateurs et met à jour un SessionBean. Si l'utilisateur a été authentifié, mon SessionBean a son attribut log qui passe à true. J'ai juste une seconde page Ok.jsp qui affiche la valeur de mon SessionBean lorsque je clique sur un bouton.

    Je voudrais que si un utilisateur accède à une page et qu'il n'est pas logué, qu'il soit alors redirigé vers la page Login.jsp

    Je me suis inspiré de : ça. J'utilise donc un phaselistener.

    Voilà le code de mon phaselistener:
    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
    public class RedirectionLogin implements javax.faces.event.PhaseListener {
     
    	public void afterPhase(javax.faces.event.PhaseEvent e) {
            FacesContext context = e.getFacesContext();
            HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
     
            PhaseId phaseid = e.getPhaseId();
            if (phaseid == PhaseId.RESTORE_VIEW || phaseid == PhaseId.INVOKE_APPLICATION) {
     
                String viewId = context.getViewRoot().getViewId();
     
                if (viewId != null && !("/Login.jsp".equals(viewId))) {
     
                    //traitement test et redirection
                    SessionBean1 sessionBean = (SessionBean1) context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), "#{sessionBean1}",SessionBean1.class).getValue(context.getELContext());
                    try {
                        if(!sessionBean.getLog()){
                            response.sendRedirect("Login.jsp");
                        }
                    } catch (IOException e1) {}
                }
            }
        }
     
    	public void beforePhase(javax.faces.event.PhaseEvent e) {
                 }
     
    	public javax.faces.event.PhaseId getPhaseId() {
    		return javax.faces.event.PhaseId.ANY_PHASE;
    	}
    }
    J'ai ajouté à faces-config.xml (le package du phaselistener est pexecutor.login, et les class de mes pages jsp sont dans le package pexecutor):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <lifecycle>
            <phase-listener>pexecutor.login.RedirectionLogin</phase-listener>
        </lifecycle>
    Et lorsque je lance l'appli il n'y a pas de redirection si l'utilisateur n'est pas authentifié.

    Si vous avez des idées je suis preneur.

  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
    tu as essayé en debug voir si le code de la méthode est exécuté ?

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Je viens d'essayer, je passe bien dans afterPhase. Mais apparement viewId vaut toujours /Login.jsp dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String viewId = context.getViewRoot().getViewId();
    Donc je ne rentre jamais dans mon if. Tu sais d'où est ce que ça peut venir?

  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
    c'est ta première page login.jsp,
    Pourquoi tu test le nom de la vue, tu dois seulement faire le test si le user est bien dans la session.

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Après m'être battu avec JSF j'ai une solution au problème :
    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
    public void afterPhase(javax.faces.event.PhaseEvent e) {
            FacesContext context = e.getFacesContext();
            HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
     
            PhaseId phaseid = e.getPhaseId();
            if (phaseid == PhaseId.RESTORE_VIEW || phaseid == PhaseId.INVOKE_APPLICATION) {
     
            context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), "#{sessionBean1}",SessionBean1.class).getValue(context.getELContext());
                SessionBean1 sessionBean = (SessionBean1) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SessionBean1");
                try {
                        String viewId = context.getViewRoot().getViewId();
                        if((sessionBean!=null) && (!sessionBean.getLog()) && !("/Login.jsp".equals(viewId))){
                            FacesContext.getCurrentInstance().getExternalContext().redirect("Login.jsp");
                        }
                    } catch (IOException e1) {}
            }
        }
    Je ne peux pas seulement me contenter de tester mon Bean, j'ai besoin de la vue, car si lors du login je rentre des valeurs éronées qui me redirigent vers une autre page, mon Bean s'initialise. En combinant la valeur de mon Bean et la vue ça a l'air de fonctionner.

    Merci beaucoup à toi Sniper mais tu risques de me revoir prochainement je n'ai pas encore fini avec JSF

  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
    ça serait avec plaisir
    mais n'oublie pas de mettre ton post resolu la prochaine fois

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

Discussions similaires

  1. Redirection d'un filtre
    Par Gwenc dans le forum JSF
    Réponses: 4
    Dernier message: 22/10/2010, 23h32
  2. [1.x] redirection d'un filtre
    Par lepopol dans le forum Symfony
    Réponses: 14
    Dernier message: 15/06/2010, 19h08
  3. [1.x] redirect dans un filtre
    Par NVCyril dans le forum Symfony
    Réponses: 1
    Dernier message: 02/05/2008, 13h35
  4. 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