Как да получите адреса на извикващия отдалечен клиент на EJB метод в JBoss AS7

Имам разпределено приложение, което се състои от един сървър, JBoss AS7, на който се изпълняват интерфейсът и бекендът на приложението. Няколко клиента, работещи на други машини в мрежа, получават JNDI първоначалния контекст на JBoss, за да получат определени обекти. Всеки клиент е уникален и трябва да бъде идентифициран, без да се прави каквато и да е конфигурация върху него. Моят подход е да получа техния адрес и да картографирам данните, свързани с тях (пул от неща, равномерно картографиран между всички свързани клиенти).

Как мога да получа IP адреса на извикващия клиент на EJB метод?

Вече намерих „хакове“, които описват как да извлека информацията от името на нишката (използвано например в JBoss 4.x), но това винаги връща нещо като:

EJB по подразбиране - 7

Вижте Как можете да получите ip адреса за повикване адрес при ejb повикване?

Ако предоставите кодов фрагмент или извикване на метод в някакъв контекст, можете ли да добавите източника му? Не можах да намеря нещо чрез търсене на EJB3, Remoting3 и подобни неща


person Sven Plath    schedule 18.10.2012    source източник
comment
Какво ще кажете за алтернативата за използване на защита на ejb и идентифициране на всеки клиент чрез неговото удостоверяване, т.е. callerPrincipal() в контекста на EJB? Просто идея.   -  person Udo Klimaschewski    schedule 18.10.2012
comment
Опитах да използвам вашето решение, но в крайна сметка получих анонимния принципал, тъй като не търся ejb:/ контекст, а java:/ контекст. Удостоверяването се извършва чрез AdministrationRealm на JBoss, не се добавя допълнителна сигурност. Знам, че е възможно да правя каквото искам с помощта на RMI, но бих предпочел да използвам EJB.   -  person Sven Plath    schedule 19.10.2012
comment
Разгледайте това описание, не съм го пробвал сам, но изглежда, че това е начин за идентифициране на повикващия в bean-а: community.jboss.org/wiki/JBoss7AndEjbRemoteCallWithSecurity   -  person Udo Klimaschewski    schedule 19.10.2012
comment
Внедрих този метод, все още анонимен. Предполагам, че ще направя нещо друго: Регистрирам всеки клиент чрез отдалечен метод EJB, връщайки уникален идентификатор, генериран от сървъра. След това клиентът прави някакъв механизъм за сърдечен ритъм (пропитва сървъра веднъж на всеки x секунди) със своя id. Предполагам, че това може да е заобиколно решение, за да видите колко клиенти са активни и могат да свършат някаква работа. Въпреки това няма да мога да кажа, че клиентът с id 1234 се намира там.   -  person Sven Plath    schedule 19.10.2012


Отговори (1)


просто идея,

Използването може да изложи вашия ejb чрез слой на уеб услуга, базиран на почивка. Ако го направите, лесно можете да намерите име на отдалечен хост и може също да използвате сървъра за филтриране, за да разрешите или забраните заявка.

Можете да използвате @EJB, за да инжектирате вашия bean в клас почивка, ако приемете, че ще използвате JAX-RS.

person Arun Chandrasekaran    schedule 06.10.2013