EJB 3.1 удалить контекст вызова в целях безопасности (ThreadLocal, ...) - PullRequest
0 голосов
/ 03 октября 2011

У меня есть веб-приложение на одном сервере Glassfish (внешний интерфейс) и приложение EJB 3.1 (внутренний интерфейс) на другом сервере Glassfish. Веб-приложение связывается с EJB 3.1 через удаленный вызов.

Я хотел бы передать контекстные данные (то есть пользовательские данные), не определяя их как входной параметр каждой бизнес-операции.

У меня есть одна идея, но я не уверен, что она будет работать: используйте ThreadLocal для хранения данных, но ThreadLocal будет доступен только на одном сервере (то есть JVM) => используйте объект InvocationContext и создайте перехватчик для добавления пользовательских данных в карту ContextData .

Что вы думаете об этом? Любые другие идеи приветствуются! ; -)

UPDATE

После первого ответа я немного погуглил и нашел аннотацию @CallerPrincipal.

Как я могу установить этот объект перед удаленным вызовом?

1 Ответ

2 голосов
/ 03 октября 2011

Контейнер уже справится с этим, поэтому вам не нужно кодировать его самостоятельно.

В вашем EJB вы можете получить доступ к EJBContext, который имеет метод getCallerPrincipal () ,даст вам удостоверение личности звонящего.

...