更改春季启动过滤器的顺序

时间:2016-11-15 01:46:57

标签: spring spring-mvc spring-boot zipkin spring-cloud-sleuth

我在我的网络应用程序中使用spring-cloud-sleuth。不幸的是,我接到来电的第三方是在X-B3-TraceId标头中发送UUID。但春天的TraceFilter因为' - '从字符串转换为十六进制时UUID中的字符。所以我决定编写自己的过滤器,它将在TraceFilter之前拦截请求,并从标头中删除跟踪ID。这是我的配置:

    @Bean
    public FilterRegistrationBean getZipkinFilterRegistrationBean() {

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

这是来自spring-cloud-sleuth的TraceFilter:

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

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

因此,跟踪过滤器的顺序正好是-2147483643,我认为这会使它出现在我的过滤器之前。我不想改变我的过滤器的顺序。由于弹簧启动自动配置会自动注册TraceFilter,如何将2的顺序更改为TraceFilter

1 个答案:

答案 0 :(得分:0)

以下是spring boot filter的详细信息,它说:

  

如果基于约定的映射不够灵活,您可以使用ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean类进行完全控制。

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