2012-07-26 15 views
10

मैं एक JAX-WS एक तरह से विधि कॉल के लिए ग्राहक आईपी पते पाने के लिए कोड निम्न का उपयोग कर रहा:विश्वसनीय तरीका

protected HttpServletRequest getServletRequest() { 
    MessageContext ctx = wsContext.getMessageContext(); 
    return (HttpServletRequest) ctx.get(MessageContext.SERVLET_REQUEST); 
} 

protected synchronized String getClientIp() { 
    String clientIp = ""; 
    HttpServletRequest request = getServletRequest(); 
    if (request != null) { 
     clientIp = request.getRemoteAddr(); 

     // Handle proxy 
     String header = request.getHeader("x-forwarded-for"); 
     if(header != null && !header.isEmpty()) { 
      clientIp = header.split(",")[0]; 
     } 
    } 
    return clientIp; 
} 

जब एकाधिक क्लाइंट कनेक्ट होते हैं, अनुरोध के लिए पुनर्प्राप्त आईपी पता कभी-कभी पहले के अनुरोध से गलत कैश वैल्यू होता है। एक तरफा कॉल उत्प्रेरक के आईपी पते को पाने का एक विश्वसनीय तरीका क्या है?

उत्तर

18

आप अगर यह मदद कर सकता है-को संबोधित करते WS क्लाइंट IP

Message message = PhaseInterceptorChain.getCurrentMessage(); 
HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST); 
request.getRemoteAddr() 
1

यदि आपका उद्देश्य वेब-सेवा कनेक्शन को वापस स्थापित करना है तो शायद WS-Addressing उपयोगी हो सकता है।

वैकल्पिक पते योजनाएं अलग-अलग, HttpServletRequest.getRemoteAddrgetHeader वैकल्पिक आईपी पते के साथ संयोजन में सही होने के लिए spec'd हैं। यदि वे नहीं हैं तो (हाँ, मैं विभिन्न मतभेदों की कल्पना कर सकता हूं, लेकिन सिद्धांत बनी हुई है)।

तो, क्या आपके पास अपने प्लेटफ़ॉर्म की नवीनतम/सबसे बड़ी स्थिर रिलीज है? यह आपके प्लेटफार्म के साथ एक समस्या की तरह लगता है - जिसमें से आपने कोई विवरण नहीं दिया है।

+0

मैं के माध्यम से ध्यान देंगे पाने के लिए अनुवर्ती कोड का उपयोग कर सकते हैं। मैं cxf-2.5.2 का उपयोग कर रहा हूँ tomcat-6.0.35 पर चल रहा है। – amo

संबंधित मुद्दे