2014-02-12 81 views
0

我想在适配器端拥有客户端IP地址,但我不知道这是什么工作api。我寻找它,但没有运气。IBM Worklight 6 - 我将如何获得适配器端的客户端IP地址

我用客户端代码这个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"); 

给我们可以在这里获得IP地址使用适配器过程这个API。

回答

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() 

注意,万一有网关/以上的API客户端和您的WL服务器(也有最有可能的)之间的代理将让你对代理的信息。如果你需要在实际设备IP,你可以使用

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

UPDATE:

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

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

如果我使用request.getHeader('x-forwarded-for'),并且第一种方法我无法使用,因为我们在客户端和WL服务器之间有旅行/代理/防火墙/ radware,所以我得到空值。请建议我们应该使用什么。 –

+0

请更新我们仍然面临同样的问题,无法获得实际的客户端IP地址。 –

+0

如果你的中间件剥离了这个信息,那么没有办法获得它。尝试遍历getHeaderNames()并查看是否有任何头文件可能包含您需要的信息。 – Anton