Как вставить имя пользователя в MDC для всего веб-запроса - PullRequest
2 голосов
/ 19 июля 2011

Я пытаюсь использовать сопоставленный диагностический контекст, чтобы добавить имя пользователя, выполняющего запрос страницы, ко всем соответствующим операторам ведения журнала. Однако я попробовал три разных способа заставить его работать без успеха:

  1. Загрузка имени пользователя в MDC после входа в систему и удаление после выхода из системы. Этот метод заканчивает тем, что перепутал, какой оператор регистрации пришел от какого пользователя.
  2. Использование ServletFilter для вставки имени пользователя в MDC при каждой загрузке страницы и удаления его по окончании запроса. Это захватывает только некоторые данные и только на уровне безопасности Spring.
  3. Использование перехватчика AOP @Around перед всеми методами контроллера не сработало.

У кого-нибудь есть предложения, как это сделать?

1 Ответ

3 голосов
/ 19 июля 2011

Какие были проблемы с MDC?Что вы подразумеваете под Spring security layer ?Я использовал этот подход в одном веб-приложении, и он работал хорошо.Поскольку MDC привязан к потоку, все операторы журналирования, поступающие из этого потока, будут иметь установленное имя пользователя, то есть уровень сервиса и репозитория.

Конечно, если некоторые пользователи обслуживаются с использованием потоков (например, асинхронная обработка сервлета 3.0,JMS-слушатели, исполнители), вам понадобится другой способ ввода имени пользователя в MDC в объединенных потоках.

Также смотрите мой ответ здесь .

...