Получение IP-адреса вызывающего метода EJB в JBoss 4.2.3 - PullRequest
0 голосов
/ 16 марта 2012

В методе EJB сессионного компонента мне нужно знать IP-адрес, с которого клиент вызвал метод. Можно ли получить эту информацию в JBoss 4.2.3?

1 Ответ

1 голос
/ 19 марта 2012

Я предлагаю чистый взлом, но он может работать.

Вы должны получить дамп потока JBoss 4.2.3, когда эти удаленные клиенты активны.Дамп потока выглядит примерно так (пожалуйста, не принимайте этот дамп потока буквально, это просто пример, чтобы вы могли понять, как выглядит дамп потока)

"Attach Listener" daemon prio=9 tid=7f8624000000 nid=0x10eeed000 waiting on condition [00000000]

java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"ajp-127.0.0.1-8009-Acceptor-0" daemon prio=5 tid=7f863d9c5000 nid=0x119033000 runnable [119032000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    - locked <7b20d3d28> (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:314)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"http-127.0.0.1-8080-Acceptor-0" daemon prio=5 tid=7f8633b9f000 nid=0x1187ae000 runnable [1187ad000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    - locked <7b20d3f08> (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:314)
    at java.lang.Thread.run(Thread.java:680)

Как вы можете видеть,Каждый поток имеет связанный протокол / IP-адрес и более подробную информацию о потоке.Для специфичных для RMI потоков вы также найдете имя потока, содержащее IP-адрес клиента (например, WorkerThread # 0 [192.168.0.108:55208] ). Вы можете проанализировать поток "NAME" и извлечьIP-адрес клиента.

Это довольно хак, потому что имена потоков могут меняться в разных версиях, но для конкретной версии это должно работать.

Вот официальная вики JBoss [1], которая объясняется с помощьюобразец кода.

Надеюсь, это поможет.

Удачи!

[1] https://community.jboss.org/wiki/HowtogettheClientipaddressinanEJB3Interceptor

...