3

マップされた診断コンテキストを使用して、ページ要求を行っているユーザーのユーザー名を関連するすべてのログ ステートメントに追加しようとしています。ただし、成功せずに機能させるために3つの異なる方法を試しました。

  1. ログイン後にユーザー名を MDC にプッシュし、ログアウト後に削除します。このメソッドは、どのログ ステートメントがどのユーザーからのものかを混同してしまいます。
  2. ServletFilter を使用して、各ページの読み込み時にユーザー名を MDC にプッシュし、リクエストが終了するとポップします。これはデータの一部のみをキャッチし、Spring セキュリティ レイヤーでのみキャッチします。
  3. すべての Controller メソッドの前で AOP @Around インターセプターを使用してもうまくいきませんでした。

これを実現する方法について何か提案はありますか?

4

1 に答える 1

3

MDC にはどのような問題がありましたか? Spring security layerとはどういう意味ですか? このアプローチを 1 つの Web アプリケーションで使用したところ、うまく機能しました。MDC はスレッドにバインドされているため、このスレッドからのすべてのログ ステートメントにはユーザー名が設定されます。つまり、サービスとリポジトリ レイヤーも同様です。

もちろん、一部のユーザーがスレッド (サーブレット 3.0 非同期処理、JMS リスナー、エグゼキューターなど) を使用してサービスを受けている場合は、プールされたスレッドで MDC にユーザー名を注入する別の方法が必要になります。

こちらの回答もご覧ください。

于 2011-07-19T19:31:57.033 に答える