Salut ,je travaille actuellement sur un projet J2EE (framework Struts),j'ai un problème au niveau de l'authentification(login/logout) ,lorsque je clique sur le boutton de déconnexion(l'utilisateur est redirigé vers login.jsp ,mais s'il clique sur le bouton précédant du navigateur,il va retrouver la même page d'avant) ,
j'ai essayé la solution reposant sur le RequestProcessor mais le probleme persist, voilà la configuration de l'authentification:
la classe "LoginAction" de l'action "Main.do"
pour deconnexion.do
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 import java.io.IOException; public class LoginAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { LoginForm formulaire=(LoginForm)form; HttpSession session = request.getSession(false); //Vérification de l'utilisateur ChargerUtilisateur test=new ChargerUtilisateur(); int r=test.existe(formulaire.getLogin(),formulaire.getPassword()); if(r==0) {return mapping.findForward("erreur1");} else{ Acteur user=test.charger(r); session.setAttribute("user", user); int idprofil=user.getProfil().getIdProfil(); switch(idprofil){ case 1:{ return mapping.findForward("reponse");} case 2: { return mapping.findForward("superuser");} default:{ return mapping.findForward("admin");} }}}}
pour la classe FaqRequestProcessor
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 public class RedirectionAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { HttpSession Session=request.getSession(false); if(Session!=null) { Session.removeAttribute("user"); Session.invalidate(); return mapping.findForward("login"); }else return mapping.findForward("erreur2");} }
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 public class FaqRequestProcessor extends org.apache.struts.action.RequestProcessor{ protected boolean isUserConnected(HttpServletRequest request, HttpServletResponse response){ HttpSession session = request.getSession(); //renvoie true si l'utilisateur est authentifé (par l'intermédiaire de l'attribut user) ou s'il accède à la page login if(request.getServletPath().contains("/Main.do")) {return true;} else { if( session != null && session.getAttribute("user") != null) {return true;}else{return false;}}} protected boolean isSessionValid(HttpServletRequest request) throws ServletException { if (request != null) { return request.isRequestedSessionIdValid(); } return false; } protected boolean processRoles(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { ActionMessages messages = new ActionMessages(); //vérification de la session if (isSessionValid(request)) { //vérification de l'authentification if (isUserConnected(request, response)) { return true; } else { messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("erreurs.connection.required"));//ajout du message request.setAttribute(Globals.ERROR_KEY, messages); } } else { messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("erreurs.session.expired"));//ajout du message request.setAttribute(Globals.ERROR_KEY, messages); } //redirection vers une page d'erreur request.getRequestDispatcher("/vues/login.jsp").forward(request, response); return false; } }
Partager