|
|
|
@ -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("-", ""); |
|
|
|
} |
|
|
|
} |