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 :

Problème de filtre pour une application struts.


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut Problème de filtre pour une application struts.
    Bonsoir à tous.

    J'ai un petit problème, en effet j'ai une application struts dans laquel j'aimerais mettre un filtre associé à toutes mes actions pour me signaler lorsque la session de l'utilisateur en cours s'est terminée.
    Si la session est nul alors mon filtre redirige vers une page jsp d'erreur en proposant à l'utilisateur de revenir sur la page d'accueil.

    Je fait donc un filtre assez simple, j'utilise 2 methode assez assez similaire pour faire la redirection mais les deux ne marchent pas.

    solution1 avec le sendRedirect pour faire la redirection.

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    package org.stirm2.miniProjet.actions;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import org.stirm2.miniProjet.helpers.ServletHelper;
     
    public class FiltreSession implements Filter {
     
    	public void destroy() {
     
    	}
     
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    	throws IOException, ServletException {
    		/**
                     * Ce filtre est associé à toutes les action struts du projet (*.do)
                     * son but est de rediriger vers une page d'erreur lorsque la session
                     * de l'utilisateur expire.
                     */
     
    		/**
                     * cast qui va permettre d'utiliser, de manipuler les objet HttpServletRequest et
                     * HttpServletResponse comme si nous etions dans une servlet.
                     */
    		HttpServletRequest req = (HttpServletRequest)request ;
    		HttpServletResponse resp = (HttpServletResponse)response ;
     
    		/**
                     * Permet de récuperer la session en cours
                     */
    		HttpSession session = req.getSession() ;     
     
    		/**
                     * lorsque la session dans l'une des actions saura expiré alors 
                     * ce code permettra au systeme d'afficher un message d'erreur           
                     * et proposer a l'utilisateur de revenir sur la page d'accueil.
                     */
    		if (session == null) {
    			resp.sendRedirect("/erreurSession.jsp") ;    
    		}
    	}
     
    	public void init(FilterConfig fc) throws ServletException {
    		ServletContext context = fc.getServletContext() ;
    		/**
                     * Permettra juste si le filtre a fonctionné d'afficher un message
                     * dans le fichier log de notre web Application.
                     */
    		context.log("bonjour") ;
    	}
     
    }
    2 eme solution.

    je creer tout d'abord une classe a part que j'appelle ServletHelper.

    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
     
    package org.stirm2.miniProjet.helpers ;
     
    import java.io.IOException;
     
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class ServletHelper {
     
    	/**
             * Méthode helper permettant de rediriger une requête vers une ressource passée en 
             * paramètre. 
             * @param url l'url de la ressource
             * @param req la requête
             * @param resp la réponse
             * @throws ServletException
             * @throws IOException
             */
    	public static void redirection(String url, HttpServletRequest req, HttpServletResponse resp) 
    	throws ServletException, IOException {
    		ServletContext application = req.getSession().getServletContext() ;
    		RequestDispatcher rd = application.getRequestDispatcher(url) ;
    		rd.forward(req, resp) ;
    	}
    }
    Et ensuite dans mon filtre.

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    package org.stirm2.miniProjet.actions;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import org.stirm2.miniProjet.helpers.ServletHelper;
     
    public class FiltreSession implements Filter {
     
    	public void destroy() {
     
    	}
     
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    	throws IOException, ServletException {
    		/**
                     * Ce filtre est associé à toutes les action struts du projet (*.do)
                     * son but est de rediriger vers une page d'erreur lorsque la session
                     * de l'utilisateur expire.
                     */
     
    		/**
                     * cast qui va permettre d'utiliser, de manipuler les objet HttpServletRequest et
                     * HttpServletResponse comme si nous etions dans une servlet.
                     */
    		HttpServletRequest req = (HttpServletRequest)request ;
    		HttpServletResponse resp = (HttpServletResponse)response ;
     
    		/**
                     * Permet de récuperer la session en cours
                     */
    		HttpSession session = req.getSession() ;     
     
    		/**
                     * lorsque la session dans l'une des actions saura expiré alors 
                     * ce code permettra au systeme d'afficher un message d'erreur           
                     * et proposer a l'utilisateur de revenir sur la page d'accueil.
                     */
    		if (session == null) {
    			//resp.sendRedirect("/erreurSession.jsp") ;    
    			ServletHelper.redirection("/erreurSession.jsp", req, resp) ;
    		}
    	}
     
    	public void init(FilterConfig fc) throws ServletException {
    		ServletContext context = fc.getServletContext() ;
    		/**
                     * Permettra juste si le filtre a fonctionné d'afficher un message
                     * dans le fichier log de notre web Application.
                     */
    		context.log("bonjour") ;
    	}
     
    }
    web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <filter>
    		<filter-name>filtre-sess</filter-name>
    		<filter-class>org.stirm2.miniProjet.actions.FiltreSession</filter-class>
    	</filter>
     
    	<filter-mapping>
    		<filter-name>filtre-sess</filter-name>
    		<url-pattern>*.do</url-pattern>
    	</filter-mapping>
    Pour tester je mets par exemple un time Out a 3 minute.
    Lorsque je lance ma premiere action, j'ai directement une page blanche dans les 2 cas.
    Peut etre que des le depart il voit un objet session comme étant nul et peut etre qu'ensuite il bloque au niveau de la redirection.

    Normalement les 2 types de redirection devrait bien marcher (elle marchait bien quand je travaillais sur les servlets).

    Donc voila je ne sais trop, si quelqu'un voit un probleme ce serait sympa qu'il puisse m'aider. Merci d'avance

    Cordialement.

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Ah mon avis si tu as une page blanche c'est que ta redirection fonctionne mais que dommage pour toi il ne trouve pas t'es page jsp!!

    Vérifié en debuggant l'url complete à laquelle il essaye d'accéder.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resp.sendRedirect("/erreurSession.jsp") ;
    Je doute fort que le slash devant soit une bonne idée ou bien il faut que tu rajoute aussi le contexte de ton application!!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut
    Bonjour maxf1.

    Tout d'abord je tenais à te remercier pour ton aide. Tu es une personne qui apporte volontier son aide aux autres te je trouve ca tres sympa.

    En effet tu as je pense que tu as raison en ce qui concerne le sendRedirect je vais essayer avec l'url complete en precisant le contexte de l'application.

    Par contre pour la deuxieme solution avec le ServletHelper je suis sur a 100% sur que c'est comme ca qu'il faut ecrire l'url, je l'ai fait mainte et mainte fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ServletHelper.redirection("/erreurSession.jsp", req, resp) ;
    Donc je vais essayer cela et je te tiendrai au courant de la tournure des évenements.

    bon courage

    Cordialement.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut
    bonjour maxf1.

    je viens de trouver une de mes erreurs, en effet je ne faisait pas le bon test. Je ne récuperais pas la session de l'utilisateur en cours.

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    package org.stirm2.miniProjet.actions;
     
     
     
    import java.io.IOException;
     
     
     
    import javax.servlet.Filter;
     
    import javax.servlet.FilterChain;
     
    import javax.servlet.FilterConfig;
     
    import javax.servlet.ServletContext;
     
    import javax.servlet.ServletException;
     
    import javax.servlet.ServletRequest;
     
    import javax.servlet.ServletResponse;
     
    import javax.servlet.http.HttpServletRequest;
     
    import javax.servlet.http.HttpServletResponse;
     
    import javax.servlet.http.HttpSession;
     
     
     
    import org.stirm2.miniProjet.beans.ConnexionForm;
     
    import org.stirm2.miniProjet.helpers.ServletHelper;
     
     
     
    public class FiltreSession implements Filter {
     
     
     
    	public void destroy() {
     
     
     
    	}
     
     
     
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
     
    	throws IOException, ServletException {
     
    		/**
     
                     * Ce filtre est associé à toutes les action struts du projet (*.do)
     
                     * son but est de rediriger vers une page d'erreur lorsque la session
     
                     * de l'utilisateur expire.
     
                     */
     
     
     
    		/**
     
                     * cast qui va permettre d'utiliser, de manipuler les objet HttpServletRequest et
     
                     * HttpServletResponse comme si nous etions dans une servlet.
     
                     */
     
    		HttpServletRequest req = (HttpServletRequest)request ;
     
    		HttpServletResponse resp = (HttpServletResponse)response ;
     
     
     
    		/**
     
                     * Permet de récuperer la session en cours
     
                     */
     
    		HttpSession session = req.getSession() ;     
     
     
     
    		/**
     
                     * lorsque la session dans l'une des actions aura expiré alors 
     
                     * ce code permettra au systeme d'afficher un message d'erreur           
     
                     * et proposer a l'utilisateur de revenir sur la page d'accueil.
     
                     */
     
     
     
    		//Permet de recuperer l'utilisateur en cours
     
    		ConnexionForm utilisateur  = (ConnexionForm)session.getAttribute("connexion.utilisateur") ;
     
     
     
    		/*
     
    		if (session.getAttribute() == null) {
     
    			//resp.sendRedirect("/erreurSession.jsp") ;    
     
    			ServletHelper.redirection("/erreurSession.jsp", req, resp) ;
     
    		}
     
    		 */
     
     
     
    		if (utilisateur == null) {
     
    			ServletHelper.redirection("/erreurSession.jsp", req, resp) ;  
     
    		}
     
     
     
    	}
     
     
     
    	public void init(FilterConfig fc) throws ServletException {
     
    		ServletContext context = fc.getServletContext() ;
     
    		/**
     
                     * Permettra juste si le filtre a fonctionné d'afficher un message
     
                     * dans le fichier log de notre web Application.
     
                     */
     
    		context.log("bonjour") ;
     
    	}
     
     
     
    }
    Donc cette fois ci la redirection se fait tres bien avec la ServletHelper mais le probleme est que lorsque je lance ma premiere action, j'ai directement la page jsp d'erreur.

    En fait lors de ma premiere il considere que la session de l'utilisateur est nul, il reste donc ensuite bloqué sur cette page.

    Je ne devrait peut etre pas l'associer à toutes mes actions.

    Si tu as une idee la dessus fait moi signe STP.

    Merci d'avance.

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Ah oui la premiere fois obligatoirement l'utilisateur sera null, a moins que tu n'initialise ta variable user par quelque chose.

    Sur ta page d'erreur tu devrais faire un bouton qui le renvoi vers la page de login par exemple et qui lui initialiserais la variable utilisateur ou mettrais un boolean a true pour dire a ton action ok, la session a expiré mais le user le sais et il veut se logguer.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut
    Merci pour ton aide.

    Je vais voir ce que je peux faire

Discussions similaires

  1. Problème de conception pour une application d "Audit"
    Par Jcdas dans le forum Modélisation
    Réponses: 3
    Dernier message: 05/11/2008, 20h13
  2. Réponses: 2
    Dernier message: 14/12/2007, 10h43
  3. Problème au lancement d'une application Struts
    Par sylsau dans le forum Struts 1
    Réponses: 2
    Dernier message: 17/09/2007, 18h59
  4. Réponses: 3
    Dernier message: 15/06/2007, 18h14
  5. [MySQL] Problème de tri pour une application
    Par nanor21 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 11/05/2006, 19h08

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