2016-11-02 8 views
0

私の監査テーブルに現在のユーザのIPアドレスを記録しようとしていますが、現在のところ、サーバIPを間違って記録しているInetAddress.getLocalHost().toString()のようになっています。Hibernate Envers:ログユーザIPアドレス

通常、私はHttpRequestオブジェクトをオートワイヤリングすることでこれを行うことができますが、これは私のリスナーでオーバーライドしているnewRevision()メソッドの中では不可能です。

+0

お客様のリクエストにアクセスする唯一の方法はクライアントのIPアドレスを知るために、リクエストにアクセスできない場合はスレッドを使用してリクエストを処理し、ロジックを実行します。スレッドホルダー – karelss

答えて

2

ポストthisをご覧ください。 Webアプリケーションで

ThreadLocal変数を設定するための最高の場所は、典型的には、そのThreadLocal保証、FilterまたはInterceptorような何か、前にウェブ要求ハンドラのコードのいずれかに走る基本的にいずれかのコンポーネントのようなコードの中だろう変数が設定されています。

Enversリビジョンエンティティリスナー内のThreadLocalにアクセスして、カスタムフィールドに値を入力します。

ThreadLocal変数を、リクエストハンドラチェーンの最後に必ずクリアしてください。