WebAsyncManager
ドキュメントによると、
非同期シナリオは、通常どおりスレッド (T1) での要求処理から始まります。同時要求処理は、startCallableProcessing または startDeferredResultProcessing を呼び出すことで開始できます。どちらも別のスレッド (T2) で結果を生成します。結果が保存され、要求がコンテナーにディスパッチされ、保存された結果を使用して 3 番目のスレッド (T3) で処理が再開されます。ディスパッチされたスレッド (T3) 内で、保存された結果に getConcurrentResult() を介してアクセスするか、hasConcurrentResult() を介してその存在を検出できます。
SpringSecurityContext
は T1 と T2 で使用できますが、T3 では使用できません。応答をシリアル化するときに、T3 でが必要ですSecurityContext
(これは特殊な要件です)。を設定することでこれを修正できます
spring.security.filter.dispatcher-types=REQUEST,ERROR,ASYNC
が、これにより全体FilterChain
が2回実行されるため、回避しようとしています。
を再度SecurityContext
実行せずに T3に入れる方法はありますか?FilterChain