2014-02-12 79 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