获取JBoss 4.2.3中EJB方法调用者的IP地址

时间:2012-03-16 06:34:46

标签: java java-ee jboss jboss-4.2.x

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

1 个答案:

答案 0 :(得分: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