IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[Struts 1.3.10] Empêcher un appel Ajax après un sessionTimeout


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Par défaut [Struts 1.3.10] Empêcher un appel Ajax après un sessionTimeout
    Bonjour,

    J'aimerai lorsque que la session d'un utilisateur est expirée, lors de sa prochaine action, le rediriger vers la page de login.

    Le tout marche très bien sauf lorsqu'il s'agit d'un appel Ajax... Ma page de login s'affiche alors dans la balise <div> qui devait être mise à jour.

    Pour gérer mes sessions j'utilise simplement un filtre et la méthode doFilter :

    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 void doFilter(final ServletRequest request, final ServletResponse response,final FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
     
        // la page de login est exclue du test
        if (!entryURLs.contains(req.getServletPath())) {
     
          if (!req.isRequestedSessionIdValid()) {
            res.sendRedirect("./login.do");
            return;
          }
        }
     
        chain.doFilter(request, response);
      }
    Pour l'Ajax j'utilise Prototype et la méthode Ajax.Updater.

    Merci d'avance à ceux qui passeraient par là !

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Par défaut
    Une solution :

    Utiliser le onFailure de Prototype pour redirigier vers la page de login.

    Pour que le onFailure soit déclenché, j'utilise la méthode sendError dans mon filtre.

    Il reste alors à différencier une requête ajax d'une requête normale. Prototype utilise un header : 'x-requested-with' = 'XMLHttpRequest'. Lorsque celui-ci est présent on lance le sendError sinon le sendRedirect.

    Méthode js :

    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
     
    function updateProfiles() {
    	new Ajax.Updater('profiles', './search.do', {
    		parameters: {
    			action: 'updateProfiles'
    		},
    		onCreate: function() {
    			$('prlLoader').show();
    		},
    		onComplete: function() {
    			$('prlLoader').hide();
    		},
                    onFailure: function() {
                            window.location.href='./login.do';
                    }
    	});
    }
    Méthode doFilter :

    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
     
    public void doFilter(final ServletRequest request, final ServletResponse response,
          final FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
     
        if (!entryURLs.contains(req.getServletPath())) {
          if (!req.isRequestedSessionIdValid()) {
            if (req.getHeader("x-requested-with") != null
                && (req.getHeader("x-requested-with")).equals("XMLHttpRequest")) {
              res.sendError(599, "Session timeout");
            } else {
              res.sendRedirect("./login.do");
            }
     
            return;
          }
        }
        chain.doFilter(request, response);
      }
    Bon je trouve pas ça top top mais bon ça marche pour l'instant, si quelqu'un trouve quelque chose de bien plus propre je suis preneur ! (je laisse à non résolu encore quelques jours au cas où...)

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [script.aculo.us] Appel Ajax dans Ajax
    Par guiltouf dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 22/05/2007, 12h29
  2. [Dojo] Simple data grid sans appel Ajax
    Par Den's dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 14/12/2006, 08h23
  3. [AJAX] appel Ajax DOM
    Par MALAGASY dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/09/2006, 13h16
  4. [AJAX] Effectuer plusieur appel ajax
    Par shwin dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/10/2005, 16h40
  5. [Struts]2 Threads identiques quand j'appelle une action
    Par seb55555 dans le forum Struts 1
    Réponses: 4
    Dernier message: 03/05/2005, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo