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 :

ServletFilter : logger le contenu de la request/response


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut ServletFilter : logger le contenu de la request/response
    Bonjour,

    J'ai besoin de savoir comment je peux récupérer le contenu d'une requête (httpRequest) et de la réponse (httpResponse) dans une ServletFilter.

    voici une partie du code de mon Filtre, comme vous voyez je récupère l'URL, mais mon besoin c'est de logger tout le contenu de la requete et de sa réponse. merci !
    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
     
    public class TrackerFilter implements Filter {
     
    	private final static Logger LOG = Logger.getLogger(TrackerFilter.class);
            private Manager manager;
     
    	public void destroy() {
    		// TODO Auto-generated method stub
     
    	}
     
    	public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain filterChain) throws IOException, ServletException {
     
    		String url= "";
     
            try {
            	url = ((HttpServletRequest) request).getRequestURI();
            } catch (Exception ex) {
            }
            LOG.debug(url);
            filterChain.doFilter(request, response);
    	}
     
    	public void init(FilterConfig filterConfig) throws ServletException {
    		manager = Manager.getInstance();
    	}
     
    }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Points : 468
    Points
    468
    Par défaut
    Comme tu as acces à la request et à la response tu peux récuperer toutes les infos dont tu as besoin (avec les getters) et les logger :

    http://java.sun.com/products/servlet...etRequest.html

    http://java.sun.com/products/servlet...tResponse.html (Methods inherited from interface javax.servlet.ServletResponse)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    Justement il n'y a aucune méthode qui permet de récupérer le contenu de la requête ni de la réponse.
    pour la requête je pense qu'il est possible de faire une lecture au niveau du request.getInputStream() à l'aide d'un BufferedReader par contre pour la réponse on a que le response.getOutputStream()!!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Points : 468
    Points
    468
    Par défaut
    qu'est-ce que tu appelles "le contenu" de la request.

    Tu peux faire un getParameterMap(), getParameterNames(), getHeaderNames(), getCookies() etc...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    le contenu de la requête, c'est tout le flux http.
    par exemple pour récupérer la requête j'utilise la méthode suivante :

    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 String getRequestContent(HttpServletRequest requete) {
    		StringBuffer str = new StringBuffer("");
    		String stri= "";
            try {        	
                BufferedReader in = new BufferedReader(new InputStreamReader(requete.getInputStream()));           
     
                while ((stri = in.readLine()) != null) {
                	str.append(stri);
                }
                in.close();
            } catch (MalformedURLException e1) {
            } catch (IOException e2) {
            }
            return str.toString();
    	}
    qui est appelé au niveau de 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
    17
     
    public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain filterChain) throws IOException, ServletException {
     
    		String fromURL = "";     
    		HttpServletRequest requete = null;
     
            try {      	
            	fromURL = requete.getRequestURL().toString(); 
            } catch (Exception ex) {
            }
     
    		manager.startPerformanceRecording(fromURL);
    		LOG.debug("Requete = " + getRequestContent(requete));
    		filterChain.doFilter(request, response);				
                    manager.stopPerformanceRecording();        
    	}
    Par contre je ne sais pas comment je peux récupérer la réponse??!

    à titre d'information, j'utilise ce filtre pour tracer les requêtes/réponses d'un web services.

  6. #6
    Membre éclairé Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Points : 882
    Points
    882
    Par défaut
    Dans doFilter, une fois le chaînage appelé, tu as l'objet resposnequi est toujours disponible. Tu peux l'utiliser pour logger se que tu veux de celui-ci.

    Genre (et en restant dans ta logique -avec getResponseContent(Response) à créer ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    manager.startPerformanceRecording(fromURL);
    LOG.debug("Requete = " + getRequestContent(requete));
    filterChain.doFilter(request, response);
    LOG.debug("Reponse = " + getResponseContent(reponse));
    manager.stopPerformanceRecording();

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    oui voilà c'est ça l'idée !, maintenant je reviens sur ma question, comment faire pour récupérer le contenu de la response ? c'est à dire l'implémentation de la méthode getResponseContent(reponse).

    Pour la requête on peut lire son contenu à l'aide d'un requete.getInputStream() par contre pour la réponse on trouve seulement requete.getOutputStream() qui permet seulement de modifier la ServletResponse!!

  8. #8
    Membre éclairé Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Points : 882
    Points
    882
    Par défaut
    Tu entends quoi en disant :
    comment faire pour récupérer le contenu de la response
    Exemples:
    - lire le flot de sorti
    - connaître le type mime rendu...

    Car l'objet HttpServeltResponse contient toutes les infos voulues pour le rendu, et le reste... ben non (principe de l'objet).

    Je rappel que les paramètres n'existent pas dans cet objet.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    - lire le flot de sorti
    c'est exactement ce que j'ai essayé de faire mais sans trouver la bonne méthode qui permet de lire un flux d'écriture OutputStream !!

    as tu une idée de comment faire ? (un bout de code)

Discussions similaires

  1. Post HTTP Request & response
    Par Landolsi dans le forum Sybase
    Réponses: 1
    Dernier message: 11/11/2013, 14h42
  2. Request response object.
    Par zalalus dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/10/2011, 20h58
  3. Request, Response, cookies et Webservices?
    Par BouB dans le forum Services Web
    Réponses: 1
    Dernier message: 15/05/2008, 13h01
  4. Contenu de la request
    Par la7su dans le forum JSF
    Réponses: 2
    Dernier message: 23/04/2008, 12h04
  5. Modification du contenu d'un Request() ??
    Par nesbla dans le forum ASP
    Réponses: 5
    Dernier message: 05/07/2005, 14h31

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