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.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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue