2016-11-15 9 views
1

Webアプリケーションでspring-cloud-sleuthを使用しています。残念ながら、私が呼び出した第三者は、X-B3-TraceIdヘッダーにUUIDを送信しています。しかし、春のTraceFilterは、文字列から16進数への変換時にUUIDの ' - '文字のためにエラーを発生させる可能性があります。だから私は自分自身のフィルタを書いて、TraceFilterの前にリクエストをインターセプトし、ヘッダからトレースIDを削除することにしました。これは私の設定です:春の起動時にフィルタの順序を変更する

@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が自動的に登録されるので、TraceFilterの順番を2に変更するにはどうすればよいですか?ここで

+0

なぜTraceFilterをFilterRegistrationBeanに登録して注文を設定しないのですか? – kuhajeyan

答えて

0

spring boot filterの詳細で、それは言う:

規則ベースのマッピングは、あなたが完全に制御するためにServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBeanクラスを使用することができる十分な柔軟性が得られない場合。

私はあなたがそれらのクラスの順序を変更することができると信じています。フィルタの順序は、あなたが設定クラスに追加する(設定クラスにフィルタする)順序と同じです。

+0

TraceFilterは私のコントロール下にありません。そのライブラリを形成する。 – falcon

関連する問題