定义各种字段/class结构/序列化/反序列化

This commit is contained in:
白茶清欢 2025-06-04 16:03:17 +08:00
commit 6fa8521dd5
13 changed files with 294 additions and 0 deletions

38
.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

5
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# Environment-dependent path to Maven home directory
/mavenHomeManager.xml

7
.idea/encodings.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

14
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</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>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

62
pom.xml Normal file
View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zhangdeman</groupId>
<artifactId>common-filter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.14</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
<!-- jackson 2.x 相关依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.19.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.19.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.19.0</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,9 @@
package cn.zhangdeman;
// http 一些枚举key
public class HttpField {
private static final String HEADER_TRACE_ID = "X-Front-Trace-Id"; // 透传过来的trace id
private static final String HEADER_CLIENT_IP = "X-Client-Ip"; // 请求来源IP
private static final String HEADER_USER_AGENT = "User-Agent"; // 请求来源 ua
private static final String HEADER_AUTHORIZATION = "Authorization"; // 请求来源 authorization
}

View File

@ -0,0 +1,62 @@
package cn.zhangdeman;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Map;
// 初始化的请求信息
@Getter
@Setter
public class InitRequestData implements Serializable {
@JsonProperty(RecordField.REQUEST_ID)
private String requestId; // 本次请求request id
@JsonProperty(RecordField.COST)
private Long cost; // 请求耗时
@JsonProperty(RecordField.SERVER_IP)
private String serverIp; // 服务器Ip
@JsonProperty(RecordField.SERVER_HOSTNAME)
private String serverHostname; // 服务器hostname
@JsonProperty(RecordField.REQUEST_UA)
private String userAgent; // 客户端ua
@JsonProperty(RecordField.REQUEST_CLIENT_IP)
private String clientIp; // 客户端IP
@JsonProperty(RecordField.FINISH_TIMESTAMP)
private Long finishTimeStamp; // 完成请求时间
@JsonProperty(RecordField.TRACE_ID)
private String traceId; // 全局trace id
@JsonProperty(RecordField.START_TIMESTAMP)
private Long startTimeStamp; // 开始请求时间
@JsonProperty(RecordField.CONTEXT_DATA)
private Map<String, Object> logData; // 本条日志的上下文信息
@JsonProperty(RecordField.RESPONSE_DATA)
private Object responseData; // 响应数据
// 序列化
@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
// 序列化
public String serializable() {
return toString();
}
// 反序列化
public InitRequestData unserializable(String json) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(json, new TypeReference<InitRequestData>() {
});
}
}

View File

@ -0,0 +1,22 @@
package cn.zhangdeman;
// 日志相关数据的枚举值
public class LogField {
// 定义日志类型
public static final String LOG_TYPE_ACCESS = "access"; // 服务请求记录
public static final String LOG_TYPE_INPUT = "input"; // 请求输入信息
public static final String LOG_TYPE_OUTPUT = "output"; // 请求输出信息
public static final String LOG_TYPE_API = "api"; // 接口请求记录
public static final String LOG_TYPE_MONITOR = "monitor"; // 系统监控
public static final String LOG_TYPE_DATABASE = "database"; // 数据库
public static final String LOG_TYPE_REDIS = "redis"; // redis日志
public static final String LOG_TYPE_KAFKA = "kafka"; // kafka日志
// 定义各种日志文件名称
public static final String LOG_ACCESS_NAME = "access.log"; // 访问日志
public static final String LOG_REQUEST_NAME = "request.log"; // 请求日志
public static final String LOG_API_NAME = "api.log"; // 三方调用日志
public static final String LOG_MONITOR_NAME = "monitor.log"; // 监控日志
public static final String LOG_DATABASE_NAME = "database.log"; // 数据库日志
public static final String LOG_CACHE_NAME = "cache.log"; // 缓存日志
public static final String LOG_MESSAGE_NAME = "message.log"; // 消息队列日志
}

View File

@ -0,0 +1,9 @@
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) {
}
}

View File

@ -0,0 +1,5 @@
package cn.zhangdeman;
public class Ordered {
public static final int REQUEST_ID = -10000; // 请求ID生成过滤器
}

View File

@ -0,0 +1,17 @@
package cn.zhangdeman;
// 记录的各种字段枚举值
public class RecordField {
public static final String TRACE_ID = "trace_id"; // trace_id
public static final String REQUEST_ID = "request_id"; // request_id
public static final String START_TIMESTAMP = "start_timestamp"; // 开始请求时间
public static final String FINISH_TIMESTAMP = "finish_timestamp"; // 完成请求时间
public static final String SERVER_IP = "server_ip"; // 服务器IP
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_UA = "request_user_agent"; // 请求ua
public static final String REQUEST_CLIENT_IP = "request_client"; // 请求客户端
}

View File

@ -0,0 +1,38 @@
package cn.zhangdeman;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import org.springframework.core.annotation.Order;
import java.io.IOException;
// 初始化请求
@WebFilter("/*") // 所有接口请求均会触发次过滤器
@Order(Ordered.REQUEST_ID) // 足够小, 保证最先执行
public class RequestInitFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
InitRequestData initRequestData = new InitRequestData();
setBaseInfo(initRequestData); // 设置基础信息
setRequestId(); // 设置请求ID, 每次请求军重新生成
}
// 设置基础信息
private void setBaseInfo(InitRequestData initRequestData) {
initRequestData.setStartTimeStamp(System.currentTimeMillis()); // 开始请求时间
}
// 设置请求ID
private void setRequestId() {
}
}