1

我在我的 Web 应用程序中使用 spring-cloud-sleuth。不幸的是,我接到电话的第三方正在 X-B3-TraceId 标头中发送 UUID。但是在从字符串转换为十六进制时,由于 UUID 中的“-”字符,spring 中的 TraceFilter 可能会发现错误。所以我决定编写自己的过滤器,它将在 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,我认为这使它出现在我的过滤器之前。我不想更改过滤器的顺序。由于Spring Boot 自动配置自动注册,如何更改TraceFilterto的顺序?2TraceFilter

4

1 回答 1

0

这是弹簧靴过滤器的详细信息,它说:

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

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

于 2016-11-15T13:10:05.527 回答