{"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\/vi\/blog\/java\/bo-loc-nhat-ky-http","title":{"rendered":"Ph\u00e2n t\u00edch c\u00fa ph\u00e1p HTTP b\u1eb1ng B\u1ed9 l\u1ecdc nh\u1eadt k\u00fd Java"},"content":{"rendered":"<h2 class=\"common_title\"><a name=\"0\">Ph\u00e2n t\u00edch c\u00e1c y\u00eau c\u1ea7u HTTP b\u1eb1ng b\u1ed9 l\u1ecdc nh\u1eadt k\u00fd Java<\/a><\/h2>\n<p>\n<strong>javax.servlet.Filter<\/strong>M\u1ed9t c\u00e1ch thu\u1eadn ti\u1ec7n \u0111\u1ec3 tri\u1ec3n khai v\u00e0 ph\u00e2n t\u00edch n\u1ed9i dung c\u1ee7a c\u00e1c y\u00eau c\u1ea7u HTTP v\u00e0 nh\u1eadt k\u00fd \u0111\u1ea7u ra.<strong>L\u1ecdc<\/strong>Gi\u1edbi thi\u1ec7u l\u1edbp h\u1ecdc.<br \/>\n<br \/>\nB\u1ed9 l\u1ecdc nh\u1eadt k\u00fd n\u00e0y s\u1eed d\u1ee5ng &quot;java.util.logging.Logger&quot; cho \u0111\u1ea7u ra nh\u1eadt k\u00fd v\u00e0 b\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i \u0111\u1ea7u ra th\u00f4ng tin b\u1eb1ng c\u00e1ch thay \u0111\u1ed5i c\u1ea5p \u0111\u1ed9 nh\u1eadt k\u00fd.\n<\/p>\n<h2 class=\"common_title\"><a name=\"1\">javax.servlet.Filter l\u00e0 g\u00ec?<\/a><\/h2>\n<p>\nKhi x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng web, ngo\u00e0i x\u1eed l\u00fd nghi\u1ec7p v\u1ee5 ch\u00ednh, c\u1ea7n th\u1ef1c hi\u1ec7n x\u1eed l\u00fd ph\u1ee5 th\u00f4ng th\u01b0\u1eddng tr\u01b0\u1edbc v\u00e0 sau x\u1eed l\u00fd nghi\u1ec7p v\u1ee5 ch\u00ednh.<br \/>\nV\u00ed d\u1ee5: x\u00e1c th\u1ef1c \u1ee9ng d\u1ee5ng kh\u00e1ch, ki\u1ec3m tra quy\u1ec1n h\u1ea1n, ghi nh\u1eadt k\u00fd, v.v.<br \/>\nVi\u1ec7c m\u00e3 h\u00f3a qu\u00e1 tr\u00ecnh x\u1eed l\u00fd b\u00ean nh\u01b0 v\u1eady trong m\u1ed7i t\u00e0i nguy\u00ean tr\u1edf th\u00e0nh nguy\u00ean nh\u00e2n ch\u00ednh c\u1ea3n tr\u1edf kh\u1ea3 n\u0103ng b\u1ea3o tr\u00ec ph\u1ea7n m\u1ec1m, d\u1eabn \u0111\u1ebfn \u1ee9ng d\u1ee5ng kh\u00f3 b\u1ea3o tr\u00ec.<\/p>\n<p>B\u1eb1ng c\u00e1ch tri\u1ec3n khai javax.servlet.Filter, b\u1ea1n th\u01b0\u1eddng c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n qu\u00e1 tr\u00ecnh x\u1eed l\u00fd b\u00ean n\u00e0y tr\u01b0\u1edbc khi y\u00eau c\u1ea7u \u0111\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ebfn l\u1edbp servlet.<br \/>\nNgo\u00e0i ra, v\u00ec c\u00e0i \u0111\u1eb7t b\u1ed9 l\u1ecdc c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n trong web.xml n\u00ean b\u1ea1n c\u00f3 th\u1ec3 th\u00eam ho\u1eb7c x\u00f3a b\u1ed9 l\u1ecdc m\u1ed9t c\u00e1ch linh ho\u1ea1t m\u00e0 kh\u00f4ng c\u1ea7n thay \u0111\u1ed5i m\u00e3 ngu\u1ed3n.\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\">H\u00e3y th\u1eed s\u1eed d\u1ee5ng b\u1ed9 l\u1ecdc nh\u1eadt k\u00fd<\/a><\/h2>\n<p>Th\u1ef1c t\u1ebf ch\u00fang ta h\u00e3y s\u1eed d\u1ee5ng b\u1ed9 l\u1ecdc nh\u1eadt k\u00fd \u0111\u1ec3 l\u1ecdc c\u00e1c y\u00eau c\u1ea7u HTTP v\u00e0 ph\u00e2n t\u00edch ch\u00fang.<br \/>\nTh\u1eddi gian n\u00e0y<a href=\"http:\/\/tomcat.apache.org\/\" target=\"_blank\">tomcat<\/a>Ch\u00fang t\u00f4i s\u1ebd s\u1eed d\u1ee5ng \u1ee9ng d\u1ee5ng v\u00ed d\u1ee5 c\u00f3 s\u1eb5n ngay t\u1eeb \u0111\u1ea7u.<br \/>\nB\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y b\u1ed9 l\u1ecdc n\u00e0y ngay l\u1eadp t\u1ee9c b\u1eb1ng c\u00e1ch th\u1ef1c hi\u1ec7n c\u00e1c c\u00e0i \u0111\u1eb7t sau.<\/p>\n<div class=\"point\">\n1.<a href=\"#4\"><strong>M\u00e3 ngu\u1ed3n<\/strong><\/a>Nh\u1eadn v\u00e0 bi\u00ean d\u1ecbch.<br \/>\n2. \u0110\u1eb7t t\u1ec7p l\u1edbp \u0111\u00e3 bi\u00ean d\u1ecbch trong &quot;\/examples\/WEB-INF\/classes&quot;.<br \/>\n3.\u0110\u1eb7t \u0111\u1ecbnh ngh\u0129a sau trong web.xml.\n<\/div>\n<pre class=\"sample_src\">  B\u1ed9 l\u1ecdc nh\u1eadt k\u00fd B\u1ed9 l\u1ecdc nh\u1eadt k\u00fd ghi nh\u1eadt k\u00fd.Level KH\u1eceE B\u1ed9 l\u1ecdc nh\u1eadt k\u00fd \/*\r\n<\/pre>\n<p>*M\u1eabu url khi s\u1eed d\u1ee5ng khung Struts nh\u01b0 sau.<\/p>\n<pre class=\"sample_src\">   *.L\u00c0M\r\n<\/pre>\n<p>\nVui l\u00f2ng ki\u1ec3m tra k\u1ebft qu\u1ea3 \u0111\u1ea7u ra c\u1ee7a nh\u1eadt k\u00fd khi th\u1ef1c hi\u1ec7n m\u00e0n h\u00ecnh V\u00ed d\u1ee5 v\u1ec1 phi\u00ean.<br \/>\n<img src=\"https:\/\/chat-messenger.com\/images\/SessionsExample.jpg\" alt=\"Ph\u00e2n t\u00edch \u1ee9ng d\u1ee5ng web v\u1edbi b\u1ed9 l\u1ecdc nh\u1eadt k\u00fd javax.servlet.Filter\" border=\"0\"><br \/>\n<br clear=\"all\"><\/p>\n<h2 class=\"common_title\"><a name=\"3\">Th\u00f4ng tin nh\u1eadt k\u00fd \u0111\u1ea7u ra v\u00e0 c\u1ea5p \u0111\u1ed9 nh\u1eadt k\u00fd<\/a><\/h2>\n<p><strong>\u25cfGhi n\u1ed9i dung \u0111\u1ea7u ra<\/strong><\/p>\n<table border=\"1\">\n<tbody>\n<tr bgcolor=\"#FFFF80\">\n<th>Th\u00f4ng tin nh\u1eadt k\u00fd<\/th>\n<th>m\u1ee9c \u0111\u0103ng nh\u1eadp<\/th>\n<\/tr>\n<tr>\n<td><strong>Th\u00f4ng tin cookie<\/strong><\/td>\n<td>KH\u1eceE<\/td>\n<\/tr>\n<tr>\n<td><strong>Th\u00f4ng tin ti\u00eau \u0111\u1ec1 HTTP<\/strong><\/td>\n<td>KH\u1eceE<\/td>\n<\/tr>\n<tr>\n<td><strong>HTTPTh\u00f4ng tin kh\u00e1c<\/strong><\/td>\n<td>KH\u1eceE<\/td>\n<\/tr>\n<tr>\n<td><strong>Tham s\u1ed1 y\u00eau c\u1ea7u HTTP<\/strong><\/td>\n<td>C\u1ea4U H\u00ccNH<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0111\u1ed1i t\u01b0\u1ee3ng ph\u1ea1m vi y\u00eau c\u1ea7u<\/strong><\/td>\n<td>C\u1ea4U H\u00ccNH<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0111\u1ed1i t\u01b0\u1ee3ng trong ph\u1ea1m vi phi\u00ean<\/strong><\/td>\n<td>C\u1ea4U H\u00ccNH<\/td>\n<\/tr>\n<tr>\n<td><strong>M\u1ee9c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb tr\u01b0\u1edbc v\u00e0 sau khi y\u00eau c\u1ea7u<\/strong><\/td>\n<td>C\u1ea4U H\u00ccNH<\/td>\n<\/tr>\n<tr>\n<td><strong>Th\u00f4ng tin chuy\u1ec3n \u0111\u1ed5i m\u00e0n h\u00ecnh<\/strong><\/td>\n<td>TH\u00d4NG TIN<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n\n<p>T\u1ed1t nh\u1ea5t n\u00ean s\u1eed d\u1ee5ng c\u00e1c c\u1ea5p \u0111\u1ed9 nh\u1eadt k\u00fd nh\u01b0 sau.<\/p>\n<ul>\n<li>FINE: Xu\u1ea5t ra nh\u1eadt k\u00fd chi ti\u1ebft nh\u1ea5t. \u0110\u1eb7t c\u00e0i \u0111\u1eb7t n\u00e0y n\u1ebfu b\u1ea1n mu\u1ed1n ph\u00e2n t\u00edch chi ti\u1ebft y\u00eau c\u1ea7u HTTP.<\/li>\n<li>CONFIG... Xu\u1ea5t ra nh\u1eadt k\u00fd kh\u00e1 chi ti\u1ebft. \u0110\u00f3 l\u00e0 m\u1ed9t \u00fd t\u01b0\u1edfng t\u1ed1t \u0111\u1ec3 gi\u1eef n\u00f3 \u1edf m\u1ee9c n\u00e0y trong giai \u0111o\u1ea1n ph\u00e1t tri\u1ec3n.<\/li>\n<li>TH\u00d4NG TIN: Ch\u1ec9 xu\u1ea5t ra th\u00f4ng tin chuy\u1ec3n ti\u1ebfp m\u00e0n h\u00ecnh.<\/li>\n<\/ul>\n<p><strong>\u25cfC\u00e1ch thay \u0111\u1ed5i c\u1ea5p \u0111\u1ed9 nh\u1eadt k\u00fd<\/strong><br \/>\nB\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i m\u1ee9c \u0111\u1ea7u ra c\u1ee7a nh\u1eadt k\u00fd b\u1eb1ng c\u00e1ch \u0111\u1eb7t tham s\u1ed1 kh\u1edfi t\u1ea1o log.Level.<br \/>\nv\u00ed d\u1ee5:<\/p>\n<pre class=\"sample_src\">   ghi nh\u1eadt k\u00fd.Level TH\u00d4NG TIN\r\n<\/pre>\n\n<h2 class=\"common_title\"><a name=\"4\">M\u00e3 ngu\u1ed3n<\/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>nh\u1eadp javax.servlet.Filter;<br \/>\nnh\u1eadp javax.servlet.FilterChain;<br \/>\nnh\u1eadp javax.servlet.FilterConfig;<br \/>\nnh\u1eadp javax.servlet.ServletException;<br \/>\nnh\u1eadp javax.servlet.ServletRequest;<br \/>\nnh\u1eadp javax.servlet.ServletResponse;<br \/>\nnh\u1eadp javax.servlet.http.Cookie;<br \/>\nnh\u1eadp javax.servlet.http.HttpServletRequest;<br \/>\nnh\u1eadp javax.servlet.http.HttpServletResponse;<br \/>\nnh\u1eadp javax.servlet.http.HttpSession;<\/p>\n<p>\/**<br \/>\n * Tri\u1ec3n khai javax.servlet.Filter \u0111\u1ec3 ph\u00e2n t\u00edch n\u1ed9i dung c\u1ee7a c\u00e1c y\u00eau c\u1ea7u HTTP v\u00e0 nh\u1eadt k\u00fd \u0111\u1ea7u ra<br \/>\n * L\u1edbp l\u1ecdc.<br \/>\n *\/<br \/>\nl\u1edbp c\u00f4ng khai LogFilter tri\u1ec3n khai B\u1ed9 l\u1ecdc {<\/p>\n<p>    Tr\u00ecnh ghi nh\u1eadt k\u00fd t\u0129nh ri\u00eang t\u01b0 logger =<br \/>\n        Logger.getLogger(LogFilter.class.getName());<br \/>\n    Chu\u1ed7i cu\u1ed1i c\u00f9ng t\u0129nh ri\u00eang t\u01b0 LINE_SEPA =<br \/>\n        System.getProperty(\u201cline.separator\u201d);<br \/>\n    Chu\u1ed7i cu\u1ed1i c\u00f9ng t\u0129nh ri\u00eang t\u01b0 NEXT_PAGE = \u201cLogFilter.NEXT_PAGE\u201d;<\/p>\n<p>    \/**<br \/>\n     * Kh\u1edfi t\u1ea1o b\u1ed9 l\u1ecdc nh\u1eadt k\u00fd n\u00e0y.<br \/>\n     * \u00c1nh x\u1ea1 @param<br \/>\n     *\/<br \/>\n    public void init(\u00e1nh x\u1ea1 FilterConfig) {<br \/>\n        Chu\u1ed7i str = maps.getInitParameter(\u201clogging.Level\u201d);<br \/>\n        System.out.println(\u201c\u0110\u1eb7t c\u1ea5p \u0111\u1ed9 nh\u1eadt k\u00fd th\u00e0nh \u201c+str+\u201d.\u201d);<br \/>\n        C\u1ea5p \u0111\u1ed9 = null;<br \/>\n        th\u1eed {<br \/>\n            c\u1ea5p \u0111\u1ed9 = Level.parse(str);<br \/>\n        } b\u1eaft (Ngo\u1ea1i l\u1ec7 e) {<br \/>\n            e.printStackTrace();<br \/>\n            c\u1ea5p \u0111\u1ed9 = C\u1ea5p \u0111\u1ed9.INFO;<br \/>\n        }<br \/>\n        LogManager.getLogManager().reset();<br \/>\n        Tr\u00ecnh x\u1eed l\u00fd tr\u00ecnh x\u1eed l\u00fd = CustomConsoleHandler m\u1edbi();<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     * \u0110\u00e2y l\u00e0 b\u1ed9 l\u1ecdc xu\u1ea5t nh\u1eadt k\u00fd.<br \/>\n     * @param y\u00eau c\u1ea7u Y\u00eau c\u1ea7u HTTP \u0111ang \u0111\u01b0\u1ee3c x\u1eed l\u00fd<br \/>\n     * Ph\u1ea3n h\u1ed3i @param Ph\u1ea3n h\u1ed3i HTTP \u0111ang \u0111\u01b0\u1ee3c t\u1ea1o<br \/>\n     * chu\u1ed7i @param<br \/>\n     *\/<br \/>\n    public void doFilter(ServletRequest _request, ServletResponse _response,<br \/>\n            chu\u1ed7i FilterChain) n\u00e9m IOException, ServletException {<\/p>\n<p>        \/\/ --------------------&quot; S\u01a1 ch\u1ebf &quot;<br \/>\n        Y\u00eau c\u1ea7u HttpServletRequest = (HttpServletRequest) _request;<br \/>\n        Ph\u1ea3n h\u1ed3i HttpServletResponse = (HttpServletResponse) _response;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                \u201c============= Y\u00eau c\u1ea7u b\u1eaft \u0111\u1ea7u!!\u201d<br \/>\n                +\u201dID ch\u1ee7 \u0111\u1ec1:\u201d<br \/>\n                + Thread.currentThread().hashCode()<br \/>\n                + &#8221; ========================================================&#8221;);<br \/>\n        }<br \/>\n        \/\/ s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb<br \/>\n        Chu\u1ed7i h\u00e0nh \u0111\u1ed9ngMemory = null;<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = getMemoryInfo(\u201d \u201d<br \/>\n                    + Th\u1eddi gian m\u1edbi(System.currentTimeMillis()) + \u201dY\u00eau c\u1ea7u[tr\u01b0\u1edbc]\u201d);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(\u201cTh\u00f4ng tin cookie\u201d + getCookieInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            logger.fine(\u201cTh\u00f4ng tin ti\u00eau \u0111\u1ec1 HTTP\u201d + getHeadersInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.FINE)) {<br \/>\n            ti\u1ec1u phu<br \/>\n                    .fine(\u201cTh\u00f4ng tin kh\u00e1c v\u1ec1 HTTP\u201d + getRequestOtherInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            Chu\u1ed7i reqlog = getRequestParametersInfo(request);<br \/>\n            logger.config(\u201cTham s\u1ed1 y\u00eau c\u1ea7u HTTP\u201d + reqlog);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(\u201c\u0111\u1ed1i t\u01b0\u1ee3ng ph\u1ea1m vi y\u00eau c\u1ea7u\u201d<br \/>\n                    + getRequestAttributionInfo(request));<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            Chu\u1ed7i sessionlog = getSessionInfo(request,true);<br \/>\n            logger.config(\u201c\u0111\u1ed1i t\u01b0\u1ee3ng ph\u1ea1m vi phi\u00ean (tr\u01b0\u1edbc khi x\u1eed l\u00fd y\u00eau c\u1ea7u)\u201d<br \/>\n                    + nh\u1eadt k\u00fd phi\u00ean);<br \/>\n        }<\/p>\n<p>        \/\/ g\u1ecdi b\u1ed9 l\u1ecdc ti\u1ebfp theo<br \/>\n        chain.doFilter(y\u00eau c\u1ea7u, ph\u1ea3n h\u1ed3i);<\/p>\n<p>        \/\/ \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014- \u201cX\u1eed l\u00fd h\u1eadu k\u1ef3\u201d<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            Chu\u1ed7i sessionlog = getSessionInfo(request,false);<br \/>\n            logger.config(\u201c\u0111\u1ed1i t\u01b0\u1ee3ng ph\u1ea1m vi phi\u00ean (sau khi x\u1eed l\u00fd y\u00eau c\u1ea7u)\u201d<br \/>\n                    + nh\u1eadt k\u00fd phi\u00ean);<br \/>\n        }<br \/>\n        \/\/ s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            actionMemory = \u201dM\u1ee9c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb tr\u01b0\u1edbc v\u00e0 sau khi y\u00eau c\u1ea7u\u201d+LINE_SEPA<br \/>\n                    + B\u1ed9 nh\u1edb h\u00e0nh \u0111\u1ed9ng + LINE_SEPA<br \/>\n                    + getMemoryInfo(\u201d \u201d + Th\u1eddi gian m\u1edbi(System.currentTimeMillis())<br \/>\n                            + \u201dy\u00eau c\u1ea7u[sau]\u201d);<br \/>\n            logger.config(actionMemory+LINE_SEPA);<\/p>\n<p>        }<br \/>\n        \/\/ Th\u00f4ng tin chuy\u1ec3n m\u00e0n h\u00ecnh<br \/>\n        if (logger.isLoggable(Level.INFO)) {<br \/>\n            Chu\u1ed7i nextPage = (Chu\u1ed7i) request.getAttribution(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                    + \u201cIP_ADDRESS=[\u201d + request.getRemoteAddr() + \u201c], \u201d<br \/>\n                    + \u201cSESSION_ID=[\u201d + request.getSession().getId() + \u201c], \u201d<br \/>\n                    + \u201cUSER-AGENT=[\u201d + request.getHeader(\u201cuser-agent\u201d) + \u201c]\u201d);<br \/>\n        }<br \/>\n        if (logger.isLoggable(Level.CONFIG)) {<br \/>\n            logger.config(<br \/>\n                \u201c============= Y\u00eau c\u1ea7u k\u1ebft th\u00fac!!\u201d<br \/>\n                +\u201dID ch\u1ee7 \u0111\u1ec1:\u201d+ 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    h\u1ee7y b\u1ecf kho\u1ea3ng tr\u1ed1ng c\u00f4ng khai () {<br \/>\n    }<\/p>\n<p>    \/\/ \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d Ph\u01b0\u01a1ng ph\u00e1p ri\u00eang b\u00ean d\u01b0\u1edbi \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 getMemoryInfo(String tin nh\u1eafn) {<br \/>\n        DecimalFormat dFromat = new DecimalFormat(\u201c#,###KB\u201d);<br \/>\n        mi\u1ec5n ph\u00ed d\u00e0i = Runtime.getRuntime().freeMemory() \/ 1024;<br \/>\n        t\u1ed5ng d\u00e0i = Runtime.getRuntime().totalMemory() \/ 1024;<br \/>\n        d\u00e0i max = Runtime.getRuntime().maxMemory() \/ 1024;<br \/>\n        s\u1eed d\u1ee5ng l\u00e2u d\u00e0i = t\u1ed5ng c\u1ed9ng \u2013 mi\u1ec5n ph\u00ed;<br \/>\n        Tin nh\u1eafn chu\u1ed7i = tin nh\u1eafn + \u201d : \u201d + \u201ctotal=\u201d + dFromat.format(total) + \u201c, \u201d<br \/>\n                + \u201cS\u1ed1 ti\u1ec1n \u0111\u00e3 s\u1eed d\u1ee5ng=\u201d + dFromat.format(used) + \u201d (\u201d + (\u0111\u00e3 s\u1eed d\u1ee5ng * 100 \/ t\u1ed5ng c\u1ed9ng)<br \/>\n                + \u201c%), kh\u1ea3 d\u1ee5ng t\u1ed1i \u0111a=\u201d + dFromat.format(max);<br \/>\n        tin nh\u1eafn tr\u1ea3 l\u1ea1i;<br \/>\n    }<br \/>\n    \/**<br \/>\n     * Xu\u1ea5t t\u1ea5t c\u1ea3 c\u00e1c ti\u00eau \u0111\u1ec1 y\u00eau c\u1ea7u v\u00e0o nh\u1eadt k\u00fd.<br \/>\n     *\/<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 getHeadersInfo(HttpServletRequest request) {<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi(LINE_SEPA);<br \/>\n        Ti\u00eau \u0111\u1ec1 li\u1ec7t k\u00eaNames = request.getHeaderNames();<br \/>\n        trong khi (headerNames.hasMoreElements()) {<br \/>\n            Chu\u1ed7i headerName = (Chu\u1ed7i) headerNames.nextElement();<br \/>\n            buff.append(\u201d \u201c);<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        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 getCookieInfo(HttpServletRequest request) {<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi();<br \/>\n        Cookie[] cookies = request.getCookies();<br \/>\n        if (cookie == null) {<br \/>\n            tr\u1edf l\u1ea1i &quot;&quot;;<br \/>\n        }<br \/>\n        for (int i = 0; i &lt; cookies.length; i++) {<br \/>\n            buff.append(\u201c\\n \u2014 Cookie[\u201d + i + \u201c] \u2014\\n\u201d);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(cookie[i].getName());<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getValue());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetVersion()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getVersion());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetComment()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getComment());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetDomain()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getDomain());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetMaxAge()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getMaxAge());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetPath()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getPath());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(\u201cgetSecure()\u201d);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            buff.append(cookie[i].getSecure());<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 getRequestParametersInfo(HttpServletRequest request) {<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi(LINE_SEPA);<br \/>\n        B\u1ea3n \u0111\u1ed3 b\u1ea3n \u0111\u1ed3 = ConvertRequest(request);<br \/>\n        TreeMap trr = new TreeMap(map);<br \/>\n        Iterator itr = trr.keySet().iterator();<br \/>\n        trong khi (itr.hasNext()) {<br \/>\n            Kh\u00f3a chu\u1ed7i = (Chu\u1ed7i) itr.next();<br \/>\n            buff.append(\u201d \u201c);<br \/>\n            buff.append(key);<br \/>\n            buff.append(\u201c=\u201d);<br \/>\n            Gi\u00e1 tr\u1ecb \u0111\u1ed1i t\u01b0\u1ee3ng = map.get(key);<br \/>\n            Gi\u00e1 tr\u1ecb chu\u1ed7i[] = gi\u00e1 tr\u1ecb (Chu\u1ed7i []);<br \/>\n            if (value.length == 1) {<br \/>\n                buff.append(values[0]);<br \/>\n            } kh\u00e1c {<br \/>\n                \/\/ M\u1ea3ng chu\u1ed7i \u0111\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ed5i<br \/>\n                Chu\u1ed7i strValue = t\u1ea7ng(gi\u00e1 tr\u1ecb);<br \/>\n                buff.append(strValue);<br \/>\n            }<br \/>\n            buff.append(LINE_SEPA);<br \/>\n        }<br \/>\n        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang getRequestAttributionInfo(HttpServletRequest request) {<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi(LINE_SEPA);<br \/>\n        B\u1ea3ng li\u1ec7t k\u00ea e = request.getAttributionNames();<br \/>\n        trong khi (e.hasMoreElements()) {<br \/>\n            T\u00ean chu\u1ed7i = (Chu\u1ed7i) e.nextElement();<br \/>\n            buff.append(\u201d name=\u201d + name + \u201c, attributeClass= \u201d<br \/>\n                    + request.getAttribution(name).getClass().getName()<br \/>\n                    + \u201c, toString() = \u201d + request.getAttribution(name)<br \/>\n                    + LINE_SEPA);<br \/>\n        }<br \/>\n        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 getRequestOtherInfo(HttpServletRequest request) {<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetCharacterEncoding()=\u201d);<br \/>\n        buff.append(request.getCharacterEncoding());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContentLength()=\u201d);<br \/>\n        buff.append(request.getContentLength());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContentType()=\u201d);<br \/>\n        buff.append(request.getContentType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetLocale()=\u201d);<br \/>\n        buff.append(request.getLocale());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetProtocol()=\u201d);<br \/>\n        buff.append(request.getProtocol());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteAddr()=\u201d);<br \/>\n        buff.append(request.getRemoteAddr());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteHost()=\u201d);<br \/>\n        buff.append(request.getRemoteHost());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetScheme()=\u201d);<br \/>\n        buff.append(request.getScheme());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServerName()=\u201d);<br \/>\n        buff.append(request.getServerName());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServerPort()=\u201d);<br \/>\n        buff.append(request.getServerPort());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disSecure()=\u201d);<br \/>\n        buff.append(request.isSecure());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetAuthType()=\u201d);<br \/>\n        buff.append(request.getAuthType());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetContextPath()=\u201d);<br \/>\n        buff.append(request.getContextPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetMethod()=\u201d);<br \/>\n        buff.append(request.getMethod());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetPathInfo()=\u201d);<br \/>\n        buff.append(request.getPathInfo());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetPathTranslation()=\u201d);<br \/>\n        buff.append(request.getPathTranslation());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetQueryString()=\u201d);<br \/>\n        buff.append(request.getQueryString());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRemoteUser()=\u201d);<br \/>\n        buff.append(request.getRemoteUser());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRequestedSessionId()=\u201d);<br \/>\n        buff.append(request.getRequestedSessionId());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetRequestURI()=\u201d);<br \/>\n        buff.append(request.getRequestURI());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetServletPath()=\u201d);<br \/>\n        buff.append(request.getServletPath());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201dgetUserPrincipal()=\u201d);<br \/>\n        buff.append(request.getUserPrincipal());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdFromCookie()=\u201d);<br \/>\n        buff.append(request.isRequestedSessionIdFromCookie());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdFromURL()=\u201d);<br \/>\n        buff.append(request.isRequestedSessionIdFromURL());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        buff.append(\u201disRequestedSessionIdValid()=\u201d);<br \/>\n        buff.append(request.isRequestedSessionIdValid());<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<\/p>\n<p>    Chu\u1ed7i t\u0129nh ri\u00eang getSessionInfo(HttpServletRequest request,boolean before) {<br \/>\n        Phi\u00ean HttpSession = request.getSession();<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi();<br \/>\n        buff.append(LINE_SEPA);<br \/>\n        n\u1ebfu (tr\u01b0\u1edbc) {<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        B\u1ea3ng li\u1ec7t k\u00ea e = session.getAttributionNames();<br \/>\n        trong khi (e.hasMoreElements()) {<br \/>\n            Chu\u1ed7i sessionName = (Chu\u1ed7i) e.nextElement();<br \/>\n            Chu\u1ed7i sessionClassName = session.getAttribution(sessionName)<br \/>\n                    .getClass().getName();<br \/>\n            buff.append(\u201d name =&quot; + sessionName + &quot;, value =&quot;<br \/>\n                    + session.getAttribution(sessionName) + \u201c, attributeClass = \u201d<br \/>\n                    + sessionClassName+LINE_SEPA);<br \/>\n        }<br \/>\n        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<\/p>\n<p>    chuy\u1ec3n \u0111\u1ed5i Hashtable t\u0129nh ri\u00eang t\u01b0 (y\u00eau c\u1ea7u httpServletRequest) {<br \/>\n        Hashtable tempHash = new Hashtable();<br \/>\n        B\u1ea3ng li\u1ec7t k\u00ea e = request.getParameterNames();<br \/>\n        trong khi (e.hasMoreElements()) {<br \/>\n            Kh\u00f3a chu\u1ed7i = (Chu\u1ed7i) e.nextElement();<br \/>\n            Chu\u1ed7i [] gi\u00e1 tr\u1ecb = request.getParameterValues(key);<br \/>\n            Chu\u1ed7i[] tham s\u1ed1Values \u200b= Chu\u1ed7i m\u1edbi[values.length];<br \/>\n            for (int i = 0; i &lt; value.length; i++) {<br \/>\n                tham s\u1ed1Values[i] = convUnicode(values[i]);<br \/>\n            }<br \/>\n            tempHash.put(key, tham s\u1ed1Values);<br \/>\n        }<br \/>\n        tr\u1ea3 v\u1ec1 tempHash;<\/p>\n<p>    }<br \/>\n    T\u1ea7ng chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 (Gi\u00e1 tr\u1ecb \u0111\u1ed1i t\u01b0\u1ee3ng) {<br \/>\n        n\u1ebfu (gi\u00e1 tr\u1ecb == null) {<br \/>\n            tr\u1ea3 v\u1ec1 \u201cnull\u201d;<br \/>\n        } else if (gi\u00e1 tr\u1ecb instanceof String[]) {<br \/>\n            tr\u1ea3 v\u1ec1 gi\u00e1 tr\u1ecb convString((String[]));<br \/>\n        } kh\u00e1c {<br \/>\n            gi\u00e1 tr\u1ecb tr\u1ea3 v\u1ec1.toString();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Tr\u1ea3 v\u1ec1 n\u1ed9i dung c\u1ee7a m\u1ea3ng chu\u1ed7i [strArray] d\u01b0\u1edbi d\u1ea1ng Chu\u1ed7i nh\u01b0 b\u00ean d\u01b0\u1edbi.<br \/>\n     * \u201c[temp1,temp2,temp3]\u201d<br \/>\n     * @param strArray M\u1ea3ng chu\u1ed7i c\u1ea7n \u0111\u00e1nh gi\u00e1<br \/>\n     * @return String sau khi chuy\u1ec3n \u0111\u1ed5i<br \/>\n     *\/<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 convString(String[] strArray) {<br \/>\n        n\u1ebfu (strArray == null)<br \/>\n            tr\u1ea3 v\u1ec1 gi\u00e1 tr\u1ecb r\u1ed7ng;<br \/>\n        H\u1ed7 tr\u1ee3 StringBuffer = StringBuffer m\u1edbi(\u201c[\u201c);<br \/>\n        for (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(\u201c]\u201d);<br \/>\n        tr\u1ea3 v\u1ec1 buff.toString();<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Chuy\u1ec3n \u0111\u1ed5i [str] sang Unicode.<br \/>\n     * @param str<br \/>\n     * @tr\u1edf l\u1ea1i<br \/>\n     *\/<br \/>\n    Chu\u1ed7i t\u0129nh ri\u00eang t\u01b0 convUnicode(String str) {<br \/>\n        n\u1ebfu (str == null)<br \/>\n            tr\u1ea3 v\u1ec1 gi\u00e1 tr\u1ecb r\u1ed7ng;<br \/>\n        th\u1eed {<br \/>\n            tr\u1ea3 v\u1ec1 Chu\u1ed7i m\u1edbi(str.getBytes(\u201c8859_1\u201d), \u201cJISAutoDetect\u201d);<br \/>\n        } b\u1eaft (UnsupportedEncodingException e) {<br \/>\n            n\u00e9m RuntimeException m\u1edbi (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    l\u1edbp t\u0129nh CustomFormatter m\u1edf r\u1ed9ng Formatter {<br \/>\n        M\u1eabu chu\u1ed7i cu\u1ed1i c\u00f9ng t\u0129nh = \u201cyyyy\/MM\/dd HH:mm:ss\u201d;<br \/>\n        \u0110\u1ecbnh d\u1ea1ng chu\u1ed7i \u0111\u01b0\u1ee3c \u0111\u1ed3ng b\u1ed9 h\u00f3a c\u00f4ng khai (B\u1ea3n ghi LogRecord) {<br \/>\n            StringBuffer buf = new StringBuffer();<br \/>\n            \/\/ \u0111\u1eb7t ng\u00e0y v\u00e0 gi\u1edd<br \/>\n            Ng\u00e0y ng\u00e0y = Ng\u00e0y m\u1edbi();<br \/>\n            date.setTime(record.getMillis());<br \/>\n            Tr\u00ecnh \u0111\u1ecbnh d\u1ea1ng SimpleDateFormat = new SimpleDateFormat(pattern);<br \/>\n            buf.append(formatter.format(date));<br \/>\n            buf.append(\u201c:\u201d);<br \/>\n            \/\/ \u0111\u1eb7t m\u1ee9c<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    l\u1edbp t\u0129nh CustomConsoleHandler m\u1edf r\u1ed9ng StreamHandler {<br \/>\n        c\u00f4ng khai CustomConsoleHandler() {<br \/>\n            si\u00eau();<br \/>\n            setOutputStream(System.out);<br \/>\n        }<br \/>\n        \/**<br \/>\n         * Ph\u00e1t h\u00e0nh m\u1ed9t LogRecord.<br \/>\n         * Ban \u0111\u1ea7u, c\u00e1c y\u00eau c\u1ea7u ghi nh\u1eadt k\u00fd \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn \u0111\u1ed1i t\u01b0\u1ee3ng Logger.<br \/>\n         * v\u00e0 \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y kh\u1edfi t\u1ea1o LogRecord v\u00e0<br \/>\n         *Chuy\u1ec3n h\u01b0\u1edbng t\u1edbi \u0111\u00e2y.<br \/>\n         *<br \/>\n         * B\u1ea3n ghi @param M\u00f4 t\u1ea3 s\u1ef1 ki\u1ec7n nh\u1eadt k\u00fd. h\u1ed3 s\u01a1 null ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 b\u1ecb b\u1ecf qua<br \/>\n         * v\u00e0 s\u1ebd kh\u00f4ng c\u00f3 th\u00f4ng b\u00e1o n\u00e0o \u0111\u01b0\u1ee3c g\u1eedi.<br \/>\n         *\/<br \/>\n        xu\u1ea5t b\u1ea3n void c\u00f4ng khai (B\u1ea3n ghi LogRecord) {<br \/>\n            super.publish(record);<br \/>\n            tu\u00f4n ra();<br \/>\n        }<br \/>\n        \/**<br \/>\n         * Ghi \u0111\u00e8 StreamHandler.close \u0111\u1ec3 x\u00f3a, nh\u01b0ng<br \/>\n         * Lu\u1ed3ng \u0111\u1ea7u ra kh\u00f4ng b\u1ecb \u0111\u00f3ng. N\u00f3i c\u00e1ch kh\u00e1c, System.err kh\u00f4ng b\u1ecb \u0111\u00f3ng.<br \/>\n         *\/<br \/>\n        kho\u1ea3ng tr\u1ed1ng c\u00f4ng khai \u0111\u00f3ng() {<br \/>\n            tu\u00f4n ra();<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n<\/textarea><\/p>","protected":false},"excerpt":{"rendered":"<p>Ph\u00e2n t\u00edch c\u00e1c y\u00eau c\u1ea7u HTTP b\u1eb1ng b\u1ed9 l\u1ecdc nh\u1eadt k\u00fd Java Tri\u1ec3n khai javax.servlet.Filter \u0111\u1ec3 ph\u00e2n t\u00edch c\u00e1c y\u00eau c\u1ea7u 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\/vi\/wp-json\/wp\/v2\/posts\/910"}],"collection":[{"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/comments?post=910"}],"version-history":[{"count":5,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":1894,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/posts\/910\/revisions\/1894"}],"wp:attachment":[{"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/categories?post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chat-messenger.com\/vi\/wp-json\/wp\/v2\/tags?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}