增加初始化Context相关定义
This commit is contained in:
parent
7cf8d3a6c9
commit
c05086852d
44
.idea/misc.xml
generated
44
.idea/misc.xml
generated
@ -8,6 +8,50 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="NullableNotNullManager">
|
||||
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
|
||||
<option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
|
||||
<option name="myNullables">
|
||||
<value>
|
||||
<list size="14">
|
||||
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.Nullable" />
|
||||
<item index="1" class="java.lang.String" itemvalue="com.android.annotations.Nullable" />
|
||||
<item index="2" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
|
||||
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
|
||||
<item index="4" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
|
||||
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
|
||||
<item index="6" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.Nullable" />
|
||||
<item index="7" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
|
||||
<item index="8" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
|
||||
<item index="9" class="java.lang.String" itemvalue="jakarta.annotation.Nullable" />
|
||||
<item index="10" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
|
||||
<item index="11" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
|
||||
<item index="12" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
|
||||
<item index="13" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myNotNulls">
|
||||
<value>
|
||||
<list size="14">
|
||||
<item index="0" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
|
||||
<item index="1" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
|
||||
<item index="2" class="java.lang.String" itemvalue="org.jspecify.annotations.NonNull" />
|
||||
<item index="3" class="java.lang.String" itemvalue="jakarta.annotation.Nonnull" />
|
||||
<item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
|
||||
<item index="5" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
|
||||
<item index="6" class="java.lang.String" itemvalue="lombok.NonNull" />
|
||||
<item index="7" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
|
||||
<item index="8" class="java.lang.String" itemvalue="com.android.annotations.NonNull" />
|
||||
<item index="9" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
|
||||
<item index="10" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
|
||||
<item index="11" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
|
||||
<item index="12" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
|
||||
<item index="13" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="ms-21" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
|
@ -1,7 +1,6 @@
|
||||
package cn.zhangdeman;
|
||||
|
||||
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
|
||||
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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;// 原始请求
|
||||
|
48
src/main/java/cn/zhangdeman/Response.java
Normal file
48
src/main/java/cn/zhangdeman/Response.java
Normal file
@ -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<String, String> header; // 响应头
|
||||
@JsonProperty(RecordField.RESPONSE_COOKIE)
|
||||
private Map<String, String> 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);
|
||||
}
|
||||
}
|
@ -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<Context>() {
|
||||
return mapper.readValue(json, new TypeReference<RuntimeContext>() {
|
||||
});
|
||||
}
|
||||
}
|
@ -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) {
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user