diff --git a/.idea/misc.xml b/.idea/misc.xml index d61b968..87afe53 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,6 +8,50 @@ + + + + diff --git a/src/main/java/cn/zhangdeman/Main.java b/src/main/java/cn/zhangdeman/Main.java index dd5663d..2b54e55 100644 --- a/src/main/java/cn/zhangdeman/Main.java +++ b/src/main/java/cn/zhangdeman/Main.java @@ -1,7 +1,6 @@ package cn.zhangdeman; -//TIP To Run code, press or -// click the icon in the gutter. + public class Main { public static void main(String[] args) { diff --git a/src/main/java/cn/zhangdeman/RecordField.java b/src/main/java/cn/zhangdeman/RecordField.java index 3ddf677..f2d653d 100644 --- a/src/main/java/cn/zhangdeman/RecordField.java +++ b/src/main/java/cn/zhangdeman/RecordField.java @@ -10,7 +10,6 @@ public class RecordField { public static final String SERVER_HOSTNAME = "server_hostname"; // 服务器名称 public static final String COST = "cost"; // 请求耗时 public static final String CONTEXT_DATA = "context_data"; // 本条日志的上下文信息 - public static final String RESPONSE_DATA = "response_data"; // 接口响应数据 // 请求信息 public static final String REQUEST_INFO = "request_info"; // 请求信息 public static final String REQUEST_UA = "user_agent"; // 请求ua @@ -26,4 +25,13 @@ public class RecordField { public static final String REQUEST_URI = "uri"; // 请求接口 public static final String RUNTIME_THREAD_CONTEXT = "runtime_thread_context"; // 运行时线程上下文 + + public static final String RESPONSE_INFO = "response_data"; // 接口响应数据 + public static final String RESPONSE_CODE = "code"; // 接口响应数据状态码 + public static final String RESPONSE_MESSAGE = "message"; // 接口响应数据状态码描述 + public static final String RESPONSE_DATA = "data"; // 接口响应数据 + public static final String RESPONSE_ERROR_DETAIL = "err_detail"; // 异常详细信息 + public static final String RESPONSE_HTTP_CODE = "http_code"; // 苍蝇状态码,默认200 + public static final String RESPONSE_HEADER = "header"; // 响应header + public static final String RESPONSE_COOKIE = "cookie"; // 响应header } diff --git a/src/main/java/cn/zhangdeman/Request.java b/src/main/java/cn/zhangdeman/Request.java index 1eda4c9..6493f0a 100644 --- a/src/main/java/cn/zhangdeman/Request.java +++ b/src/main/java/cn/zhangdeman/Request.java @@ -6,7 +6,6 @@ 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; @@ -14,7 +13,6 @@ import java.util.Map; @Getter @Setter @JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知属性字段 -@Component public class Request { @JsonIgnore HttpServletRequest httpServletRequest;// 原始请求 diff --git a/src/main/java/cn/zhangdeman/Response.java b/src/main/java/cn/zhangdeman/Response.java new file mode 100644 index 0000000..17582a9 --- /dev/null +++ b/src/main/java/cn/zhangdeman/Response.java @@ -0,0 +1,48 @@ +package cn.zhangdeman; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.servlet.http.HttpServletResponse; +import lombok.Getter; +import lombok.Setter; + +import java.util.HashMap; +import java.util.Map; + +// 响应数据 +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知属性字段 +public class Response { + @JsonProperty(RecordField.RESPONSE_CODE) + private String code; // 响应业务状态码 + @JsonProperty(RecordField.RESPONSE_MESSAGE) + private String message; // 响应消息 + @JsonProperty(RecordField.RESPONSE_DATA) + private Object data; // 响应数据 + @JsonProperty(RecordField.RESPONSE_ERROR_DETAIL) + private Object errorDetail; // 异常详情 + @JsonProperty(RecordField.RESPONSE_HTTP_CODE) + private Integer httpCode = 200; // 响应http状态码 + @JsonProperty(RecordField.RESPONSE_HEADER) + private Map header; // 响应头 + @JsonProperty(RecordField.RESPONSE_COOKIE) + private Map cookie; // 响应cookie + @JsonIgnore + private HttpServletResponse httpServletResponse; // 响应实例 + + public void addHeader(String key, String value) { + if (null == this.header) { + this.header = new HashMap<>(); + } + this.header.put(key, value); + } + + public void addCookie(String key, String value) { + if (null == this.cookie) { + this.cookie = new HashMap<>(); + } + this.cookie.put(key, value); + } +} diff --git a/src/main/java/cn/zhangdeman/Context.java b/src/main/java/cn/zhangdeman/RuntimeContext.java similarity index 86% rename from src/main/java/cn/zhangdeman/Context.java rename to src/main/java/cn/zhangdeman/RuntimeContext.java index bf5c17a..8c5fd53 100644 --- a/src/main/java/cn/zhangdeman/Context.java +++ b/src/main/java/cn/zhangdeman/RuntimeContext.java @@ -15,7 +15,7 @@ import java.util.Map; @Getter @Setter @JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知属性字段 -public class Context implements Serializable { +public class RuntimeContext implements Serializable { @JsonProperty(RecordField.REQUEST_ID) private String requestId; // 本次请求request id @JsonProperty(RecordField.COST) @@ -36,6 +36,8 @@ public class Context implements Serializable { private Object responseData; // 响应数据 @JsonProperty(RecordField.REQUEST_INFO) private Request requestInfo;// 请求信息 + @JsonProperty(RecordField.RESPONSE_INFO) + private Response responseInfo; // 响应信息 // 序列化 @Override @@ -54,9 +56,9 @@ public class Context implements Serializable { } // 反序列化 - public Context unserializable(String json) throws JsonProcessingException { + public RuntimeContext unserializable(String json) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(json, new TypeReference() { + return mapper.readValue(json, new TypeReference() { }); } } diff --git a/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java b/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java index efc382c..1db1c37 100644 --- a/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java +++ b/src/main/java/cn/zhangdeman/filter/RequestInitFilter.java @@ -1,10 +1,7 @@ package cn.zhangdeman.filter; -import cn.zhangdeman.Context; -import cn.zhangdeman.Ordered; -import cn.zhangdeman.RecordField; -import cn.zhangdeman.Request; +import cn.zhangdeman.*; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; @@ -37,20 +34,20 @@ public class RequestInitFilter extends HttpFilter { @Override 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); // 记录到请求上下文中 + RuntimeContext runtimeContext = new RuntimeContext(); + setBaseInfo(httpServletRequest, runtimeContext); // 设置基础信息 + setRequestQuery(runtimeContext.getRequestInfo()); // 设置请求query信息 + setRequestBody(runtimeContext.getRequestInfo()); // 设置请求Body + setRequestHeaderAndCookie(runtimeContext.getRequestInfo()); // 填充请求信息: header + cookie + setRequestId(runtimeContext); // 设置请求ID, 每次请求需要重新生成 + httpServletRequest.setAttribute(RecordField.RUNTIME_THREAD_CONTEXT, runtimeContext); // 记录到请求上下文中 // 继续向后执行 filterChain.doFilter(httpServletRequest, servletResponse); System.out.println("init request do filter 请求执行完成"); } // 设置基础信息 - private void setBaseInfo(HttpServletRequest httpServletRequest, Context context) { + private void setBaseInfo(HttpServletRequest httpServletRequest, RuntimeContext runtimeContext) { // request 信息 Request request = new Request(); request.setHttpServletRequest(httpServletRequest); @@ -59,10 +56,15 @@ public class RequestInitFilter extends HttpFilter { request.setRequestContentType(httpServletRequest.getContentType()); // 请求类型 request.setRequestUri(httpServletRequest.getRequestURI()); // 请求uri // server 信息 - context.setServerIp(httpServletRequest.getLocalAddr()); // 服务器IP - context.setServerHostname(httpServletRequest.getLocalName()); // 服务器名称 - context.setRequestInfo(request); // 请求信息 - context.setStartTimeStamp(System.currentTimeMillis()); // 开始请求时间 + runtimeContext.setServerIp(httpServletRequest.getLocalAddr()); // 服务器IP + runtimeContext.setServerHostname(httpServletRequest.getLocalName()); // 服务器名称 + runtimeContext.setRequestInfo(request); // 请求信息 + runtimeContext.setStartTimeStamp(System.currentTimeMillis()); // 开始请求时间 + // 响应信息 + Response response = new Response(); + response.setHeader(new HashMap<>()); + response.setCookie(new HashMap<>()); + runtimeContext.setResponseInfo(response); // 响应信息 } // 设置请求Query @@ -117,6 +119,10 @@ public class RequestInitFilter extends HttpFilter { } // 设置请求ID - private void setRequestId(Context context) { + private void setRequestId(RuntimeContext runtimeContext) { + } + + // 响应信息 + private void setResponse(Response response) { } }