2017-01-09 7 views
0

私はContainerRequestFilterとContainerResponseFilterを実装するクラスを持っています。このクラスを使用して要求とそれに対応する応答を記録しています。要求フィルタのstart_timeに注意し、これをMDC.put( "start-time"、start_time)を使用して応答フィルタに伝播します。 レスポンスフィルタは引数としてContainerRequestContextを取るので、レスポンスを正しいリクエストにマップすることができます。Jersey Request Filterで複数のリクエストを区別する

しかし、私は、ロギングフィルタクラスが、同時に来るであろう複数のリクエストコールをどのように区別できるかを見ることができません。各リクエストは、ロギングフィルタクラスの別のインスタンスを作成しますか?

+1

質問を理解するためにサンプルコードを貼り付けることはできますか?これを行うにはカスタムロギングフィルタがありますか? –

+0

はいカスタムロギングフィルターを作成しました。私は以下のチュートリアルを使用して1つ書きました [リンク] http://www.makeinjava.com/custom-logging-filter-using-jersey-containerrequestfilter-containerresponsefilter/ – raizsh

答えて

0

各要求は、ロギングフィルタクラスの別のインスタンスを作成しますか?

いいえ、メンバー国を保存しようとするとオプションではありません。何をすべきかは、ContainerRequestContextを使用してリクエスト側でプロパティを設定することです。応答側では、同じコンテキストからプロパティを取得するだけです。

// request filter 
filter(ContainerRequestContext request) { 
    request.setProperty("key", value); 
} 

// response filter 
filter(ContainerRequestContext request, ContainerResponseContext response) { 
    Object value = request.getProperty("key"); 
} 

各リクエストにはそれぞれContainer(Request|Response)Contextが割り当てられます。

+0

私はRequestFilterが複数のリクエストそれは同時に起こっている。リクエストフィルタはどのように実装されていますか? 2つの要求コンテキストが混在しないように、フィルタによって複数の要求がどのように処理されるか。 MDCを使用して開始時刻を設定でき、正常に動作します。状態を保存するためにrequestプロパティを設定できることも知っています。 – raizsh

+0

Jerseyはリクエストごとに新しいコンテキストを作成し、そのコンテキストをフィルタに渡します。知るべきことは他に何がありますか? –

関連する問題