2016-11-15 81 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