系统提供webservice时,如何获取调用方的真实IP地址

zhangxianwei 2010-09-30 01:58:21
先描述下系统调用关系:
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;
}
...全文
818 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhangxianwei 2010-10-08
TO:rainsilence
我是使用的spring JaxRpcPortProxyFactoryBean配置的webservice,如何设置表头?
回复
zhangxianwei 2010-10-08
TO:rainsilence
我是使用的spring JaxRpcPortProxyFactoryBean配置的webservice,如何设置表头?
回复
zhangxianwei 2010-10-08
TO:rainsilence
我是使用的spring JaxRpcPortProxyFactoryBean配置的webservice,如何设置表头?
回复
rainsilence 2010-10-01
在b调用A的时候,setHttpHeader下。把ip放进去
回复
jeky_zhang2013 2010-09-30
没弄过,学习了,帮顶~~
回复
zhangxianwei 2010-09-30
B系统是.net的,A系统是java的ssh web应用
回复
zhangxianwei 2010-09-30
TO:andesen
如果是B系统做测试直接调用webserviceA时,该方法会获取服务器B的IP。
但是,现在是A调了B,B再调A,用你的方法获取的还是服务器A的IP。
回复
andesen 2010-09-30
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;
}

回复
zhangxianwei 2010-09-30
[Quote=引用 1 楼 apchy 的回复:]
在你的方法中
HttpServletRequest request = (HttpServletRequest)mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
String clientIp = request.getRemoteAddr();
这样不行吗
[/Quote]

可是头信息里面只有服务器A的IP信息,这个方法获取的也是服务器A的IP。

怎么才能在http头里面包含服务器的信息,我不清楚这两个系统的哪个地方着手
回复
apchy 2010-09-30
在你的方法中
HttpServletRequest request = (HttpServletRequest)mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
String clientIp = request.getRemoteAddr();
这样不行吗
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-09-30 01:58
社区公告
暂无公告