元のリクエストをいくつかのレイヤーを介してメソッドパラメーターとして渡すことなく、現在のリクエストを子スレッドで利用できるようにしたいと考えています。アプリケーションは、サーブレットとポートレットの両方として実行されます。
通常、DispatcherServlet と DispatcherPortlet は、現在のリクエストを現在のスレッドの RequestContextHolder に設定します。このようにして、呼び出しスレッドは現在の要求にアクセスできます。要求は子スレッドに伝搬されません。
私の場合、リクエストは、RestTemplate を使用して ReST 呼び出しを行うサブスレッドを生成し、RestTemplate をインターセプトする ClientHttpRequestInterceptor で元のリクエストにアクセスする必要があります。インターセプトに渡されるリクエストは役に立ちません。サーバーにヒットした元のリクエストが必要です。
DispatcherServlet と DispatcherPortlet の両方に、RequestContext を子スレッドに渡す機能があります: setThreadContextInheritable(true)。ただし、そのフラグを true に設定するのはそれほど簡単ではないようです。それを設定する init-param はなく、通常は web.xml または portlet.xml で指定します。
xml 構成を使用してセッターを介してディスパッチャー ポートレットまたはサーブレットをカスタマイズする方法はありますか? 私が見つけた唯一の方法は、フラグを内部的に true に設定するカスタムのディスパッチャーサーブレット/ポートレットを作成し、それを web.xml および portlet.xml で使用することです。