diff --git a/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/SpringMvcTraceFilter.java b/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/ServletTraceFilter.java index 76fc93e..dc3c1b0 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/SpringMvcTraceFilter.java +++ b/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/ServletTraceFilter.java @@ -3,16 +3,10 @@ package cn.iocoder.dashboard.framework.tracer.filter; import cn.hutool.core.util.StrUtil; import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils; import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Before; -import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; -import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; @@ -27,42 +21,44 @@ import java.io.IOException; @Slf4j @Component -public class SpringMvcTraceFilter implements HandlerInterceptor { +public class ServletTraceFilter implements Filter { @Value("${cn.iocoder.tracer.name:global-trace-id}") private String traceIdName; - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - // 请求中traceId - String reqTraceId = (String)request.getAttribute(traceIdName); - // skywalking中的traceId - String skywalkingTraceId = TracerUtils.getSkywalkingTraceId(); - String traceId ; - if (null == reqTraceId && StrUtil.isBlank(skywalkingTraceId)) { - // 两者皆空,添加默认的. - traceId = TracerUtils.getTraceId(); - request.setAttribute(traceIdName, traceId); - } else if (null == reqTraceId && StrUtil.isNotBlank(skywalkingTraceId)){ - // 若请求空,则添加,为没有skywalking的系统添加一个TraceId - traceId = skywalkingTraceId; - request.setAttribute(traceIdName, traceId); - } else if (null != reqTraceId && StrUtil.isBlank(skywalkingTraceId)) { - // 请求非空, skywalking为空 - traceId = reqTraceId; - } else { - // 两者皆非空,不动请求头 - traceId = skywalkingTraceId; - } - TracerUtils.saveThreadTraceId(traceId); - log.debug("请求进入,添加traceId[{}]", traceId); - return true; - } - - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { - // 请求结束,删除本地的链路流水号 - log.debug("请求结束,删除traceId[{}]", TracerUtils.getTraceId()); - TracerUtils.deleteThreadTraceId(); + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; + try { + // 请求中traceId + String reqTraceId = (String)httpServletRequest.getHeader(traceIdName); + // skywalking中的traceId + String skywalkingTraceId = TracerUtils.getSkywalkingTraceId(); + String traceId ; + if (null == reqTraceId && StrUtil.isBlank(skywalkingTraceId)) { + // 两者皆空,添加默认的. + traceId = TracerUtils.getTraceId(); + httpServletResponse.setHeader(traceIdName, traceId); + } else if (null == reqTraceId && StrUtil.isNotBlank(skywalkingTraceId)){ + // 若请求空,则添加,为没有skywalking的系统添加一个TraceId + traceId = skywalkingTraceId; + httpServletResponse.setHeader(traceIdName, traceId); + } else if (null != reqTraceId && StrUtil.isBlank(skywalkingTraceId)) { + // 请求非空, skywalking为空 + traceId = reqTraceId; + } else { + // 两者皆非空,不动请求头 + traceId = skywalkingTraceId; + } + TracerUtils.saveThreadTraceId(traceId); + log.debug("请求进入,添加traceId[{}]", traceId); + filterChain.doFilter(httpServletRequest, httpServletResponse); + } finally { + // 请求结束,删除本地的链路流水号 + log.debug("请求结束,删除traceId[{}]", TracerUtils.getTraceId()); + TracerUtils.deleteThreadTraceId(); + } } - } diff --git a/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/WebConfig.java b/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/WebConfig.java deleted file mode 100644 index 4dddc08..0000000 --- a/src/main/java/cn/iocoder/dashboard/framework/tracer/filter/WebConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.dashboard.framework.tracer.filter; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import javax.annotation.Resource; - -@Configuration -@Component -public class WebConfig implements WebMvcConfigurer { - - @Resource - private SpringMvcTraceFilter springMvcTraceFilter; - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(this.springMvcTraceFilter).addPathPatterns("/**"); - } - -} \ No newline at end of file