SeecoderRequestInterceptor.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package cn.seecoder.seecoderlog.interceptor;
  2. import cn.seecoder.seecoderlog.context.TraceContext;
  3. import cn.seecoder.seecoderlog.context.TraceInfo;
  4. import jakarta.servlet.http.HttpServletRequest;
  5. import jakarta.servlet.http.HttpServletResponse;
  6. import org.springframework.web.servlet.HandlerInterceptor;
  7. import org.springframework.web.servlet.ModelAndView;
  8. public class SeecoderRequestInterceptor implements HandlerInterceptor {
  9. private static final String START_TIME = "startTime";
  10. private static final String TRACE_INFO_ATTR = "traceInfo";
  11. @Override
  12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  13. // 记录请求开始时间
  14. request.setAttribute(START_TIME, System.currentTimeMillis());
  15. // 处理traceId和rpcId
  16. String traceId = request.getHeader("X-Trace-Id");
  17. if (traceId == null || traceId.isEmpty()) {
  18. // 生成新的traceId
  19. traceId = TraceInfo.generateTraceId();
  20. }
  21. String parentSpanId = request.getHeader("X-Span-Id");
  22. String spanId = TraceInfo.generateChildSpanId(parentSpanId);
  23. TraceInfo traceInfo = new TraceInfo(traceId, spanId);
  24. // 设置到当前线程上下文
  25. TraceContext.setTraceInfo(traceInfo);
  26. request.setAttribute(TRACE_INFO_ATTR, traceInfo);
  27. return true;
  28. }
  29. @Override
  30. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  31. }
  32. @Override
  33. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  34. }
  35. }