2016-11-15 71 views
1

我在我的web应用程序中使用spring-cloud-sleuth。我接到的第三方不幸的是在X-B3-TraceId标题中发送UUID。但是,在将字符串转换为十六进制时,由于UUID中的' - '字符,Spring中的TraceFilter可能会侦测到错误。所以我决定编写我自己的过滤器,它将在TraceFilter之前拦截请求,并从头中删除跟踪标识。这是我的配置:更改弹簧启动过滤器的顺序

@Bean 
    public FilterRegistrationBean getZipkinFilterRegistrationBean() { 

     FilterRegistrationBean bean = new FilterRegistrationBean(); 
     bean.setFilter(new ZipkinHeaderReplaceFilter()); 
     bean.setOrder(1); 
     bean.addUrlPatterns("/"); 
     return bean; 
    } 

这是由弹簧云侦探的TraceFilter:

@Order(TraceFilter.ORDER) 
public class TraceFilter extends GenericFilterBean { 

    protected static final int ORDER = Ordered.HIGHEST_PRECEDENCE + 5; 
    ......... 
} 

所以跟踪滤波器的阶正是-2147483643,我认为这使得之前出现在我的过滤。我不想改变我的过滤器的顺序。如何将TraceFilter的订单更改为2,因为弹簧引导自动配置会自动注册TraceFilter

+0

为什么不向FilterRegistrationBean注册TraceFilter并设置顺序? – kuhajeyan

回答

0

这里是spring boot filter的细节,它说:

如果以公约为基础测绘不够灵活,你可以使用ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean类的完全控制。

我相信你可以改变这些类的顺序。过滤顺序与你在config类中添加(过滤你的配置类)顺序相同。

+0

TraceFilter不在我的控制之下。它的形式是图书馆。 – falcon