使用Spring Cloud Sleuth进行服务调用返回的HTTP响应,看不到在调用中使用的traceId在HTTP响应首部中返回。因为Spring Cloud Sleuth团队认为返回的跟踪数据是一个潜在的安全问题。
可通过增加一个Zuul后置响应过滤器实现
maven包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
Zuul Server中增加代码
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
@Component
public class ResponseFilter extends ZuulFilter{
private static final int FILTER_ORDER=1;
private static final boolean SHOULD_FILTER=true;
@Autowired
Tracer tracer;
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return FILTER_ORDER;
}
@Override
public boolean shouldFilter() {
return SHOULD_FILTER;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
ctx.getResponse().addHeader("traceId", tracer.getCurrentSpan().traceIdString());
return null;
}
}