При включенной защите у вас есть возможность получить текущего пользователя. Это довольно просто, но, вероятно, не подойдет всем.
В общем, вы ничего не можете использовать "из коробки". Добавление некоторого пользовательского параметра, вероятно, является худшим вариантом.
JBoss и Wildfly предлагают возможность использования EJB-клиентских и серверных контейнерных перехватчиков. Детали использования и реализации зависят от версии вашего сервера приложений.
Я реализовал это, используя MDC (отображенный диагностический контекст) нашей инфраструктуры ведения журналов, чтобы улучшить ведение журналов на стороне сервера с помощью информации о вызывающем абоненте. Вы можете думать об этом, как с помощью ThreadLocal. Конечно, вам нужно что-то вроде контекста вызывающего на стороне клиента, содержащего конкретную информацию. Глобальные данные удаленного клиента (IP-адрес, ...) также могут быть установлены в клиентском перехватчике.
Грубый обзор того что я сделал:
- Настройка ведения журнала на стороне клиента и сервера для использования дополнительных данных MDC
- Расширение MDC на стороне клиента с данными ключа / значения
- Перехватчик на стороне клиента извлекает данные из MDC и помещает их в контекст вызова
- Перехватчик на стороне сервера извлекает данные из контекста вызова и улучшает MDC на стороне сервера.
Этот подход работает, но в зависимости от сложности вашего приложения (например, с помощью вызовов server2server, вызовов bean2bean для локальных асинхронных EJB-компонентов, ...) сложность возрастает. Не забудьте подумать о уборке, например. ваши данные ThreadLocal, чтобы избежать возможных утечек памяти.