IBM Worklight 6 - 我如何在适配器端获取客户端 IP 地址
Posted
技术标签:
【中文标题】IBM Worklight 6 - 我如何在适配器端获取客户端 IP 地址【英文标题】:IBM Worklight 6 - How would i get client IP address on adapter side 【发布时间】:2014-02-12 06:46:43 【问题描述】:我想在适配器端拥有客户端 IP 地址,但我不知道工作灯 api 是什么。我搜索它,但没有运气。
我在下面给出的客户端代码上使用了这个 api
WL.Device.getNetworkInfo(function (networkInfo)
console.log ("Ip address of device "+networkInfo.ipAddress);
);
它工作正常,我可以将它从客户端传递给适配器。但我只是想知道在适配器过程中是否可以在服务器端实现同样的事情。
我也使用了下面给出的这段代码
var request = WL.Server.getClientRequest();
var userAgent = request.getHeader("User-Agent");
我们可以在适配器过程中使用此 API 获取 IP 地址吗?
【问题讨论】:
【参考方案1】:WL.Server.getClientRequest() 将返回对 HttpServletRequest Java 对象 (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html) 的引用。您可以使用 Java API 来获取所需的信息,例如
var request = WL.Server.getClientRequest();
request.getRemoteAddr()
request.getRemoteHost()
请注意,如果客户端和您的 WL 服务器之间存在网关/代理(并且很可能存在),上述 API 将为您提供有关代理的信息。如果您需要实际的设备 IP,您可以使用
var request = WL.Server.getClientRequest();
var IPAddress = request.getHeader('x-forwarded-for');
更新:
为了遍历标头枚举并获取请求标头的完整列表,请使用以下代码:
var headers = ;
var request = WL.Server.getClientRequest();
var headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements())
var headerName = headerNames.nextElement();
var headerValue = request.getHeader(headerName);
headers[headerName] = headerValue;
【讨论】:
如果我使用 request.getHeader('x-forwarded-for') 和第一种方法我无法使用,因为我们在客户端和您的 WL 之间有 ateways/proxies/firewall/radware,我会得到 null服务器。请建议我们应该使用什么。 请对此进行更新,我们仍然面临同样的问题,无法获取实际的客户端 IP 地址。 如果你的中间件去掉了这个信息,那么就没有办法得到它。尝试遍历 getHeaderNames() 并查看是否有任何标题可能包含您需要的信息。 你能帮我迭代 getHeaderNames() 因为在打印这个时,我得到 com.ibm.ws.webcontainer.util.IteratorEnumerator@a202b4 作为输出所以请让我知道我应该如何迭代它并获取实际值。以上是关于IBM Worklight 6 - 我如何在适配器端获取客户端 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight 6.1 - 如何在适配器中发送帖子值?
IBM Worklight 6.1 - 成功调用适配器后如何调用 angular.js 的“ng-controller”方法?
IBM Worklight 6.0 - 调用适配器过程时出错
IBM Worklight 6.0.0.1 - 适配器中的超时设置