基础请求信息初始化

This commit is contained in:
白茶清欢 2025-06-05 14:55:30 +08:00
parent 2ac14ec562
commit 7cf8d3a6c9
3 changed files with 21 additions and 4 deletions

View File

@ -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"; // 运行时线程上下文
}

View File

@ -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<String, String> requestPathParam; // path 参数
@JsonProperty(RecordField.REQUEST_BODY)
private Map<String, String> requestBody; // 请求body
private String requestBody; // 请求body
@JsonIgnore
private byte[] requestBodyRaw; // 原始请求body
@JsonProperty(RecordField.REQUEST_URI)
private String requestUri; // 请求接口
}

View File

@ -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
}