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

Ibm mobilefirst IBM Worklight 6-如何在适配器端获取客户端IP地址,ibm-mobilefirst,worklight-adapters,Ibm Mobilefirst,Worklight Adapters,我希望在适配器端有客户机ip地址,但我不知道用于此的worklight api是什么。我寻找它,但没有运气 我在下面给出的客户端代码中使用了这个api WL.Device.getNetworkInfo(function (networkInfo) { console.log ("Ip address of device "+networkInfo.ipAddress); }); 它工作正常,我可以从客户端将其传递给适配器。但我只是想知道在适配器过程中是否可以在服务

我希望在适配器端有客户机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地址吗

WL.Server.getClientRequest()将返回对HttpServletRequest Java对象()的引用。您可以使用JavaAPI获取所需的信息,例如

var request = WL.Server.getClientRequest();
request.getRemoteAddr()
request.getRemoteHost()
请注意,如果客户端和WL服务器之间存在网关/代理(很可能存在),上述API将为您提供有关代理的信息。如果您需要实际的设备IP,您可以使用

var request = WL.Server.getClientRequest();
var IPAddress = request.getHeader('x-forwarded-for'); 

更新:

为了迭代headers枚举并获得请求头的完整列表,请使用以下代码:

    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')和我不能使用的第一种方法,我将得到null,因为客户端和WL服务器之间有ateways/proxy/firewall/radware。请建议我们应该使用什么。请对此进行更新。我们仍然面临同样的问题,无法获得实际的客户端ip地址。如果您的中间件剥夺了此信息,则无法真正获得它。尝试迭代getHeaderNames(),看看是否有任何标题可能包含所需的信息。您能否帮助我迭代getHeaderNames(),因为在打印时,我会得到com.ibm.ws.webcontainer.util。IteratorEnumerator@a202b4作为输出,请让我知道如何迭代它并获得实际值。