先描述下系统调用关系:
1、存在A,B两个系统,A系统提供webserviceA服务,B系统提供webserviceB服务。2、调用过程:A系统调用webserviceB,webserviceB程序处理完成后,再反调webserviceA。目前的情况是,在反调webserviceA时,发现http头信息的IP信息只有A系统的地址,如下:Content-Type  text/xml; charset=utf-8
SOAPAction  ""
Host  192.168.1.1:17001(这个是服务器A的地址)
Content-Length  955
Expect  100-continue
Connection  Keep-Alive
x-forwarded-for:null
Proxy-Client-IP:null
WL-Proxy-Client-IP:null请帮忙解答如何能获取到服务器B的地址,谢谢!附上获取IP的方法:public String getIp(MessageContext context) {
MessageContext mc =MessageContext.getCurrentContext();
HttpServletRequest request = 
(HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}

解决方案 »

  1.   

    在你的方法中
    HttpServletRequest request = (HttpServletRequest)mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); 
    String clientIp = request.getRemoteAddr();
    这样不行吗
      

  2.   


    可是头信息里面只有服务器A的IP信息,这个方法获取的也是服务器A的IP。怎么才能在http头里面包含服务器的信息,我不清楚这两个系统的哪个地方着手
      

  3.   

    http://qingzuochen.javaeye.com/blog/585931/** 
         * 获取客户端IP地址,如调用方的IP,以便检查权限。 
         * 适用于axis发布的webservice 
         * @return 
         */ 
        public String getClientIpAxis() { 
            MessageContext mc = null; 
            HttpServletRequest request = null; 
            try { 
                mc = MessageContext.getCurrentMessageContext(); 
                if (mc == null) 
                    throw new Exception("无法获取到MessageContext"); 
                request = (HttpServletRequest) mc 
                        .getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); 
                System.out.println("remote  ip:  " + request.getRemoteAddr()); 
            } catch (Exception e) { 
                System.out.println(e.getMessage()); 
                e.printStackTrace(); 
            } 
            return request.getRemoteAddr(); 
        }     /** 
         * 获取客户端IP地址 
         * 适用于xfire发布的webservice 
         * @return 
         */ 
        public String getClientIpXfire() { 
            String ip = ""; 
            try { 
                HttpServletRequest request = XFireServletController.getRequest(); 
                ip = request.getRemoteAddr(); 
            } catch (Exception e) { 
                System.out.println("无法获取HttpServletRequest."); 
                e.printStackTrace(); 
            } 
            return ip; 
        }
      

  4.   

    TO:andesen
    如果是B系统做测试直接调用webserviceA时,该方法会获取服务器B的IP。
    但是,现在是A调了B,B再调A,用你的方法获取的还是服务器A的IP。
      

  5.   

    B系统是.net的,A系统是java的ssh web应用
      

  6.   

    在b调用A的时候,setHttpHeader下。把ip放进去
      

  7.   

    TO:rainsilence
    我是使用的spring JaxRpcPortProxyFactoryBean配置的webservice,如何设置表头?
      

  8.   

    TO:rainsilence
    我是使用的spring JaxRpcPortProxyFactoryBean配置的webservice,如何设置表头?
      

  9.   

    TO:rainsilence
    我是使用的spring JaxRpcPortProxyFactoryBean配置的webservice,如何设置表头?