我在我的网络应用程序中使用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
?
答案 0 :(得分:0)
以下是spring boot filter的详细信息,它说:
如果基于约定的映射不够灵活,您可以使用
ServletRegistrationBean
,FilterRegistrationBean
和ServletListenerRegistrationBean
类进行完全控制。
我相信您可以更改这些类中的顺序。过滤器的顺序与您在config类中添加(过滤到您的配置类)顺序相同。