From ab47a6c4502d101dba6e86abc638cc1381e2f96f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 30 May 2025 11:45:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0traceId=EF=BC=9B?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E8=AF=B7=E6=B1=82=E5=92=8C=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starter/filter/TraceIdFilter.java | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/filter/TraceIdFilter.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/filter/TraceIdFilter.java index 69a54aa0..357bbab3 100644 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/filter/TraceIdFilter.java +++ b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/filter/TraceIdFilter.java @@ -18,6 +18,8 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; @@ -66,24 +68,63 @@ public class TraceIdFilter extends OncePerRequestFilter { private String getResponseBody(ContentCachingResponseWrapper response) { if (shouldSkipBodyLogging(response.getContentType())){ - return "[不记录]"+response.getContentType(); + return "不记录"+response.getContentType(); } byte[] buf = response.getContentAsByteArray(); if (buf.length > 0) { return new String(buf, StandardCharsets.UTF_8); } - return "[无数据]"; + return "无数据"; } private void logRequest(ContentCachingRequestWrapper request) { log.debug("【HTTP Request】"); - log.debug("URL : {}", request.getRequestURL().toString()); + log.debug("URL : {}", request.getRequestURI() + (StrUtil.isBlank(request.getQueryString()) ? "" : "?" + request.getQueryString())); + log.debug("HOST : {}", getHost(request)); log.debug("METHOD : {}", request.getMethod()); log.debug("HEADERS: {}", getHeadersAsString(request)); log.debug("USER : {}", getUserInfo(request)); log.debug("BODY : {}", getRequestBody(request)); } + private String getHost(HttpServletRequest request) { + String forwardedHost = request.getHeader("Host"); + if (forwardedHost != null && !forwardedHost.isEmpty()) { + return forwardedHost.split(",")[0].trim(); + } + String forwardedHeader = request.getHeader("Forwarded"); + if (forwardedHeader != null) { + String host = parseForwardedHeader(forwardedHeader, "host"); + if (host != null) return host; + } + return getHostFromRequestURL(request); + } + + private String getHostFromRequestURL(HttpServletRequest request) { + StringBuffer requestURL = request.getRequestURL(); + String urlString = requestURL.toString(); + + // 提取主机部分 + try { + URI uri = new URI(urlString); + return uri.getAuthority(); // 返回格式: "example.com:8080" + } catch (URISyntaxException e) { + return "未知"; + } + } + + private String parseForwardedHeader(String header, String key) { + String[] parts = header.split(";"); + for (String part : parts) { + part = part.trim(); + if (part.startsWith(key + "=")) { + String value = part.substring(key.length() + 1); + return value.replace("\"", ""); + } + } + return null; + } + private String getUserInfo(ContentCachingRequestWrapper request) { String token=request.getHeader("authorization"); if (StrUtil.isBlank(token)){ @@ -113,7 +154,7 @@ public class TraceIdFilter extends OncePerRequestFilter { if (buf.length > 0) { return new String(buf, StandardCharsets.UTF_8).replaceAll("\\s", ""); } - return "[无数据]"; + return "无数据"; } private String getHeadersAsString(HttpServletRequest request) {