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

Développement Web en Java Discussion :

Le filtre bloque mes servlets


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut Le filtre bloque mes servlets
    Bonjour

    J'ai une application JEE qui contient une page Login permettant à l'utilisateur de se connecter, et une autre page "ajouter_livre.jsp" permettant d'ajouter dans la base de données, des informations concernant des livres.

    J'ai placé la page "ajouter_livre.jsp" dans un répertoire nommé "espace_membre" à la racine de mon application, et j'y ai appliqué un filtre pour autoriser seulement les utilisateurs connectés à ajouter des livres dans la BD:

    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
    package filters;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    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;
     
    public class RestrictionFilter implements Filter {
        public static final String ACCES_CONNEXION  = "/login.jsp";
        public static final String ATT_SESSION_USER = "sessionUtilisateur";
     
        public void init( FilterConfig config ) throws ServletException {
        }
     
        public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException,
                ServletException {
            /* Cast des objets request et response */
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
     
            /* Non-filtrage des ressources statiques */
            String chemin = request.getRequestURI().substring( request.getContextPath().length() );
            if ( chemin.startsWith( "/assets" ) ) {
                chain.doFilter( request, response );
                return;
            }
     
            /* Récupération de la session depuis la requête */
            HttpSession session = request.getSession();
     
            /**
             * Si l'objet utilisateur n'existe pas dans la session en cours, alors
             * l'utilisateur n'est pas connecté.
             */
            if ( session.getAttribute( ATT_SESSION_USER ) == null ) {
                /* Redirection vers la page publique */
               // request.getRequestDispatcher( ACCES_CONNEXION ).forward( request, response );
               request.getRequestDispatcher( ACCES_CONNEXION ).forward( request, response );
            } else {
                /* Affichage de la page restreinte */
                chain.doFilter( request, response );
            }
        }
     
        public void destroy() {
        }
    }
    Voici mon web.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <filter>
    	<filter-name>RestrictionFilter</filter-name>
    	<filter-class>filters.RestrictionFilter</filter-class>
    </filter>
    <filter-mapping>
    	<filter-name>RestrictionFilter</filter-name>
    	<url-pattern>/espace_membre/*</url-pattern>
    </filter-mapping>
    Au niveau de la page login.jsp tout se passe bien, j'arrive à me connecter. Sauf qu'au niveau de l'ajout, l'appel à ma servlet AjoutLivre ne marche pas:

    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
    <form name="form1" id="form1" action="AjoutLivre " method="post">
                    <br>
     
                    <div class="input-group pan_file">
                                    <span class="input-group-addon span_mois">Titre:</span>
                                    <input class="form-control" type="text" name="titre" >
                                    <span class="erreur erreur_titre"></span>
                            </div>                                
                                    <br>
     
                            <div class="input-group pan_file">
                                    <span class="input-group-addon ">Prix :</span>
                                    <input class="form-control" type="text" name="prix" >
                                    <span class="erreur erreur_prix"></span>
                            </div>
     
     
                            <button type="button" class="btn btn-success btn_valider">Envoyer</button>
            <p id="result"></p>	
            </form>
    Quand je clique sur le bouton valider, rien ne se produit, comme si la servlet AjoutLivre n'existait pas. Mais quand j'enlève le filtre, j'arrive à joindre la servlet.

    C'est apparemment le filtre qui cause le blocage.

    Merci

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 869
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 869
    Par défaut
    Bonjour,

    Je te conseille 2 choses :
    • Premièrement, mettre des logs à l'entrée et à la sortie de tes filtres afin de savoir si tu y entres et comment tu en sors, en général ça permet de rapidement déceler un potentiel problème de logique
    • Lancer ton projet en mode debug, mettre un point d'arrêt dans ton filtre afin de voir si le comportement de ton application est bien celui que tu attends


    Question : pourquoi est-ce que ton filtre n'est appliqué que à "/espace_membre/*" ? Il ne sera alors peut-être pas appelé par ailleurs, peut-être que la cause du problème cité vient de là ?

    A+

  3. #3
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    Salut,
    ou bien tu fais comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <button type="submit" class="btn btn-success btn_valider">Envoyer</button>
    car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <button type="button" class="btn btn-success btn_valider">Envoyer</button>
    n´a pas un comportement par defaut (celui d´envoyer le formulaire)

    Eric

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Ok j'ai essayé avec "submit" et ça a l'air de marcher, sauf que là j'ai au moins un message d'erreur qui dit que la servlet est introuvable:

    État HTTP 404 – Not Found

    Type Rapport d''état

    message /MonAppli/espace_membre/ajoutLivre

    description La ressource demandée n''est pas disponible.
    Mais ce que je ne comprends pas, pourquoi le chemin vers la servlet est:

    /MonAppli/espace_membre/ajoutLivre
    Au lieu de:

    /MonAppli/ajoutLivre
    voici l'annotation de ma servlet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @WebServlet(name = "AjoutLivre", urlPatterns = {"/ajoutLivre"})
    public class AjoutLivre extends javax.servlet.http.HttpServlet
    {
    ...
     
    }
    Et mon formulaire:

    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
    <form name="form1" id="form1" action="ajoutLivre " method="post">
                    <br>
     
                    <div class="input-group pan_file">
                                    <span class="input-group-addon span_mois">Titre:</span>
                                    <input class="form-control" type="text" name="titre" >
                                    <span class="erreur erreur_titre"></span>
                            </div>                                
                                    <br>
     
                            <div class="input-group pan_file">
                                    <span class="input-group-addon ">Prix :</span>
                                    <input class="form-control" type="text" name="prix" >
                                    <span class="erreur erreur_prix"></span>
                            </div>
     
     
                            <button type="button" class="btn btn-success btn_valider">Envoyer</button>
            <p id="result"></p>	
            </form>

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Ok ça marche, il fallait utiliser la balise <c:url> pour indiquer le chemin de ma servlet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="form1" id="form1" action="<c:url value="/ajoutLivre"/>" method="post">
    Merci

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

Discussions similaires

  1. Problème d'utilisation des threads dans mes servlets
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/08/2007, 19h34
  2. Où mettre mes servlets et JSP
    Par mamata dans le forum JOnAS
    Réponses: 1
    Dernier message: 05/12/2006, 10h25
  3. ZoneAlarm bloque mes variables de session PHP en local
    Par GritNatz dans le forum Sécurité
    Réponses: 3
    Dernier message: 24/06/2006, 14h20
  4. [Débutant] Eclipse mélange mes servlets
    Par kennie77 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/11/2005, 11h15
  5. [JS][XP] Le SP2 bloque mes scripts, comment eviter sa?
    Par Devil666 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/04/2005, 12h29

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