{"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\/de\/blog\/java\/http-protokollfilter","title":{"rendered":"Analysieren Sie HTTP mit Java Log Filter"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Analysieren Sie HTTP-Anfragen mit Java-Protokollfiltern<\/a><\/h2>\n<p>\n<strong>javax.servlet.Filter<\/strong>Eine praktische M\u00f6glichkeit, den Inhalt von HTTP-Anfragen und Ausgabeprotokollen zu implementieren und zu analysieren.<strong>Filter<\/strong>Vorstellung der Klasse.<br \/>\n<br \/>\nDieser Protokollfilter verwendet \u201ejava.util.logging.Logger\u201c f\u00fcr die Protokollausgabe, und Sie k\u00f6nnen die Informationsausgabe \u00e4ndern, indem Sie die Protokollebene \u00e4ndern.\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">Was ist javax.servlet.Filter?<\/a><\/h2>\n<p>\nBeim Erstellen einer Webanwendung ist es zus\u00e4tzlich zur Hauptgesch\u00e4ftsverarbeitung erforderlich, vor und nach der Hauptgesch\u00e4ftsverarbeitung eine gemeinsame Sekund\u00e4rverarbeitung durchzuf\u00fchren.<br \/>\nZum Beispiel Client-Authentifizierung, Autorit\u00e4tspr\u00fcfung, Protokollierung usw.<br \/>\nDie Codierung einer solchen Nebenverarbeitung in jeder Ressource wird zu einer Hauptursache f\u00fcr die Beeintr\u00e4chtigung der Wartbarkeit der Software, was zu einer schwierig zu wartenden Anwendung f\u00fchrt.<\/p>\n<p>Durch die Implementierung von javax.servlet.Filter k\u00f6nnen Sie diese Nebenverarbeitung \u00fcblicherweise durchf\u00fchren, bevor die Anforderung an die Servlet-Klasse \u00fcbergeben wird.<br \/>\nDa Filtereinstellungen auch in web.xml vorgenommen werden k\u00f6nnen, k\u00f6nnen Sie Filter flexibel hinzuf\u00fcgen oder l\u00f6schen, ohne den Quellcode zu \u00e4ndern.\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\">Versuchen Sie es mit einem Protokollfilter<\/a><\/h2>\n<p>Lassen Sie uns tats\u00e4chlich einen Protokollfilter verwenden, um HTTP-Anfragen zu filtern und zu analysieren.<br \/>\nDiesmal<a href=\"http:\/\/tomcat.apache.org\/\" target=\"_blank\">Kater<\/a>Wir werden die Beispielanwendung verwenden, die von Anfang an verf\u00fcgbar ist.<br \/>\nSie k\u00f6nnen diesen Filter sofort ausf\u00fchren, indem Sie die folgenden Einstellungen vornehmen.<\/p>\n<div class=\"point\">\n1.<a href=\"#4\"><strong>Quellcode<\/strong><\/a>Holen und kompilieren.<br \/>\n2. Platzieren Sie die kompilierte Klassendatei unter \u201e\/examples\/WEB-INF\/classes\u201c.<br \/>\n3.Legen Sie die folgende Definition in web.xml fest.\n<\/div>\n<pre class=\"sample_src\">  LogFilter LogFilter logging.Level BUSSGELD LogFilter \/*\r\n<\/pre>\n<p>*Das URL-Muster bei Verwendung des Struts-Frameworks ist wie folgt.<\/p>\n<pre class=\"sample_src\">   *.Tun\r\n<\/pre>\n<p>\nBitte \u00fcberpr\u00fcfen Sie die Protokollausgabeergebnisse der Ausf\u00fchrung des Sitzungsbeispielbildschirms.<br \/>\n<img src=\"https:\/\/chat-messenger.com\/images\/SessionsExample.jpg\" alt=\"Webanwendungsanalyse mit javax.servlet.Filter-Protokollfilter\" border=\"0\"><br \/>\n<br clear=\"all\"><\/p>\n<h2 class=\"common_title\"><a name=\"3\">Protokollinformationen und Protokollebene ausgeben<\/a><\/h2>\n<p><strong>\u25cfAusgabeinhalt protokollieren<\/strong><\/p>\n<table border=\"1\">\n<tbody>\n<tr bgcolor=\"#FFFF80\">\n<th>Protokollinformationen<\/th>\n<th>Protokollebene<\/th>\n<\/tr>\n<tr>\n<td><strong>Cookie-Informationen<\/strong><\/td>\n<td>BUSSGELD<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTP-Header-Informationen<\/strong><\/td>\n<td>BUSSGELD<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTPWeitere Informationen<\/strong><\/td>\n<td>BUSSGELD<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTP-Anfrageparameter<\/strong><\/td>\n<td>KONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>Anforderungsbereichsobjekt<\/strong><\/td>\n<td>KONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>Sitzungsbezogenes Objekt<\/strong><\/td>\n<td>KONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>Speichernutzung vor und nach Anfragen<\/strong><\/td>\n<td>KONFIG<\/td>\n<\/tr>\n<tr>\n<td><strong>Informationen zum Bildschirm\u00fcbergang<\/strong><\/td>\n<td>DIE INFO<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<p>Am besten verwenden Sie die Protokollebenen wie folgt.<\/p>\n<ul>\n<li>FEIN: Gibt das detaillierteste Protokoll aus. Legen Sie dies fest, wenn Sie die HTTP-Anfrage im Detail analysieren m\u00f6chten.<\/li>\n<li>CONFIG... Gibt ein einigerma\u00dfen detailliertes Protokoll aus. Es empfiehlt sich, diesen Wert w\u00e4hrend der Entwicklungsphase beizubehalten.<\/li>\n<li>INFO: Gibt nur Informationen zum Bildschirm\u00fcbergang aus.<\/li>\n<\/ul>\n<p><strong>\u25cfSo \u00e4ndern Sie die Protokollebene<\/strong><br \/>\nSie k\u00f6nnen die Protokollausgabeebene \u00e4ndern, indem Sie den Initialisierungsparameter logging.Level festlegen.<br \/>\nBeispiel:<\/p>\n<pre class=\"sample_src\">   logging.Level DIE INFO\r\n<\/pre>\n\n<h2 class=\"common_title\"><a name=\"4\">Quellcode<\/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>import javax.servlet.Filter;<br \/>\nimport javax.servlet.FilterChain;<br \/>\nimport javax.servlet.FilterConfig;<br \/>\nimport javax.servlet.ServletException;<br \/>\nimport javax.servlet.ServletRequest;<br \/>\nimport javax.servlet.ServletResponse;<br \/>\nimport javax.servlet.http.Cookie;<br \/>\nimport javax.servlet.http.HttpServletRequest;<br \/>\nimport javax.servlet.http.HttpServletResponse;<br \/>\nimport javax.servlet.http.HttpSession;<\/p>\n<p>\/**<br \/>\n * Implementieren Sie javax.servlet.Filter, um den Inhalt von HTTP-Anfragen und Ausgabeprotokollen zu analysieren<br \/>\n * Filterklasse.<br \/>\n *\/<br \/>\nDie \u00f6ffentliche Klasse LogFilter implementiert Filter {<\/p>\n<p>    privater statischer Logger logger =<br \/>\n        Logger.getLogger(LogFilter.class.getName());<br \/>\n    privater statischer finaler String LINE_SEPA =<br \/>\n        System.getProperty(\u201cline.separator\u201d);<br \/>\n    private static final String NEXT_PAGE = \u201eLogFilter.NEXT_PAGE\u201c;<\/p>\n<p>    \/**<br \/>\n     * Initialisieren Sie diesen Protokollfilter.<br \/>\n     * @param-Zuordnung<br \/>\n     *\/<br \/>\n    public void init(FilterConfig-Mapping) {<br \/>\n        String str = Mapping.getInitParameter(\u201clogging.Level\u201d);<br \/>\n        System.out.println(\u201cProtokollebene auf \u201e+str+\u201c setzen.\u201c);<br \/>\n        Level level = null;<br \/>\n        versuchen {<br \/>\n            level = Level.parse(str);<br \/>\n        } Catch (Ausnahme e) {<br \/>\n            e.printStackTrace();<br \/>\n            level = Level.INFO;<br \/>\n        }<br \/>\n        LogManager.getLogManager().reset();<br \/>\n        Handler handler = new CustomConsoleHandler();<br \/>\n        handler.setFormatter(new CustomFormatter());<br \/>\n        handler.setLevel(level);<br \/>\n        logger.setLevel(level);<br \/>\n        logger.getParent().addHandler(handler);<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Dies ist ein Filter, der Protokolle ausgibt.<br \/>\n     * @param request HTTP-Anfrage wird verarbeitet<br \/>\n     * @param Antwort HTTP-Antwort wird generiert<br \/>\n     * @param-Kette<br \/>\n     *\/<br \/>\n    public void doFilter(ServletRequest _request, ServletResponse _response,<br \/>\n            FilterChain-Kette) l\u00f6st IOException, ServletException {<\/p>\n<p>        \/\/ --------------------&quot;Vorverarbeitung&quot;<br \/>\n        HttpServletRequest request = (HttpServletRequest) _request;<br \/>\n        HttpServletResponse Antwort = (HttpServletResponse) _response;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                \u201e============ Start anfordern!!\u201c<br \/>\n                +\u201cThread-ID:\u201c<br \/>\n                + Thread.currentThread().hashCode()<br \/>\n                + &#8221; ========================================================&#8221;);<br \/>\n        }<br \/>\n        \/\/ Speichernutzung<br \/>\n        String actionMemory = null;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = getMemoryInfo(\u201c \u201d<br \/>\n                    + new Time(System.currentTimeMillis()) + \u201eRequest[ previous]\u201c);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(\u201cCookie-Informationen\u201d + getCookieInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(\u201cHTTP-Header-Informationen\u201c + getHeadersInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            Logger<br \/>\n                    .fine(\u201cHTTP andere Informationen\u201d + getRequestOtherInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String reqlog = getRequestParametersInfo(request);<br \/>\n            logger.config(\u201eHTTP-Anforderungsparameter\u201c + reqlog);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(\u201cBereichsobjekt anfordern\u201d<br \/>\n                    + getRequestAttributeInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String sessionlog = getSessionInfo(request,true);<br \/>\n            logger.config (\u201eSitzungsbereichsobjekt (vor der Anforderungsverarbeitung)\u201c<br \/>\n                    + Sitzungsprotokoll);<br \/>\n        }<\/p>\n<p>        \/\/ N\u00e4chsten Filter aufrufen<br \/>\n        chain.doFilter(Anfrage, Antwort);<\/p>\n<p>        \/\/ -------------------- &quot;Nachbearbeitung&quot;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            String sessionlog = getSessionInfo(request,false);<br \/>\n            logger.config (\u201eSitzungsbereichsobjekt (nach der Anforderungsverarbeitung)\u201c<br \/>\n                    + Sitzungsprotokoll);<br \/>\n        }<br \/>\n        \/\/ Speichernutzung<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = \u201eSpeichernutzung vor und nach der Anfrage\u201c+LINE_SEPA<br \/>\n                    + actionMemory + LINE_SEPA<br \/>\n                    + getMemoryInfo(\u201c \u201d + new Time(System.currentTimeMillis())<br \/>\n                            + \u201eAnfrage[nach]\u201c);<br \/>\n            logger.config(actionMemory+LINE_SEPA);<\/p>\n<p>        }<br \/>\n        \/\/ Informationen zum Bildschirm\u00fcbergang<br \/>\n        if (logger.isLoggable(Level.INFO)) {<br \/>\n            String nextPage = (String) request.getAttribute(NEXT_PAGE);<br \/>\n            if (nextPage == null || nextPage.length() == 0) {<br \/>\n                nextPage = request.getRequestURI();<br \/>\n            }<br \/>\n            logger.info(\u201cNEXT_PAGE=[\u201d + nextPage + \u201c], \u201d<br \/>\n                    + \u201eIP_ADDRESS=[\u201c + request.getRemoteAddr() + \u201e], \u201d<br \/>\n                    + \u201eSESSION_ID=[\u201c + request.getSession().getId() + \u201e], \u201d<br \/>\n                    + \u201eUSER-AGENT=[\u201c + request.getHeader(\u201cuser-agent\u201c) + \u201e]\u201c);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                \u201e============ Anforderungsende!!\u201c<br \/>\n                +\u201cThread-ID:\u201c+ 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 Private Methode unten \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d<br \/>\n    privater statischer String getMemoryInfo(String message) {<br \/>\n        DecimalFormat dFromat = new DecimalFormat(\u201c#,###KB\u201d);<br \/>\n        long free = Runtime.getRuntime().freeMemory() \/ 1024;<br \/>\n        long total = Runtime.getRuntime().totalMemory() \/ 1024;<br \/>\n        long max = Runtime.getRuntime().maxMemory() \/ 1024;<br \/>\n        lange genutzt = insgesamt \u2013 kostenlos;<br \/>\n        String msg = message + \u201e:\u201c + \u201etotal=\u201c + dFromat.format(total) + \u201e,\u201c<br \/>\n                + \u201eUsed amount=\u201c + dFromat.format(used) + \u201e(\u201c + (used * 100 \/ total)<br \/>\n                + \u201e%), maximal verf\u00fcgbar=\u201c + dFromat.format(max);<br \/>\n        R\u00fcckgabenachricht;<br \/>\n    }<br \/>\n    \/**<br \/>\n     * Alle Anforderungsheader in das Protokoll ausgeben.<br \/>\n     *\/<br \/>\n    privater statischer String getHeadersInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer(LINE_SEPA);<br \/>\n        Aufz\u00e4hlung headerNames = request.getHeaderNames();<br \/>\n        while (headerNames.hasMoreElements()) {<br \/>\n            String headerName = (String) headerNames.nextElement();<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(headerName);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(request.getHeader(headerName));<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    privater statischer String getCookieInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer();<br \/>\n        Cookie[] Cookies = request.getCookies();<br \/>\n        if (cookies == null) {<br \/>\n            zur\u00fcckkehren &quot;&quot;;<br \/>\n        }<br \/>\n        for (int i = 0; i &lt; Cookies.length; i++) {<br \/>\n            buff.append(\u201c\\n \u2014 Cookie[\u201c + i + \u201e] \u2014\\n\u201c);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(cookies[i].getName());<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getValue());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(\u201cgetVersion()\u201c);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getVersion());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(\u201cgetComment()\u201c);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getComment());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(\u201cgetDomain()\u201c);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getDomain());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(\u201cgetMaxAge()\u201c);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getMaxAge());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(\u201cgetPath()\u201c);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getPath());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(\u201cgetSecure()\u201c);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookies[i].getSecure());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    privater statischer String getRequestParametersInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer(LINE_SEPA);<br \/>\n        Karte map = convertRequest(request);<br \/>\n        TreeMap trr = new TreeMap(map);<br \/>\n        Iterator itr = trr.keySet().iterator();<br \/>\n        while (itr.hasNext()) {<br \/>\n            String key = (String) itr.next();<br \/>\n            buff.append(\u201c \u201e);<br \/>\n            buff.append(key);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            Objektwert = map.get(key);<br \/>\n            String[]-Werte = (String[])-Wert;<br \/>\n            if (values.length == 1) {<br \/>\n                buff.append(values[0]);<br \/>\n            } anders {<br \/>\n                \/\/ String-Array wird konvertiert<br \/>\n                String strValue = stratum(values);<br \/>\n                buff.append(strValue);<br \/>\n            }<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    privater statischer String getRequestAttributeInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer(LINE_SEPA);<br \/>\n        Aufz\u00e4hlung e = request.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String name = (String) e.nextElement();<br \/>\n            buff.append(\u201c name=\u201c + name + \u201e, attributeClass=\u201c<br \/>\n                    + request.getAttribute(name).getClass().getName()<br \/>\n                    + \u201e, toString() =\u201c + request.getAttribute(name)<br \/>\n                    + LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<br \/>\n    privater statischer String getRequestOtherInfo(HttpServletRequest request) {<br \/>\n        StringBuffer buff = new StringBuffer();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetCharacterEncoding()=\u201c);<br \/>\n        buff.append(request.getCharacterEncoding());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetContentLength()=\u201c);<br \/>\n        buff.append(request.getContentLength());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetContentType()=\u201c);<br \/>\n        buff.append(request.getContentType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetLocale()=\u201c);<br \/>\n        buff.append(request.getLocale());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetProtocol()=\u201c);<br \/>\n        buff.append(request.getProtocol());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetRemoteAddr()=\u201c);<br \/>\n        buff.append(request.getRemoteAddr());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetRemoteHost()=\u201c);<br \/>\n        buff.append(request.getRemoteHost());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetScheme()=\u201c);<br \/>\n        buff.append(request.getScheme());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetServerName()=\u201c);<br \/>\n        buff.append(request.getServerName());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetServerPort()=\u201c);<br \/>\n        buff.append(request.getServerPort());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cisSecure()=\u201c);<br \/>\n        buff.append(request.isSecure());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetAuthType()=\u201c);<br \/>\n        buff.append(request.getAuthType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetContextPath()=\u201c);<br \/>\n        buff.append(request.getContextPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetMethod()=\u201c);<br \/>\n        buff.append(request.getMethod());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetPathInfo()=\u201c);<br \/>\n        buff.append(request.getPathInfo());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetPathTranslated()=\u201c);<br \/>\n        buff.append(request.getPathTranslated());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetQueryString()=\u201c);<br \/>\n        buff.append(request.getQueryString());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetRemoteUser()=\u201c);<br \/>\n        buff.append(request.getRemoteUser());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetRequestedSessionId()=\u201c);<br \/>\n        buff.append(request.getRequestedSessionId());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetRequestURI()=\u201c);<br \/>\n        buff.append(request.getRequestURI());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetServletPath()=\u201c);<br \/>\n        buff.append(request.getServletPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cgetUserPrincipal()=\u201c);<br \/>\n        buff.append(request.getUserPrincipal());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cisRequestedSessionIdFromCookie()=\u201c);<br \/>\n        buff.append(request.isRequestedSessionIdFromCookie());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cisRequestedSessionIdFromURL()=\u201c);<br \/>\n        buff.append(request.isRequestedSessionIdFromURL());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201cisRequestedSessionIdValid()=\u201c);<br \/>\n        buff.append(request.isRequestedSessionIdValid());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    privater statischer String getSessionInfo(HttpServletRequest request,boolean before) {<br \/>\n        HttpSession session = request.getSession();<br \/>\n        StringBuffer buff = new StringBuffer();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        wenn (vorher) {<br \/>\n            buff.append(\u201c session.isNew() = \u201d + session.isNew());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201c session.getId() = \u201d + session.getId());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        Aufz\u00e4hlung e = session.getAttributeNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String sessionName = (String) e.nextElement();<br \/>\n            String sessionClassName = session.getAttribute(sessionName)<br \/>\n                    .getClass().getName();<br \/>\n            buff.append(\u201c name =\u201c + sessionName + \u201e, value =\u201c<br \/>\n                    + session.getAttribute(sessionName) +\u201c, attributeClass = \u201e<br \/>\n                    + sessionClassName+LINE_SEPA);<br \/>\n        }<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    private static Hashtable convertRequest(HttpServletRequest request) {<br \/>\n        Hashtable tempHash = new Hashtable();<br \/>\n        Aufz\u00e4hlung e = request.getParameterNames();<br \/>\n        while (e.hasMoreElements()) {<br \/>\n            String key = (String) e.nextElement();<br \/>\n            String[] Werte = request.getParameterValues(key);<br \/>\n            String[] parameterValues = new String[values.length];<br \/>\n            for (int i = 0; i &lt; Werte.L\u00e4nge; i++) {<br \/>\n                parameterValues[i] = convUnicode(values[i]);<br \/>\n            }<br \/>\n            tempHash.put(key, parameterValues);<br \/>\n        }<br \/>\n        return tempHash;<\/p>\n<p>    }<br \/>\n    privater statischer String stratum(Objektwert) {<br \/>\n        if (Wert == null) {<br \/>\n            \u201enull\u201c zur\u00fcckgeben;<br \/>\n        } else if (Wertinstanz von String[]) {<br \/>\n            return convString((String[]) value);<br \/>\n        } anders {<br \/>\n            R\u00fcckgabewert.toString();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Gibt den Inhalt des String-Arrays [strArray] als String wie den folgenden zur\u00fcck.<br \/>\n     * \u201e[temp1,temp2,temp3]\u201c<br \/>\n     * @param strArray String-Array, das ausgewertet werden soll<br \/>\n     * @return String nach der Konvertierung<br \/>\n     *\/<br \/>\n    privater statischer String convString(String[] strArray) {<br \/>\n        if (strArray == null)<br \/>\n            null zur\u00fcckgeben;<br \/>\n        StringBuffer buff = new StringBuffer(\u201c[\u201c);<br \/>\n        for (int i = 0; i &lt; strArray.length; i++) {<br \/>\n            buff.append(strArray[i] + \u201e, \u201e);<br \/>\n        }<br \/>\n        buff.delete(buff.length() \u2013 2, buff.length());<br \/>\n        buff.append(\u201c]\u201d);<br \/>\n        return buff.toString();<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Konvertieren Sie [str] in Unicode.<br \/>\n     * @param str<br \/>\n     * @zur\u00fcckkehren<br \/>\n     *\/<br \/>\n    privater statischer String convUnicode(String str) {<br \/>\n        if (str == null)<br \/>\n            null zur\u00fcckgeben;<br \/>\n        versuchen {<br \/>\n            return new String(str.getBytes(\u201e8859_1\u201c), \u201eJISAutoDetect\u201c);<br \/>\n        } Catch (UnsupportedEncodingException e) {<br \/>\n            throw new 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    Die statische Klasse CustomFormatter erweitert Formatter {<br \/>\n        static final String pattern = \u201eyyyy\/MM\/dd HH:mm:ss\u201c;<br \/>\n        \u00f6ffentliches synchronisiertes String-Format (LogRecord-Datensatz) {<br \/>\n            StringBuffer buf = new StringBuffer();<br \/>\n            \/\/ Datum und Uhrzeit einstellen<br \/>\n            Datum date = neues Date();<br \/>\n            date.setTime(record.getMillis());<br \/>\n            SimpleDateFormat formatter = new SimpleDateFormat(pattern);<br \/>\n            buf.append(formatter.format(date));<br \/>\n            buf.append(\u201c:\u201d);<br \/>\n            \/\/ Level einstellen<br \/>\n            buf.append(\u201c[\u201d + record.getLevel().getName() + \u201c]\u201d);<br \/>\n            buf.append(\u201c:\u201d);<br \/>\n            buf.append(record.getMessage());<br \/>\n            buf.append(LINE_SEPA);<br \/>\n            return buf.toString();<br \/>\n        }<br \/>\n    }<br \/>\n    Die statische Klasse CustomConsoleHandler erweitert StreamHandler {<br \/>\n        public CustomConsoleHandler() {<br \/>\n            super();<br \/>\n            setOutputStream(System.out);<br \/>\n        }<br \/>\n        \/**<br \/>\n         * Gibt einen LogRecord aus.<br \/>\n         * Zun\u00e4chst werden Protokollierungsanfragen an ein Logger-Objekt gesendet.<br \/>\n         * und dieses Objekt initialisiert den LogRecord und<br \/>\n         *Hierher weitergeleitet.<br \/>\n         *<br \/>\n         * @param-Datensatz Beschreibung des Protokollereignisses. Nulldatens\u00e4tze werden einfach ignoriert<br \/>\n         * und es wird keine Benachrichtigung gesendet.<br \/>\n         *\/<br \/>\n        public void Publish(LogRecord-Datensatz) {<br \/>\n            super.publish(record);<br \/>\n            sp\u00fclen();<br \/>\n        }<br \/>\n        \/**<br \/>\n         * \u00dcberschreiben Sie StreamHandler.close, um es zu leeren, aber<br \/>\n         * Der Ausgabestream ist nicht geschlossen. Mit anderen Worten, System.err ist nicht geschlossen.<br \/>\n         *\/<br \/>\n        public void close() {<br \/>\n            sp\u00fclen();<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>","protected":false},"excerpt":{"rendered":"<p>Analysieren Sie HTTP-Anfragen mit dem Java-Protokollfilter. Implementieren Sie javax.servlet.Filter, um HTTP-Anfragen zu analysieren [\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\/de\/wp-json\/wp\/v2\/posts\/910"}],"collection":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/comments?post=910"}],"version-history":[{"count":5,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":1894,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/posts\/910\/revisions\/1894"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/categories?post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/de\/wp-json\/wp\/v2\/tags?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}