feat: 添加traceId;记录请求和响应数据

This commit is contained in:
曹鹏飞 2025-05-30 11:45:02 +08:00
parent 437787ca44
commit ab47a6c450
1 changed files with 45 additions and 4 deletions

View File

@ -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) {