2012-03-16 2 views
0

EJB의 세션 빈 메소드에서 클라이언트가 메소드를 호출 한 IP 주소를 알아야합니다. JBoss 4.2.3에서이 정보를 얻을 수 있습니까?JBoss 4.2.3에서 EJB 메소드 호출자의 IP 주소 얻기

+0

이 이미 전에 stakcoverflow에 물었다 질문 : http://stackoverflow.com/questions/1014358/how-can-you-get-the-calling-ip-address- on-an-ejb-call – Ben

+0

그것은 작동하지 않습니다 –

+0

그리고 그것은 V4.2.2입니다 –

답변

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

+1

OP는 서버 IP가 아닌 클라이언트 IP를 요구하고 있습니다. 더군다나, 서버 IP를 얻는 훨씬 더 깨끗한 방법이 있습니다. – BalusC

+0

JBoss는 모든 RMI 연결에 대해 새로운 스레드를 생성합니다. 클라이언트 IP가 스레드 이름에 임베디드된다는 것을 이해합니다. 나는 이것이 OP의 표준 또는 이상적인 방법이 아니라는 점에 동의한다. 그러나 OP와 그것을 공유하는 더 좋은 방법이 있다면 언급했듯이. – uaarkoti

+0

BTW, 내가 제안한 것을 정확히 사용하는 공식 Wiki가 있습니다. https://community.jboss.org/wiki/HowtogettheClientipaddressinEJB3Interceptor – uaarkoti

관련 문제