Problème d'authentification: RequestProcessor
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:
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:
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:
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;
}
} |