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"
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 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
 
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");}
 
	}
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
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;
	}
	}