Commit a5bdf5eb authored by 杨锐's avatar 杨锐

自定义DelegatingTracingFilter,当http method为options时,直接执行chain.doFilter(request, response)。

parent ec19c8cd
...@@ -7,8 +7,8 @@ import brave.okhttp3.TracingInterceptor; ...@@ -7,8 +7,8 @@ import brave.okhttp3.TracingInterceptor;
import brave.propagation.B3Propagation; import brave.propagation.B3Propagation;
import brave.propagation.ExtraFieldPropagation; import brave.propagation.ExtraFieldPropagation;
import brave.spring.web.TracingClientHttpRequestInterceptor; import brave.spring.web.TracingClientHttpRequestInterceptor;
import brave.spring.webmvc.DelegatingTracingFilter;
import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor; import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor;
import cn.quantgroup.tech.brave.filter.CustomDelegatingTracingFilter;
import cn.quantgroup.tech.brave.properties.BraveProperties; import cn.quantgroup.tech.brave.properties.BraveProperties;
import cn.quantgroup.tech.brave.properties.ServiceProperties; import cn.quantgroup.tech.brave.properties.ServiceProperties;
import cn.quantgroup.tech.brave.service.ITechHttpClient; import cn.quantgroup.tech.brave.service.ITechHttpClient;
...@@ -245,7 +245,7 @@ public class BraveAutoConfiguration { ...@@ -245,7 +245,7 @@ public class BraveAutoConfiguration {
@Bean @Bean
public FilterRegistrationBean registrationBean() { public FilterRegistrationBean registrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(); FilterRegistrationBean registrationBean = new FilterRegistrationBean();
DelegatingTracingFilter delegatingTracingFilter = new DelegatingTracingFilter(); CustomDelegatingTracingFilter delegatingTracingFilter = new CustomDelegatingTracingFilter();
registrationBean.setFilter(delegatingTracingFilter); registrationBean.setFilter(delegatingTracingFilter);
registrationBean.setName("techDelegatingTracingFilter"); registrationBean.setName("techDelegatingTracingFilter");
registrationBean.setOrder(Integer.MIN_VALUE); registrationBean.setOrder(Integer.MIN_VALUE);
......
package cn.quantgroup.tech.brave.filter;
import brave.servlet.TracingFilter;
import brave.spring.webmvc.DelegatingTracingFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* Similar to {@link TracingFilter}, except that it initializes from Spring.
*
* <p> {@link org.springframework.web.filter.DelegatingFilterProxy} is similar, but it uses
* volatile references as it allows lazy initialization from doGet. This filter cannot do that
* anyway because {@code ServletRequest.getServletContext()} was added after servlet 2.5!
*/
@Slf4j
public final class CustomDelegatingTracingFilter implements Filter {
// servlet ensures create is directly followed by init, so no need for volatile
DelegatingTracingFilter delegatingTracingFilter;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
// don't break on initialization error.
if (HttpMethod.OPTIONS.name().equals(httpServletRequest.getMethod()) || delegatingTracingFilter == null) {
chain.doFilter(request, response);
} else {
delegatingTracingFilter.doFilter(request, response, chain);
}
}
@Override
public void init(FilterConfig filterConfig) {
DelegatingTracingFilter delegatingTracingFilter = new DelegatingTracingFilter();
delegatingTracingFilter.init(filterConfig);
this.delegatingTracingFilter = delegatingTracingFilter;
}
@Override
public void destroy() {
// TracingFilter is stateless, so nothing to destroy
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment