diff --git a/pom.xml b/pom.xml index 0676cb66e..4f826c5d6 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,11 @@ flume-zipkin-metrics-sink ${brave.version} + + com.google.guava + guava + 18.0 + org.springframework.cloud spring-cloud-starter-zuul diff --git a/spring-cloud-sleuth-zipkin/pom.xml b/spring-cloud-sleuth-zipkin/pom.xml index 2251b3869..a1cd2f182 100644 --- a/spring-cloud-sleuth-zipkin/pom.xml +++ b/spring-cloud-sleuth-zipkin/pom.xml @@ -50,6 +50,10 @@ org.springframework.cloud spring-cloud-starter-zuul + + com.google.guava + guava + org.projectlombok lombok diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java index f80ef8dd3..472d2d483 100644 --- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java +++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java @@ -16,7 +16,6 @@ import com.github.kristofa.brave.ClientTracer; import com.github.kristofa.brave.ClientTracerConfig; import com.github.kristofa.brave.EndPointSubmitterConfig; import com.github.kristofa.brave.FixedSampleRateTraceFilter; -import com.github.kristofa.brave.LoggingSpanCollectorImpl; import com.github.kristofa.brave.ServerSpanThreadBinderConfig; import com.github.kristofa.brave.ServerTracerConfig; import com.github.kristofa.brave.SpanCollector; diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinFilter.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinFilter.java new file mode 100644 index 000000000..f8de9d915 --- /dev/null +++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinFilter.java @@ -0,0 +1,43 @@ +package org.springframework.cloud.sleuth.zipkin.web; + +import org.springframework.cloud.sleuth.zipkin.ZipkinInterceptor; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; + +/** + * @author Spencer Gibb + */ +public class ZipkinFilter implements Filter { + + private final ZipkinInterceptor zipkinInterceptor; + + public ZipkinFilter(ZipkinInterceptor zipkinInterceptor) { + this.zipkinInterceptor = zipkinInterceptor; + } + + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + //NOOP + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + zipkinInterceptor.preTrace(request); + + chain.doFilter(request, response); + + zipkinInterceptor.postTrace(request); + } + + @Override + public void destroy() { + //NOOP + } +} diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java index 3fcf7e96a..56c2d1c34 100644 --- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java +++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java @@ -2,6 +2,7 @@ package org.springframework.cloud.sleuth.zipkin.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -34,10 +35,15 @@ public class ZipkinWebAutoConfiguration { @Autowired private ServerTracer serverTracer; - @Bean + /*@Bean public ZipkinHandlerInterceptor zipkinHandlerInterceptor() { return new ZipkinHandlerInterceptor(httpServletRequestInterceptor()); - } + }*/ + + @Bean + public ZipkinFilter zipkinFilter() { + return new ZipkinFilter(httpServletRequestInterceptor()); + } @Bean public HttpServletRequestInterceptor httpServletRequestInterceptor() { @@ -45,8 +51,9 @@ public class ZipkinWebAutoConfiguration { } @Bean - public WebMvcConfigurerAdapter webMvcConfigurerAdapter() { - return new ZipkinWebConfigurer(zipkinHandlerInterceptor()); + @ConditionalOnBean(ZipkinHandlerInterceptor.class) + public WebMvcConfigurerAdapter webMvcConfigurerAdapter(ZipkinHandlerInterceptor zipkinHandlerInterceptor) { + return new ZipkinWebConfigurer(zipkinHandlerInterceptor); } @Configuration