| @ -0,0 +1,42 @@ | |||||
| package com.inspect.nvr.config; | |||||
| import org.slf4j.MDC; | |||||
| import org.springframework.stereotype.Component; | |||||
| import javax.servlet.*; | |||||
| import javax.servlet.http.HttpServletRequest; | |||||
| import java.io.IOException; | |||||
| import java.util.UUID; | |||||
| /** | |||||
| * 用于在每个请求中生成或传递traceId,方便日志追踪 | |||||
| */ | |||||
| @Component | |||||
| public class TraceIdFilter implements Filter { | |||||
| private static final String TRACE_ID = "traceId"; | |||||
| @Override | |||||
| public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { | |||||
| HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; | |||||
| // 1.优先从请求头中获取traceId | |||||
| String traceId = httpServletRequest.getHeader(TRACE_ID); | |||||
| // 2.若请求头中没有traceId,则生成新的traceId | |||||
| if (traceId == null || traceId.isEmpty()) { | |||||
| traceId = generateTraceId(); | |||||
| } | |||||
| try { | |||||
| // 3.将traceId放入MDC中 | |||||
| MDC.put(TRACE_ID, traceId); | |||||
| // 4.继续处理请求 | |||||
| filterChain.doFilter(servletRequest, servletResponse); | |||||
| } finally { | |||||
| // 5.处理完成,清除MDC中的traceId(避免线程复用污染) | |||||
| MDC.clear(); | |||||
| } | |||||
| } | |||||
| private String generateTraceId() { | |||||
| return UUID.randomUUID().toString().replace("-", ""); | |||||
| } | |||||
| } | |||||