在 Worklight 适配器上获取客户端 IP 地址

Posted

技术标签:

【中文标题】在 Worklight 适配器上获取客户端 IP 地址【英文标题】:Get Client IP address on Worklight Adapter 【发布时间】:2015-04-22 18:34:10 【问题描述】:

我们正在使用 WL6.2 开发混合应用程序。在我们的适配器中,我们有以下代码:

var request = WL.Server.getClientRequest(); 
var IPAddress = request.getHeader('X-Archieved-Client-IP');
if(IPAddress == null || IPAddress == undefined || IPAddress == "") 
    IPAddress = request.getHeader('X-Archieved-Client-IP');

if(IPAddress == null || IPAddress == undefined || IPAddress == "") 
    IPAddress = request.getRemoteAddr();

if(IPAddress == null || IPAddress == undefined || IPAddress == "") 
    //This will never happen, only for precaution.
    IPAddress = "192.168.1.1";


commonParams.originatingIp = (IPAddress)?IPAddress:request.getRemoteAddr();

我无法在适配器上获取客户端 IP 地址,我们的 Web 服务只看到一个 IP 地址,即数据电源 IP。在日志中,我看到我们的数据电源 IP 地址为“orginatingIP”。这意味着"getRemoteAddr()"正在被执行。

<OriginatingIP>DataPowerIP</OriginatingIP>

如果我只保留这部分代码:

var request = WL.Server.getClientRequest(); 
var IPAddress = request.getHeader('X-Archieved-Client-IP');
commonParams.originatingIp = IPAddress;

我得到的值是“null”。

<OriginatingIP>null</OriginatingIP>

我也试过这个解决方案“IBM Worklight 6 - How would i get client IP address on adapter side”也没有用。

有什么建议吗?谢谢

【问题讨论】:

【参考方案1】:

我将按如下方式更新您的适配器

var request = WL.Server.getClientRequest(); 

var ipAddress = request.getHeader('x-client-ip');

switch(ipAddress)
  case "":
  case null:
  case undefined:
    //This will never happen, only for precaution.
    ipAddress = "192.168.1.1";
  break;

从这篇帖子https://developer.ibm.com/answers/questions/10123/how-do-you-get-the-original-ip-doing-the-request-to-your-bluemix-app.html看来,您应该使用x-client-ip而不是X-Archieved-Client-IP

【讨论】:

【参考方案2】:

这个帖子对我有用。

what is the right way to get request's ip

试试 request.getRemoteAddr()

【讨论】:

以上是关于在 Worklight 适配器上获取客户端 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

Worklight 6.1 - 如何在适配器级别的请求标头中设置 x 转发的 IP 地址

Worklight 6.1 未连接到生产服务器

Worklight 适配器结束会话

从 Worklight 获取 HTTP 适配器的响应

如何在 Worklight 6.2 中链接来自移动客户端的适配器调用?

Worklight 中用于加密(客户端)和解密(服务器/适配器)的 API