Bonjour la communauté! J'utilise Struts 1.3.8 avec Netbeans et FireFox 3.6.9, mais je fais face à un véritable problème.
A l'origine mon problème est de pouvoir sortir (me déconnecter) de mon application en toute sécurité, i.e. faire un logout sécurisé, mais seulement lorsque je me déconnecte de l'application malgré le que je fasse :
Dès que je fais un "back" dans mon navigateur, je suis ramené à la page précédente et tout se passe comme si l'utilisateur était toujours connecté.
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 public class LogoutAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(); if(session != null){ session.removeAttribute("user"); session.invalidate(); } return mapping.findForward("logout"); } }
Pour résoudre mon problème j'ai suivi le tutoriel suivant http://www.javaworld.com/javaworld/j...27-logout.html. J'ai donc ma page logout.jsp qui ressemble à ceci:
De même dans mon fichier struts-config.xml j'ai:
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 <%@page contentType="text/html"%> <% response.setHeader("Cache-Control","no-cache"); //Forces caches to obtain a new copy of the page from the origin server response.setHeader("Cache-Control","no-store"); //Directs caches not to store the page under any circumstance response.setDateHeader("Expires", 0); //Causes the proxy cache to see the page as "stale" response.setHeader("Pragma","no-cache"); //HTTP 1.0 backward compatibility User user = (User) session.getAttribute("user"); if (null == user) { request.setAttribute("Error", "Session has ended. Please login."); RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); rd.forward(request, response); } //ContextHolder.setContext(null); %> <jsp:forward page="login1.do"/>
Où ma classe IRequestProcessor est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <controller nocache="true" processorClass="com.foo.struts.processor.IRequestProcessor"/>
Mais seulement ici un nouveau problème se pose: lorsque je clic sur le bouton "back" du navigateur (en l'occurrence FireFox) il me demande si je veux renvoyer les informations ou non, lorsque je dis oui, bien évidemment il se reconnecte et je n'ai toujours pas de solution, et si je dis non il ne fait rien même pas le "back" (retour à la page précédente).
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 public class IRequestProcessor extends TilesRequestProcessor { // On verifie si l'utilsateur est bien connecté protected boolean isUserConnected(HttpServletRequest request, HttpServletResponse response) { if (request != null) { HttpSession session = request.getSession(false); if (session != null && session.getAttribute("user") != null) { return true; } else { return request.isRequestedSessionIdValid(); } } return false; } // On vérifie si la session a expirée : la session expire si l'id de la session n'est pas valide @Override protected boolean processRoles(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws java.io.IOException, javax.servlet.ServletException { if (isUserConnected(request, response)) { return true; } else { try { //If no redirect user to login Page request.getRequestDispatcher("login.jsp").forward(request, response); } catch (Exception ex) { // log.error(ex); request.getRequestDispatcher("../login.jsp").forward(request, response); } } return false; } }
Alors si quelqu'un à une idée de comment résoudre le problème de déconnexion d'une application java web avec Struts 1.x, je serais intéressé par sa solution.
Merci d'avance!
Partager