どうしても、次のことは不可能ですが、本番環境の1つで発生しています。
設定
- ESAPI 2.01
メインサーブレットフィルターの設定と現在のリクエストスレッドローカルオブジェクトの削除:
try { ESAPI.httpUtilities().setCurrentHTTP(request, response); // filter logic ... } catch (Exception e) { LOG.error(Logger.SECURITY_FAILURE, "Error in ESAPI " + "security filter: " + e.getMessage(), e); request.setAttribute("message", e.getMessage()); } finally { ESAPI.clearCurrent(); }
すべてのリクエストはこのフィルターを通過ESAPI.currentRequest()
し、システム全体で使用されます。
- パスA(
http://server/path_a/
)- に達するまで通過します
method_a
。このメソッドにはアクセスできません。path_b
- に達するまで通過します
- パスB(
http://server/path_b
)- に到達するまで通過し
method_b
、からアクセスできませんpath_a
- に到達するまで通過し
これらのパスは両方ともサーブレットフィルターを通過します(マッピング " /*
")
私が受け取ったエラーメールの1つは、エラーをpath_a
スローしていることを示唆しています。これにより、エラーメールが開始され、メールコードで、現在のリクエスト(via ESAPI.currentRequest()
)がリクエスト情報として列挙されます。
問題
エラーメールでは、リクエスト情報はからpath_a
のスタックトレース情報と相関しmethod_b
ていますが、両方が別々のスレッドで実行されるため、これは不可能に思えます。
質問
これはどのように可能ですか?これをローカルで再作成することはできません。設定とクリア以外に、特定の予防措置を講じる必要がありThreadLocal
ますか?これはTomcatのセットアップで問題になる可能性がありますか?道に迷いました。
PS:例としてコードベースが大きすぎるため、質問のコードは簡略化されています