0

在 EJB 的会话 bean 方法中,我需要知道客户端调用该方法的 IP 地址。是否有可能在 JBoss 4.2.3 中获得这些信息?

4

1 回答 1

1

我的建议是纯粹的黑客攻击,但它可能会奏效。

当这些远程客户端处于活动状态时,您应该获得 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 Wiki [1],它用示例代码进行了解释。

希望这可以帮助。

祝你好运!

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

于 2012-03-19T17:16:33.383 回答