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:
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
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; } }
Et lorsque je lance l'appli il n'y a pas de redirection si l'utilisateur n'est pas authentifié.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <lifecycle> <phase-listener>pexecutor.login.RedirectionLogin</phase-listener> </lifecycle>
Si vous avez des idées je suis preneur.
Partager