IBM Worklight 6 - 如何在适配器端获得客户端IP地址

时间:2014-02-12 06:46:44

标签: ibm-mobilefirst worklight-adapters

我想在适配器端有客户端IP地址,但我不知道什么是worklight 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 个答案:

答案 0 :(得分:2)

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;
}