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.