| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package cn.seecoder.seecoderlog.interceptor;
- import cn.seecoder.seecoderlog.context.TraceContext;
- import cn.seecoder.seecoderlog.context.TraceInfo;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.servlet.http.HttpServletResponse;
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
- public class SeecoderRequestInterceptor implements HandlerInterceptor {
- private static final String START_TIME = "startTime";
- private static final String TRACE_INFO_ATTR = "traceInfo";
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- // 记录请求开始时间
- request.setAttribute(START_TIME, System.currentTimeMillis());
- // 处理traceId和rpcId
- String traceId = request.getHeader("X-Trace-Id");
- if (traceId == null || traceId.isEmpty()) {
- // 生成新的traceId
- traceId = TraceInfo.generateTraceId();
- }
- String parentSpanId = request.getHeader("X-Span-Id");
- String spanId = TraceInfo.generateChildSpanId(parentSpanId);
- TraceInfo traceInfo = new TraceInfo(traceId, spanId);
- // 设置到当前线程上下文
- TraceContext.setTraceInfo(traceInfo);
- request.setAttribute(TRACE_INFO_ATTR, traceInfo);
- return true;
- }
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
- }
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
- }
- }
|