From e1f7351d6e9f4fc6c3da3030501d4553afda33f8 Mon Sep 17 00:00:00 2001 From: zhangbeiyuan-hw Date: Tue, 27 Oct 2020 15:14:39 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97?= =?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0IP=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E8=AE=BF=E9=97=AE=E6=97=A5=E5=BF=97=E7=9A=84?= =?UTF-8?q?=E6=89=93=E5=8D=B0=EF=BC=8C=E8=AE=BE=E7=BD=AE=E7=99=BD=E5=90=8D?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E5=8F=AA=E6=89=93=E5=8D=B0aip=E5=92=8C?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=99=BB=E5=87=BA=E6=97=A5=E5=BF=97=20{"/log?= =?UTF-8?q?in",=20"/logout",=20"/auth/",=20"/mec-appstore/",=20"/mec-devel?= =?UTF-8?q?oper/"};?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../website/log/HttpTraceLogFilter.java | 65 +++++++++++++++---- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/edgegallery/website/log/HttpTraceLogFilter.java b/src/main/java/org/edgegallery/website/log/HttpTraceLogFilter.java index ff4adb3..7081760 100644 --- a/src/main/java/org/edgegallery/website/log/HttpTraceLogFilter.java +++ b/src/main/java/org/edgegallery/website/log/HttpTraceLogFilter.java @@ -19,13 +19,13 @@ package org.edgegallery.website.log; import com.google.gson.Gson; import java.io.IOException; import java.time.LocalDateTime; -import java.util.UUID; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; @@ -40,6 +40,8 @@ public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered private static final Logger LOGGER = LoggerFactory.getLogger(HttpTraceLogFilter.class); + private static final String[] urlPatterns = {"/login", "/logout", "/auth/", "/mec-appstore/", "/mec-developer/"}; + @Override public int getOrder() { return Ordered.HIGHEST_PRECEDENCE; @@ -48,7 +50,11 @@ public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - + String url = request.getRequestURI(); + if (!StringUtils.startsWithAny(url, urlPatterns)) { + filterChain.doFilter(request, response); + return; + } if (!(request instanceof ContentCachingRequestWrapper)) { request = new ContentCachingRequestWrapper(request); } @@ -56,31 +62,49 @@ public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered response = new ContentCachingResponseWrapper(response); } - String accessId = UUID.randomUUID().toString(); + HttpRequestLog logs = new HttpRequestLog(); try { - logForRequest(accessId, request); + logs.setRequest(logForRequest(request)); filterChain.doFilter(request, response); } finally { - logForResponse(accessId, response); + logs.setResponse(logForResponse(response)); updateResponse(response); + LOGGER.info("Http Request log: {}", new Gson().toJson(logs)); } } - private void logForRequest(String accessId, HttpServletRequest request) { + private HttpRequestTraceLog logForRequest(HttpServletRequest request) { HttpRequestTraceLog requestTraceLog = new HttpRequestTraceLog(); - requestTraceLog.setAccessId(accessId); requestTraceLog.setTime(LocalDateTime.now().toString()); requestTraceLog.setPath(request.getRequestURI()); requestTraceLog.setMethod(request.getMethod()); - LOGGER.info("Http request trace log: {}", new Gson().toJson(requestTraceLog)); + requestTraceLog.setIp(getIpAddress(request)); + return requestTraceLog; } - private void logForResponse(String accessId, HttpServletResponse response) { + private HttpResponseTraceLog logForResponse(HttpServletResponse response) { HttpResponseTraceLog responseTraceLog = new HttpResponseTraceLog(); - responseTraceLog.setAccessId(accessId); responseTraceLog.setStatus(response.getStatus()); responseTraceLog.setTime(LocalDateTime.now().toString()); - LOGGER.info("Http response trace log: {}", new Gson().toJson(responseTraceLog)); + return responseTraceLog; + } + + private String getIpAddress(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + // the first IP is the real IP + if (!StringUtils.isEmpty(ip) && ip.indexOf(",") > 0) { + ip = ip.substring(0, ip.indexOf(",")); + } + return ip; } private void updateResponse(HttpServletResponse response) throws IOException { @@ -91,24 +115,37 @@ public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered } } + @Setter + @Getter + private static class HttpRequestLog { + HttpRequestTraceLog request; + + HttpResponseTraceLog response; + } + @Setter @Getter private static class HttpRequestTraceLog { - private String accessId; private String path; + private String userId; - private String parameterMap; + private String method; + private String time; + private String requestBody; + + private String ip; } @Setter @Getter private static class HttpResponseTraceLog { - private String accessId; private Integer status; + private String time; + private String body; } } -- Gitee From 4ff4b5171fe06edcf981e3bdecaf1c4d2effd559 Mon Sep 17 00:00:00 2001 From: zhangbeiyuan-hw Date: Tue, 27 Oct 2020 15:16:05 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E5=8F=82=E6=95=B0=EF=BC=8C=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC=E6=98=AF200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index ce084fd..00d8bdb 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -25,7 +25,7 @@ server: key-store-type: ${SSL_KEY_STORE_TYPE:} key-alias: ${SSL_KEY_ALIAS:} tomcat: - max-threads: 500 + max-threads: 200 servlet: session: timeout: 1800 -- Gitee From 2e74c0771bba8ebf56c8934a1cbb97aebf168842 Mon Sep 17 00:00:00 2001 From: zhangbeiyuan-hw Date: Tue, 27 Oct 2020 15:16:54 +0800 Subject: [PATCH 3/3] =?UTF-8?q?springboot=E9=BB=98=E8=AE=A4=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E8=BF=9E=E6=8E=A5=E6=98=AF200=EF=BC=8C=E8=BF=99?= =?UTF-8?q?=E9=87=8C=E4=B8=8D=E7=94=A8=E5=86=8D=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 00d8bdb..dce1380 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -24,8 +24,6 @@ server: key-store-password: ${SSL_KEY_STORE_PASSWORD:} key-store-type: ${SSL_KEY_STORE_TYPE:} key-alias: ${SSL_KEY_ALIAS:} - tomcat: - max-threads: 200 servlet: session: timeout: 1800 -- Gitee