Hibernate Envers: журнал IP-адреса пользователя

Я хочу зарегистрировать IP-адрес текущего пользователя в своих таблицах аудита, в настоящее время это делается как InetAddress.getLocalHost().toString(), который неправильно регистрирует IP-адрес сервера.

Обычно я мог бы сделать это с помощью автоматического связывания объекта HttpRequest, но это невозможно внутри метода newRevision(), который я переопределяю в своем слушателе.


person Mark Brown    schedule 02.11.2016    source источник
comment
Чтобы узнать IP-адрес клиента, как вы говорите, единственный способ - это запрос, если у вас нет доступа к вашему запросу, но вы используете поток для обработки запроса и выполняете свою логику, вы можете хранить эти данные внутри держателя потока   -  person karelss    schedule 02.11.2016


Ответы (1)


Вы можете просмотреть эту публикацию.

В веб-приложении лучшим местом для установки переменной ThreadLocal обычно будет что-то вроде Filter или Interceptor, в основном любой компонентный код, который выполняется до любого кода обработчика веб-запросов, гарантируя, что переменная ThreadLocal была установлена. .

Затем вы просто получаете доступ к этому ThreadLocal внутри прослушивателя сущности ревизии Envers и заполняете настраиваемое поле значением.

Просто обязательно очистите переменную ThreadLocal в конце цепочки обработчиков запросов.

person Naros    schedule 02.11.2016