{"id":910,"date":"2018-09-17T18:17:23","date_gmt":"2018-09-17T09:17:23","guid":{"rendered":"https:\/\/chat-messenger.com\/?p=910"},"modified":"2018-12-23T02:01:26","modified_gmt":"2018-12-22T17:01:26","slug":"http-log-filter","status":"publish","type":"post","link":"https:\/\/chat-messenger.com\/fr\/blog\/java\/filtre-de-journal-http","title":{"rendered":"Analyser HTTP avec le filtre de journal Java"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Analyser les requ\u00eates HTTP avec les filtres de journaux Java<\/a><\/h2>\n<p>\n<strong>javax.servlet.Filter<\/strong>Un moyen pratique d&#039;impl\u00e9menter et d&#039;analyser le contenu des requ\u00eates HTTP et des journaux de sortie.<strong>Filtre<\/strong>Pr\u00e9sentation de la classe.<br \/>\n<br \/>\nCe filtre de journal utilise \u00ab\u00a0java.util.logging.Logger\u00a0\u00bb pour la sortie du journal et vous pouvez modifier la sortie des informations en modifiant le niveau de journalisation.\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">Qu&#039;est-ce que javax.servlet.Filter\u00a0?<\/a><\/h2>\n<p>\nLors de la cr\u00e9ation d&#039;une application Web, en plus du traitement m\u00e9tier principal, il est n\u00e9cessaire d&#039;effectuer un traitement secondaire commun avant et apr\u00e8s le traitement m\u00e9tier principal.<br \/>\nPar exemple, l&#039;authentification du client, la v\u00e9rification des autorit\u00e9s, la journalisation, etc.<br \/>\nLe codage d&#039;un tel traitement secondaire dans chaque ressource devient une cause majeure d&#039;entrave \u00e0 la maintenabilit\u00e9 du logiciel, ce qui se traduit par une application difficile \u00e0 maintenir.<\/p>\n<p>En impl\u00e9mentant javax.servlet.Filter, vous pouvez g\u00e9n\u00e9ralement effectuer ce traitement secondaire avant que la requ\u00eate ne soit transmise \u00e0 la classe servlet.<br \/>\nDe plus, \u00e9tant donn\u00e9 que les param\u00e8tres de filtre peuvent \u00eatre d\u00e9finis dans web.xml, vous pouvez ajouter ou supprimer des filtres de mani\u00e8re flexible sans modifier le code source.\n<\/p>\n<p><script type=\"text\/javascript\" src=\"https:\/\/chat-messenger.com\/js\/common.js?dd12sssas2223\" charset=\"UTF-8\"><\/script><br \/>\n<script type=\"text\/javascript\"> writePR(); <\/script><\/p>\n<h2 class=\"common_title\"><a name=\"2\">Essayez d&#039;utiliser un filtre de journal<\/a><\/h2>\n<p>Utilisons en fait un filtre de journal pour filtrer les requ\u00eates HTTP et les analyser.<br \/>\nCette fois<a href=\"http:\/\/tomcat.apache.org\/\" target=\"_blank\">Matou<\/a>Nous utiliserons l\u2019application d\u2019exemples disponible d\u00e8s le d\u00e9but.<br \/>\nVous pouvez ex\u00e9cuter ce filtre imm\u00e9diatement en d\u00e9finissant les param\u00e8tres suivants.<\/p>\n<div class=\"point\">\n1.<a href=\"#4\"><strong>Code source<\/strong><\/a>Obtenez et compilez.<br \/>\n2. Placez le fichier de classe compil\u00e9 sous &quot;\/examples\/WEB-INF\/classes&quot;.<br \/>\n3.D\u00e9finissez la d\u00e9finition suivante dans web.xml.\n<\/div>\n<pre class=\"sample_src\">  Filtre de journal Filtre de journal journalisation.Niveau BIEN Filtre de journal \/*\r\n<\/pre>\n<p>*Le mod\u00e8le d&#039;URL lors de l&#039;utilisation du framework Struts est le suivant.<\/p>\n<pre class=\"sample_src\">   *.faire\r\n<\/pre>\n<p>\nVeuillez v\u00e9rifier les r\u00e9sultats de sortie du journal lors de l&#039;ex\u00e9cution de l&#039;\u00e9cran Exemple de sessions.<br \/>\n<img src=\"https:\/\/chat-messenger.com\/images\/SessionsExample.jpg\" alt=\"Analyse d&#039;application Web avec le filtre de journal javax.servlet.Filter\" border=\"0\"><br \/>\n<br clear=\"all\"><\/p>\n<h2 class=\"common_title\"><a name=\"3\">Informations du journal de sortie et niveau de journalisation<\/a><\/h2>\n<p><strong>\u25cfContenu de la sortie du journal<\/strong><\/p>\n<table border=\"1\">\n<tbody>\n<tr bgcolor=\"#FFFF80\">\n<th>Informations du journal<\/th>\n<th>niveau de journalisation<\/th>\n<\/tr>\n<tr>\n<td><strong>Informations sur les cookies<\/strong><\/td>\n<td>BIEN<\/td>\n<\/tr>\n<tr>\n<td><strong>Informations sur l&#039;en-t\u00eate HTTP<\/strong><\/td>\n<td>BIEN<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTPAutres informations<\/strong><\/td>\n<td>BIEN<\/td>\n<\/tr>\n<tr>\n<td><strong>Param\u00e8tres de requ\u00eate HTTP<\/strong><\/td>\n<td>CONFIGURATION<\/td>\n<\/tr>\n<tr>\n<td><strong>objet de port\u00e9e de la demande<\/strong><\/td>\n<td>CONFIGURATION<\/td>\n<\/tr>\n<tr>\n<td><strong>objet de port\u00e9e session<\/strong><\/td>\n<td>CONFIGURATION<\/td>\n<\/tr>\n<tr>\n<td><strong>Utilisation de la m\u00e9moire avant et apr\u00e8s les requ\u00eates<\/strong><\/td>\n<td>CONFIGURATION<\/td>\n<\/tr>\n<tr>\n<td><strong>Informations sur la transition d&#039;\u00e9cran<\/strong><\/td>\n<td>INFO<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<p>Il est pr\u00e9f\u00e9rable d&#039;utiliser les niveaux de journalisation comme suit.<\/p>\n<ul>\n<li>FINE\u00a0: g\u00e9n\u00e8re le journal le plus d\u00e9taill\u00e9. D\u00e9finissez ceci si vous souhaitez analyser la requ\u00eate HTTP en d\u00e9tail.<\/li>\n<li>CONFIG... Produit un journal quelque peu d\u00e9taill\u00e9. C&#039;est une bonne id\u00e9e de le maintenir \u00e0 ce niveau pendant la p\u00e9riode de d\u00e9veloppement.<\/li>\n<li>INFO\u00a0: \u00c9met uniquement les informations de transition d\u2019\u00e9cran.<\/li>\n<\/ul>\n<p><strong>\u25cfComment modifier le niveau de journalisation<\/strong><br \/>\nVous pouvez modifier le niveau de sortie du journal en d\u00e9finissant le param\u00e8tre d&#039;initialisation logging.Level.<br \/>\nexemple:<\/p>\n<pre class=\"sample_src\">   journalisation.Niveau INFO\r\n<\/pre>\n\n<h2 class=\"common_title\"><a name=\"4\">Code source<\/a><\/h2>\n<p><textarea readonly=\"readonly\" style=\"font-size: 13px;height: 400px;\" class=\"src\" onclick=\"this.focus();this.select()\">import java.io.IOException;<br \/>\nimport java.io.UnsupportedEncodingException;<br \/>\nimport java.sql.Time;<br \/>\nimport java.text.DecimalFormat;<br \/>\nimport java.text.SimpleDateFormat;<br \/>\nimport java.util.Date;<br \/>\nimport java.util.Enumeration;<br \/>\nimport java.util.Hashtable;<br \/>\nimport java.util.Iterator;<br \/>\nimport java.util.Map;<br \/>\nimport java.util.TreeMap;<br \/>\nimport java.util.logging.Formatter;<br \/>\nimport java.util.logging.Handler;<br \/>\nimport java.util.logging.Level;<br \/>\nimport java.util.logging.LogManager;<br \/>\nimport java.util.logging.LogRecord;<br \/>\nimport java.util.logging.Logger;<br \/>\nimport java.util.logging.StreamHandler;<\/p>\n<p>importer javax.servlet.Filter\u00a0;<br \/>\nimporter javax.servlet.FilterChain\u00a0;<br \/>\nimporter javax.servlet.FilterConfig\u00a0;<br \/>\nimporter javax.servlet.ServletException\u00a0;<br \/>\nimporter javax.servlet.ServletRequest\u00a0;<br \/>\nimporter javax.servlet.ServletResponse\u00a0;<br \/>\nimporter javax.servlet.http.Cookie\u00a0;<br \/>\nimporter javax.servlet.http.HttpServletRequest\u00a0;<br \/>\nimporter javax.servlet.http.HttpServletResponse\u00a0;<br \/>\nimporter javax.servlet.http.HttpSession\u00a0;<\/p>\n<p>\/**<br \/>\n * Impl\u00e9mentez javax.servlet.Filter pour analyser le contenu des requ\u00eates HTTP et des journaux de sortie<br \/>\n * Classe de filtre.<br \/>\n *\/<br \/>\nla classe publique LogFilter impl\u00e9mente le filtre {<\/p>\n<p>    enregistreur statique priv\u00e9 enregistreur =<br \/>\n        Logger.getLogger(LogFilter.class.getName());<br \/>\n    cha\u00eene finale statique priv\u00e9e LINE_SEPA =<br \/>\n        System.getProperty(&quot;line.separator&quot;);<br \/>\n    cha\u00eene finale statique priv\u00e9e NEXT_PAGE = \u00ab LogFilter.NEXT_PAGE \u00bb\u00a0;<\/p>\n<p>    \/**<br \/>\n     * Initialisez ce filtre de journal.<br \/>\n     * Cartographie @param<br \/>\n     *\/<br \/>\n    public void init (mappage FilterConfig) {<br \/>\n        String str = mapping.getInitParameter(&quot;logging.Level&quot;);<br \/>\n        System.out.println(&quot;D\u00e9finir le niveau de journalisation sur &quot;+str+&quot;.&quot;);<br \/>\n        Niveau niveau = nul\u00a0;<br \/>\n        essayer {<br \/>\n            niveau = Niveau.parse(str);<br \/>\n        } attraper (Exception e) {<br \/>\n            e.printStackTrace();<br \/>\n            niveau = Niveau.INFO;<br \/>\n        }<br \/>\n        LogManager.getLogManager().reset();<br \/>\n        Gestionnaire handler = new CustomConsoleHandler();<br \/>\n        handler.setFormatter(nouveau CustomFormatter());<br \/>\n        handler.setLevel(niveau);<br \/>\n        logger.setLevel(niveau);<br \/>\n        logger.getParent().addHandler(handler);<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Il s&#039;agit d&#039;un filtre qui g\u00e9n\u00e8re des journaux.<br \/>\n     * @param request Requ\u00eate HTTP en cours de traitement<br \/>\n     * R\u00e9ponse @param R\u00e9ponse HTTP en cours de g\u00e9n\u00e9ration<br \/>\n     * @cha\u00eene param<br \/>\n     *\/<br \/>\n    public void doFilter (ServletRequest _request, ServletResponse _response,<br \/>\n            Cha\u00eene FilterChain) lance IOException, ServletException {<\/p>\n<p>        \/\/ --------------------&quot; Pr\u00e9traitement &quot;<br \/>\n        Requ\u00eate HttpServletRequest = (HttpServletRequest) _request\u00a0;<br \/>\n        R\u00e9ponse HttpServletResponse = (HttpServletResponse) _response\u00a0;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            enregistreur.config(<br \/>\n                &quot;============ Demande de d\u00e9marrage !!&quot;<br \/>\n                + \u00ab\u00a0ID du fil de discussion\u00a0:\u00a0\u00bb<br \/>\n                + Thread.currentThread().hashCode()<br \/>\n                + &#8221; ========================================================&#8221;);<br \/>\n        }<br \/>\n        \/\/ utilisation de la m\u00e9moire<br \/>\n        Cha\u00eene actionMemory = null\u00a0;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = getMemoryInfo(\u201d \u201d<br \/>\n                    + new Time(System.currentTimeMillis()) + \u201dDemande[pr\u00e9c\u00e9dent]\u201d);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(&quot;Informations sur les cookies&quot; + getCookieInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(&quot;Informations d&#039;en-t\u00eate HTTP&quot; + getHeadersInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            enregistreur<br \/>\n                    .fine(&quot;Autres informations HTTP&quot; + getRequestOtherInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            Cha\u00eene reqlog = getRequestParametersInfo(request);<br \/>\n            logger.config(&quot;Param\u00e8tres de requ\u00eate HTTP&quot; + reqlog);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config (&quot;objet de port\u00e9e de demande&quot;<br \/>\n                    + getRequestAttributeInfo(requ\u00eate));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            Cha\u00eene sessionlog = getSessionInfo(request,true);<br \/>\n            logger.config (&quot;objet de port\u00e9e de session (avant le traitement de la demande)&quot;<br \/>\n                    + journal de session);<br \/>\n        }<\/p>\n<p>        \/\/ appelle le filtre suivant<br \/>\n        chain.doFilter(demande, r\u00e9ponse);<\/p>\n<p>        \/\/ \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014- \u00ab Post-traitement \u00bb<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            Cha\u00eene sessionlog = getSessionInfo(request,false);<br \/>\n            logger.config (&quot;objet de port\u00e9e de session (apr\u00e8s traitement de la demande)&quot;<br \/>\n                    + journal de session);<br \/>\n        }<br \/>\n        \/\/ utilisation de la m\u00e9moire<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = \u201dUtilisation de la m\u00e9moire avant et apr\u00e8s la demande\u201d+LINE_SEPA<br \/>\n                    + actionM\u00e9moire + LINE_SEPA<br \/>\n                    + getMemoryInfo(\u201d \u201d + new Time (System.currentTimeMillis())<br \/>\n                            + \u201ddemande[apr\u00e8s]\u201d);<br \/>\n            logger.config(actionMemory+LINE_SEPA);<\/p>\n<p>        }<br \/>\n        \/\/ Informations sur la transition d&#039;\u00e9cran<br \/>\n        if (logger.isLoggable(Level.INFO)) {<br \/>\n            Cha\u00eene nextPage = (String) request.getAttribute(NEXT_PAGE);<br \/>\n            if (page suivante == null || nextPage.length() == 0) {<br \/>\n                nextPage = request.getRequestURI();<br \/>\n            }<br \/>\n            logger.info(&quot;NEXT_PAGE=[&quot; + page suivante + &quot;], &quot;<br \/>\n                    + &quot;IP_ADDRESS=[&quot; + request.getRemoteAddr() + &quot;], &quot;<br \/>\n                    + &quot;SESSION_ID=[&quot; + request.getSession().getId() + &quot;], &quot;<br \/>\n                    + &quot;USER-AGENT=[&quot; + request.getHeader(&quot;user-agent&quot;) + &quot;]&quot;);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            enregistreur.config(<br \/>\n                &quot;============ Fin de la demande !!&quot;<br \/>\n                +&quot;ID du fil\u00a0:&quot;+ Thread.currentThread().hashCode()<br \/>\n                + &#8221; =========================================================&#8221;<br \/>\n                +LINE_SEPA+LINE_SEPA);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     *<br \/>\n     *\/<br \/>\n    public void destroy() {<br \/>\n    }<\/p>\n<p>    \/\/ \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d M\u00e9thode priv\u00e9e ci-dessous \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d<br \/>\n    cha\u00eene statique priv\u00e9e getMemoryInfo (message de cha\u00eene) {<br \/>\n        DecimalFormat dFromat = nouveau DecimalFormat(&quot;#,###KB&quot;);<br \/>\n        long libre = Runtime.getRuntime().freeMemory() \/ 1024\u00a0;<br \/>\n        total long = Runtime.getRuntime().totalMemory() \/ 1024\u00a0;<br \/>\n        long max = Runtime.getRuntime().maxMemory() \/ 1024;<br \/>\n        utilis\u00e9 longtemps = total \u2013 gratuit\u00a0;<br \/>\n        Cha\u00eene msg = message + \u201d : \u201d + \u201ctotal =\u201d + dFromat.format(total) + \u201c, \u201d<br \/>\n                + \u00ab Montant utilis\u00e9 = \u00bb + dFromat.format (utilis\u00e9) + \u00bb (\u00ab \u00bb + (utilis\u00e9 * 100 \/ total)<br \/>\n                + \u00ab %), maximum disponible = \u00bb + dFromat.format(max);<br \/>\n        renvoyer un message\u00a0;<br \/>\n    }<br \/>\n    \/**<br \/>\n     * Afficher tous les en-t\u00eates de requ\u00eate dans le journal.<br \/>\n     *\/<br \/>\n    cha\u00eene statique priv\u00e9e getHeadersInfo (requ\u00eate HttpServletRequest) {<br \/>\n        StringBuffer buff = nouveau StringBuffer(LINE_SEPA);<br \/>\n        Enum\u00e9ration headerNames = request.getHeaderNames();<br \/>\n        while (headerNames.hasMoreElements()) {<br \/>\n            String headerName = (String) headerNames.nextElement();<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(headerName);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(request.getHeader(headerName));<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    cha\u00eene statique priv\u00e9e getCookieInfo (requ\u00eate HttpServletRequest) {<br \/>\n        StringBufferbuff = new StringBuffer();<br \/>\n        Cookie[] cookies = request.getCookies();<br \/>\n        si (cookies == nul) {<br \/>\n            retour &quot;&quot;;<br \/>\n        }<br \/>\n        pour (int i = 0; i &lt; cookies.length; i++) {<br \/>\n            buff.append(&quot;\\n \u2014 Cookie[&quot; + i + &quot;] \u2014\\n&quot;);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(cookies[i].getName());<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getValue());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(&quot;getVersion()&quot;);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getVersion());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(&quot;getComment()&quot;);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getComment());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(&quot;getDomain()&quot;);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getDomain());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(&quot;getMaxAge()&quot;);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getMaxAge());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(&quot;getPath()&quot;);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getPath());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(&quot;getSecure()&quot;);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            buff.append(cookies[i].getSecure());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    cha\u00eene statique priv\u00e9e getRequestParametersInfo (requ\u00eate HttpServletRequest) {<br \/>\n        StringBuffer buff = nouveau StringBuffer(LINE_SEPA);<br \/>\n        Carte map = convertRequest(requ\u00eate);<br \/>\n        TreeMap trr = new TreeMap(carte);<br \/>\n        It\u00e9rateur itr = trr.keySet().iterator();<br \/>\n        tandis que (itr.hasNext()) {<br \/>\n            Cl\u00e9 de cha\u00eene = (Cha\u00eene) itr.next();<br \/>\n            buff.append(&quot; &quot;);<br \/>\n            buff.append(cl\u00e9);<br \/>\n            buff.append(&quot;=&quot;);<br \/>\n            Valeur de l&#039;objet = map.get(key);<br \/>\n            Valeurs String[] = (String[]) valeur\u00a0;<br \/>\n            si (valeurs.longueur == 1) {<br \/>\n                buff.append(valeurs[0]);<br \/>\n            } autre {<br \/>\n                \/\/ Le tableau de cha\u00eenes est converti<br \/>\n                String strValue = strate (valeurs);<br \/>\n                buff.append(strValue);<br \/>\n            }<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    cha\u00eene statique priv\u00e9e getRequestAttributeInfo (requ\u00eate HttpServletRequest) {<br \/>\n        StringBuffer buff = nouveau StringBuffer(LINE_SEPA);<br \/>\n        \u00c9num\u00e9ration e = request.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            Nom de la cha\u00eene = (String) e.nextElement();<br \/>\n            buff.append(&quot; nom = &quot; + nom + &quot;, attributsClass = &quot;<br \/>\n                    + request.getAttribute(nom).getClass().getName()<br \/>\n                    + &quot;, toString() = &quot; + request.getAttribute(nom)<br \/>\n                    + LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    cha\u00eene statique priv\u00e9e getRequestOtherInfo (requ\u00eate HttpServletRequest) {<br \/>\n        StringBufferbuff = new StringBuffer();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetCharacterEncoding()=&quot;);<br \/>\n        buff.append(request.getCharacterEncoding());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContentLength()=&quot;);<br \/>\n        buff.append(request.getContentLength());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContentType()=&quot;);<br \/>\n        buff.append(request.getContentType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetLocale()=&quot;);<br \/>\n        buff.append(request.getLocale());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetProtocol()=&quot;);<br \/>\n        buff.append(request.getProtocol());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteAddr()=&quot;);<br \/>\n        buff.append(request.getRemoteAddr());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteHost()=&quot;);<br \/>\n        buff.append(request.getRemoteHost());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetScheme()=&quot;);<br \/>\n        buff.append(request.getScheme());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServerName()=&quot;);<br \/>\n        buff.append(request.getServerName());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServerPort()=&quot;);<br \/>\n        buff.append(request.getServerPort());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disSecure()=&quot;);<br \/>\n        buff.append(request.isSecure());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetAuthType()=&quot;);<br \/>\n        buff.append(request.getAuthType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContextPath()=&quot;);<br \/>\n        buff.append(request.getContextPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetMethod()=&quot;);<br \/>\n        buff.append(request.getMethod());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetPathInfo()=&quot;);<br \/>\n        buff.append(request.getPathInfo());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetPathTranslated()=&quot;);<br \/>\n        buff.append(request.getPathTranslated());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetQueryString()=&quot;);<br \/>\n        buff.append(request.getQueryString());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteUser()=&quot;);<br \/>\n        buff.append(request.getRemoteUser());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRequestedSessionId()=&quot;);<br \/>\n        buff.append(request.getRequestedSessionId());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRequestURI()=&quot;);<br \/>\n        buff.append(request.getRequestURI());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServletPath()=&quot;);<br \/>\n        buff.append(request.getServletPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetUserPrincipal()=&quot;);<br \/>\n        buff.append(request.getUserPrincipal());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdFromCookie()=&quot;);<br \/>\n        buff.append(request.isRequestedSessionIdFromCookie());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdFromURL()=&quot;);<br \/>\n        buff.append(request.isRequestedSessionIdFromURL());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdValid()=&quot;);<br \/>\n        buff.append(request.isRequestedSessionIdValid());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    cha\u00eene statique priv\u00e9e getSessionInfo (requ\u00eate HttpServletRequest, bool\u00e9en avant) {<br \/>\n        Session HttpSession = request.getSession();<br \/>\n        StringBufferbuff = new StringBuffer();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        si (avant) {<br \/>\n            buff.append(\u201d session.isNew() = \u201d + session.isNew());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d session.getId() = \u201d + session.getId());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        \u00c9num\u00e9ration e = session.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String sessionName = (String) e.nextElement();<br \/>\n            Cha\u00eene sessionClassName = session.getAttribute(sessionName)<br \/>\n                    .getClass().getName();<br \/>\n            buff.append(&quot; nom = &quot; + nom de session + &quot;, valeur = &quot;<br \/>\n                    + session.getAttribute(sessionName) + \u00ab ,attributClass = \u00bb<br \/>\n                    + nom de classe de session + LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    table de hachage statique priv\u00e9e convertRequest (requ\u00eate HttpServletRequest) {<br \/>\n        Table de hachage tempHash = new Hashtable();<br \/>\n        \u00c9num\u00e9ration e = request.getParameterNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            Cl\u00e9 de cha\u00eene = (String) e.nextElement();<br \/>\n            String[] valeurs = request.getParameterValues(key);<br \/>\n            String[] param\u00e8treValues = new String[values.length];<br \/>\n            pour (int i = 0; i &lt; valeurs.longueur; i++) {<br \/>\n                param\u00e8treValues[i] = convUnicode(values[i]);<br \/>\n            }<br \/>\n            tempHash.put(cl\u00e9, param\u00e8treValues);<br \/>\n        }<br \/>\n        retourner tempHash\u00a0;<\/p>\n<p>    }<br \/>\n    Strate de cha\u00eene statique priv\u00e9e (valeur de l&#039;objet) {<br \/>\n        si (valeur == null) {<br \/>\n            renvoyer \u00ab nul \u00bb\u00a0;<br \/>\n        } else if (valeur instanceof String[]) {<br \/>\n            return convString((String[]) value);<br \/>\n        } autre {<br \/>\n            return value.toString();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Renvoie le contenu du tableau de cha\u00eenes [strArray] sous forme de cha\u00eene comme celle ci-dessous.<br \/>\n     * &quot;[temp1, temp2, temp3]&quot;<br \/>\n     * @param strArray Tableau de cha\u00eenes \u00e0 \u00e9valuer<br \/>\n     * @return String apr\u00e8s conversion<br \/>\n     *\/<br \/>\n    cha\u00eene statique priv\u00e9e convString(String[] strArray) {<br \/>\n        si (strArray == null)<br \/>\n            renvoie null\u00a0;<br \/>\n        StringBufferbuff = new StringBuffer(&quot;[&quot;);<br \/>\n        pour (int i = 0; i &lt; strArray.length; i++) {<br \/>\n            buff.append(strArray[i] + \u201c, \u201c);<br \/>\n        }<br \/>\n        buff.delete(buff.length() \u2013 2, buff.length());<br \/>\n        buff.append(&quot;]&quot;);<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Convertissez [str] en Unicode.<br \/>\n     * @param cha\u00eene<br \/>\n     * @retour<br \/>\n     *\/<br \/>\n    cha\u00eene statique priv\u00e9e convUnicode (cha\u00eene str) {<br \/>\n        si (str == nul)<br \/>\n            renvoie null\u00a0;<br \/>\n        essayer {<br \/>\n            return new String(str.getBytes(&quot;8859_1&quot;), &quot;JISAutoDetect&quot;);<br \/>\n        } catch (UnsupportedEncodingException e) {<br \/>\n            lancer une nouvelle RuntimeException(e);<br \/>\n        }<br \/>\n    }<br \/>\n    \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n    la classe statique CustomFormatter \u00e9tend Formatter {<br \/>\n        Mod\u00e8le de cha\u00eene final statique = \u00ab aaaa\/MM\/jj HH:mm:ss \u00bb\u00a0;<br \/>\n        format de cha\u00eene synchronis\u00e9 public (enregistrement LogRecord) {<br \/>\n            StringBuffer buf = new StringBuffer();<br \/>\n            \/\/ d\u00e9finir la date et l&#039;heure<br \/>\n            Date date = nouvelle Date();<br \/>\n            date.setTime(record.getMillis());<br \/>\n            Formateur SimpleDateFormat = new SimpleDateFormat(motif);<br \/>\n            buf.append(formatter.format(date));<br \/>\n            buf.append(&quot;:&quot;);<br \/>\n            \/\/ d\u00e9finit le niveau<br \/>\n            buf.append(&quot;[&quot; + record.getLevel().getName() + &quot;]&quot;);<br \/>\n            buf.append(&quot;:&quot;);<br \/>\n            buf.append(record.getMessage());<br \/>\n            buf.append(LINE_SEPA);<br \/>\n            return buf.toString();<br \/>\n        }<br \/>\n    }<br \/>\n    la classe statique CustomConsoleHandler \u00e9tend StreamHandler {<br \/>\n        public CustomConsoleHandler() {<br \/>\n            super();<br \/>\n            setOutputStream(System.out);<br \/>\n        }<br \/>\n        \/**<br \/>\n         * \u00c9met un LogRecord.<br \/>\n         * Initialement, les demandes de journalisation sont envoy\u00e9es \u00e0 un objet Logger.<br \/>\n         * et cet objet initialise le LogRecord et<br \/>\n         *Redirig\u00e9 ici.<br \/>\n         *<br \/>\n         * @param record Description de l&#039;\u00e9v\u00e9nement de journal. les enregistrements nuls sont simplement ignor\u00e9s<br \/>\n         * et aucune notification ne sera envoy\u00e9e.<br \/>\n         *\/<br \/>\n        publication vide publique (enregistrement LogRecord) {<br \/>\n            super.publish(enregistrement);<br \/>\n            affleurer();<br \/>\n        }<br \/>\n        \/**<br \/>\n         * Remplacez StreamHandler.close par flush, mais<br \/>\n         * Le flux de sortie n&#039;est pas ferm\u00e9. En d\u2019autres termes, System.err n\u2019est pas ferm\u00e9.<br \/>\n         *\/<br \/>\n        public void close() {<br \/>\n            affleurer();<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>","protected":false},"excerpt":{"rendered":"<p>Analysez les requ\u00eates HTTP avec le filtre de journal Java Impl\u00e9mentez javax.servlet.Filter pour analyser les requ\u00eates HTTP [\u2026]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":""},"categories":[19],"tags":[],"_links":{"self":[{"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/posts\/910"}],"collection":[{"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/comments?post=910"}],"version-history":[{"count":5,"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":1894,"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/posts\/910\/revisions\/1894"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/categories?post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/fr\/wp-json\/wp\/v2\/tags?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}