2017-05-15 3 views
5

古典的なspring-mvcでは、リクエストスコープ属性をRequestContextHolderに設定することができます。それに基づいて、HandlerInterceptorAdapterで着信要求を解析し、現在ログインしているユーザー、一意の要求ID(ログ相関)などの要求パラメータを設定できます。 これらのリクエスト属性は、リクエストの有効期間中に(コントローラだけでなく)サービスから静的に取得できます。spring-webfluxで現在のリクエストのコンテキストを取得する方法

私はspring-webfluxと同様のことを達成しようとしています。

WebFilterを使用してすべての着信要求をインターセプトし、現在のServerWebExchangeを取得し、その上に属性を設定できます。しかし、私は現在のリクエストのServerWebExchangeをコントローラメソッド以外のどこにでも持ち込むことはできません。

ServerWebExchange(またはServerHttpRequest)を渡すよりも優れた解決策を探しています。

ThreadLocalに対する特定のリクエストに関連付けられた変数を保存することに依存することができないため、webfluxで実現するのは難しいようです(ノンブロッキングアーキテクチャのため、スレッド間でリクエストを切り替えることができます)。
これは重要な要件です。たぶん別のアプローチがありますか?

答えて

2

あなたが説明しているアプローチは、現在サポートされているアプローチです。 下線付きのように、ThreadLocalsで静的アプローチを使用することはできません。

リアクターは新しいコンテキスト機能(this PRを参照)で代替案を検討しています。 Springはこれを選択して使用する可能性がありますが、現在のモデルが非常にうまく適合しているため、必ずしも要求属性のためではありません。

特定の拡張ポイントでリクエストを傍受したい場合は、達成しようとしているものと失敗しているものが記述されたJIRA issueをSpring Frameworkプロジェクトに作成してください。

+0

私はJIRAの問題を作成しました:https://jira.spring.io/browse/SPR-15680 –

関連する問題