feat: 添加traceId;记录请求和响应数据
This commit is contained in:
parent
437787ca44
commit
ab47a6c450
|
|
@ -18,6 +18,8 @@ import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -66,24 +68,63 @@ public class TraceIdFilter extends OncePerRequestFilter {
|
||||||
|
|
||||||
private String getResponseBody(ContentCachingResponseWrapper response) {
|
private String getResponseBody(ContentCachingResponseWrapper response) {
|
||||||
if (shouldSkipBodyLogging(response.getContentType())){
|
if (shouldSkipBodyLogging(response.getContentType())){
|
||||||
return "[不记录]"+response.getContentType();
|
return "不记录"+response.getContentType();
|
||||||
}
|
}
|
||||||
byte[] buf = response.getContentAsByteArray();
|
byte[] buf = response.getContentAsByteArray();
|
||||||
if (buf.length > 0) {
|
if (buf.length > 0) {
|
||||||
return new String(buf, StandardCharsets.UTF_8);
|
return new String(buf, StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
return "[无数据]";
|
return "无数据";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logRequest(ContentCachingRequestWrapper request) {
|
private void logRequest(ContentCachingRequestWrapper request) {
|
||||||
log.debug("【HTTP 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("METHOD : {}", request.getMethod());
|
||||||
log.debug("HEADERS: {}", getHeadersAsString(request));
|
log.debug("HEADERS: {}", getHeadersAsString(request));
|
||||||
log.debug("USER : {}", getUserInfo(request));
|
log.debug("USER : {}", getUserInfo(request));
|
||||||
log.debug("BODY : {}", getRequestBody(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) {
|
private String getUserInfo(ContentCachingRequestWrapper request) {
|
||||||
String token=request.getHeader("authorization");
|
String token=request.getHeader("authorization");
|
||||||
if (StrUtil.isBlank(token)){
|
if (StrUtil.isBlank(token)){
|
||||||
|
|
@ -113,7 +154,7 @@ public class TraceIdFilter extends OncePerRequestFilter {
|
||||||
if (buf.length > 0) {
|
if (buf.length > 0) {
|
||||||
return new String(buf, StandardCharsets.UTF_8).replaceAll("\\s", "");
|
return new String(buf, StandardCharsets.UTF_8).replaceAll("\\s", "");
|
||||||
}
|
}
|
||||||
return "[无数据]";
|
return "无数据";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getHeadersAsString(HttpServletRequest request) {
|
private String getHeadersAsString(HttpServletRequest request) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue