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

Servlets/JSP Java Discussion :

Ajout de param dans le HEADER avec javax.servlet.Filter et javax.servlet.http.HttpServletRequestWrapper


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Ajout de param dans le HEADER avec javax.servlet.Filter et javax.servlet.http.HttpServletRequestWrapper
    Bonjour je ne comprend pas pourquoi ca ne fonctionne pas.

    Ce code me créé bien 2 headers :

    MY-HEADER-X2
    MY-HEADER-X1

    mais sans les valeurs ("header 1","header 2") que je lui est précisé.

    Voici mon code avec : RequestHeaderFilter implements javax.servlet.Filter
    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
     
    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 RequestHeaderFilter implements Filter {
    	public void destroy() {
     
    	}
     
    	public void doFilter(ServletRequest servletRequest,
    			ServletResponse servletResponse,
     
    			FilterChain filterChain) throws IOException, ServletException {
     
    		FakeHeadersRequest httpReq    = new FakeHeadersRequest((HttpServletRequest)servletRequest);
    		          HttpServletResponse    httpRes   = (HttpServletResponse)servletResponse;
     
    		          HttpSession session = httpReq.getSession();
     
    		          httpReq.addHeader("MY-HEADER-X1", "header 1");
    		          httpReq.addHeader("MY-HEADER-X2", "header 2");
     
    		          filterChain.doFilter(httpReq, httpRes);
     
    	}
     
    	public void init(FilterConfig filterConfig) throws ServletException {
     
    	}
     
    }
    et mon FakeHeadersRequest extends HttpServletRequestWrapper

    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
     
    import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletRequestWrapper;
      import java.util.*;
     
      public class FakeHeadersRequest extends HttpServletRequestWrapper{
     
          private Map headerMap;
     
         public void addHeader(String name, String value){
             headerMap.put(name, new String(value));
         }
     
         public FakeHeadersRequest(HttpServletRequest request){
             super(request);
             headerMap = new HashMap();
         }
     
         public Enumeration getHeaderNames(){
     
             HttpServletRequest request = (HttpServletRequest)getRequest();
     
             List list = new ArrayList();
     
             for( Enumeration e = request.getHeaderNames() ; e.hasMoreElements() ;)
                 list.add(e.nextElement().toString());
     
             for( Iterator i = headerMap.keySet().iterator() ; i.hasNext() ;){
                 list.add(i.next());
             }
     
             return Collections.enumeration(list);
         }
     
         public String getHeader(String name){
             Object value;
             if((value = headerMap.get(""+name)) != null)
                 return value.toString();
             else
                 return ((HttpServletRequest)getRequest()).getHeader(name);
     
         }
    Mon appli tourne sous TOMCAT 6

    Quelqu'un à une idée du problème ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Comment vérifies tu les valeurs ?
    Es-tu sûr de passer dans ton filtre ?

    Pour information il manque la surcharge des méthodes suivantes :

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Je vérifie mes valeurs avec ceci dans une page JSP :

    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
     
    .......
    <%
    Enumeration enTetes = request.getHeaderNames();
    out.print("<table><tbody>");
    while (enTetes.hasMoreElements()) {
            String enTete = (String) enTetes.nextElement();
            
            out.print("<tr><td>"+enTete.toUpperCase() + "</td>");
            
            Enumeration headers = request.getHeaders(enTete);
            while (headers.hasMoreElements()) {
                    String header = (String) headers.nextElement();
                    out.print("<td>"+ header + "</td></tr>");
            
            }
     
     
            
    }
    out.print("</tbody></table>");
    %>
    ...........
    Je passe bien par mon filtre car dans ma JSP qui vérifie les valeurs, je vois ceci :

    HOST localhost:8080
    CONNECTION keep-alive
    CACHE-CONTROL max-age=0
    USER-AGENT Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24
    ACCEPT application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    ACCEPT-ENCODING gzip,deflate,sdch
    ACCEPT-LANGUAGE fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    ACCEPT-CHARSET ISO-8859-1,utf-8;q=0.7,*;q=0.3
    MY-HEADER-X2
    MY-HEADER-X1


    Par contre je ne surcharge pas les méthodes que tu as cité.

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Justement tu utilises la méthode getHeaders !

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Désolé mais je ne comprend pas ta remarque.
    Qu'est ce qui ne va pas avec la méthode getHeaders ?

    Il faut que je la surcharge avec un code spécifique ?
    Je pensais que la méthode getHeaders de base de javax.servlet.http.HttpServletRequestWrapper allait convenir parfaitement.

    Est ce que tu peux m'en dire un peu plus ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    Tu utilises la méthode "getHeaders" alors que tu ne le rédéfinies pas, donc c'est la méthode "getHeaders" de la requête encapsulée qui est appelée et qui ne connaît pas des entêtes.

    Le principe d'un wrapper c'est d'appeler la même méthode sur l'objet encapsuler.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci pour tes réponses, je n'avais pas bien compris le principe.
    J'ai donc ajouté une méthode getHeaders à mon HttpServletRequestWrapper comme ceci :

    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
     
    @Override
    	public java.util.Enumeration<java.lang.String> getHeaders(String name) {
     
    		HttpServletRequest request = (HttpServletRequest) getRequest();
     
    		List list = new ArrayList();
     
    		for (Enumeration e = request.getHeaders(name); e.hasMoreElements();)
    			list.add(e.nextElement().toString());
     
    		if(headerMap.get(name) != null)
    			list.add((String) headerMap.get(name));
     
     
    		return Collections.enumeration(list);
     
    	}

    En résultat j'ai donc ceci :


    HOST localhost:8080
    CONNECTION keep-alive
    CACHE-CONTROL max-age=0
    USER-AGENT Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24
    ACCEPT application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    ACCEPT-ENCODING gzip,deflate,sdch
    ACCEPT-LANGUAGE fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    ACCEPT-CHARSET ISO-8859-1,utf-8;q=0.7,*;q=0.3
    MY-HEADER-X2 header 2
    MY-HEADER-X1 header 1

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

Discussions similaires

  1. [AJAX] Ajout de lignes dans une table avec Ajax
    Par Tententai dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/11/2007, 16h54
  2. [MySQL] Ajouter des données dans une table avec la cmd update
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/09/2007, 20h54
  3. Ajouter un PC dans Active Directory avec Active Directory manuellement
    Par arnaudperfect dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 18/09/2007, 16h24
  4. Réponses: 12
    Dernier message: 12/03/2007, 17h58
  5. Ajouter des champ dans une table avec une procedure sp
    Par Abdou1 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/07/2006, 19h32

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