From 7cf8d3a6c9834f503328131b5cafa6c68f069caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 5 Jun 2025 14:55:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E8=AF=B7=E6=B1=82=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/zhangdeman/RecordField.java | 2 ++ src/main/java/cn/zhangdeman/Request.java | 6 +++++- .../cn/zhangdeman/filter/RequestInitFilter.java | 17 ++++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/cn/zhangdeman/RecordField.java b/src/main/java/cn/zhangdeman/RecordField.java index 24419f3..3ddf677 100644 --- a/src/main/java/cn/zhangdeman/RecordField.java +++ b/src/main/java/cn/zhangdeman/RecordField.java @@ -24,4 +24,6 @@ public class RecordField { public static final String REQUEST_PATH_PARAM = "path_param"; // path参数 public static final String REQUEST_SIZE = "size"; // 参数大小 public static final String REQUEST_URI = "uri"; // 请求接口 + + public static final String RUNTIME_THREAD_CONTEXT = "runtime_thread_context"; // 运行时线程上下文 } diff --git a/src/main/java/cn/zhangdeman/Request.java b/src/main/java/cn/zhangdeman/Request.java index 155fda0..1eda4c9 100644 --- a/src/main/java/cn/zhangdeman/Request.java +++ b/src/main/java/cn/zhangdeman/Request.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.servlet.http.HttpServletRequest; import lombok.Getter; import lombok.Setter; +import org.springframework.stereotype.Component; import java.util.Map; @@ -13,6 +14,7 @@ import java.util.Map; @Getter @Setter @JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知属性字段 +@Component public class Request { @JsonIgnore HttpServletRequest httpServletRequest;// 原始请求 @@ -33,7 +35,9 @@ public class Request { @JsonProperty(RecordField.REQUEST_PATH_PARAM) private Map requestPathParam; // path 参数 @JsonProperty(RecordField.REQUEST_BODY) - private Map requestBody; // 请求body + private String requestBody; // 请求body + @JsonIgnore + private byte[] requestBodyRaw; // 原始请求body @JsonProperty(RecordField.REQUEST_URI) private String requestUri; // 请求接口 } diff --git a/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java b/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java index f48dc9c..efc382c 100644 --- a/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java +++ b/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java @@ -3,10 +3,12 @@ package cn.zhangdeman.filter; import cn.zhangdeman.Context; import cn.zhangdeman.Ordered; +import cn.zhangdeman.RecordField; import cn.zhangdeman.Request; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; +import jakarta.servlet.ServletInputStream; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpFilter; @@ -14,6 +16,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.core.annotation.Order; +import java.io.IOException; +import java.util.Arrays; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -32,13 +36,17 @@ public class RequestInitFilter extends HttpFilter { } @Override - public void doFilter(HttpServletRequest httpServletRequest, HttpServletResponse servletResponse, FilterChain filterChain) { + public void doFilter(HttpServletRequest httpServletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { Context context = new Context(); setBaseInfo(httpServletRequest, context); // 设置基础信息 setRequestQuery(context.getRequestInfo()); // 设置请求query信息 setRequestBody(context.getRequestInfo()); // 设置请求Body setRequestHeaderAndCookie(context.getRequestInfo()); // 填充请求信息: header + cookie setRequestId(context); // 设置请求ID, 每次请求需要重新生成 + httpServletRequest.setAttribute(RecordField.RUNTIME_THREAD_CONTEXT, context); // 记录到请求上下文中 + // 继续向后执行 + filterChain.doFilter(httpServletRequest, servletResponse); + System.out.println("init request do filter 请求执行完成"); } // 设置基础信息 @@ -75,9 +83,12 @@ public class RequestInitFilter extends HttpFilter { } // 设置请求Body - private void setRequestBody(Request request) { + private void setRequestBody(Request request) throws IOException { HttpServletRequest httpServletRequest = request.getHttpServletRequest(); // 原始请求实例 - // httpServletRequest.getInputStream() + ServletInputStream servletInputStream = httpServletRequest.getInputStream(); + byte[] requestBody = servletInputStream.readAllBytes(); + request.setRequestBodyRaw(requestBody); // 原始请求Body + request.setRequestBody(Arrays.toString(requestBody)); // 请求body }