2010-01-07 79 views
1

我正在編寫一個Web應用程序,我需要爲應用程序中的所有操作執行審計日誌。爲此,我需要獲取客戶端系統的IP地址。如何從http請求獲取子網ip地址

我使用request.getRemoteAddr()來獲取遠程IP地址。但是這有一個問題,如果客戶端在代理的後面,這個方法將給出代理系統的IP。

當我做了一些搜索時,我在HttpRequest對象中發現了一個名爲'X-FORWARDED-FOR'的頭部屬性。

有人可以告訴我這個頭屬性的工作原理以及如何使用此頭來獲取客戶端系統的IP地址。

謝謝

回答

5

getRemoteIP返回用戶的遠程IP地址(假設所有的HTTP中介對XFF標題都表現良好)。

String getRemoteIP(HttpServletRequest request) { 
    String xff = request.getHeader("X-Forwarded-For"); 
    if (xff != null) { 
     return xff.split("[\\s,]+")[0]; 
    } 
    return request.getRemoteAddr(); 
} 
2

客戶端的代理 - 通常是通過防火牆或諸如此類 - 將填充它從客戶端,這是典型的接收IP的X轉發換頭,但不要求(以用戶通過多個代理或防火牆的情況)用戶機器的IP。

2

'X-FORWARDED-FOR'用於識別通過HTTP代理連接到Web服務器的客戶端的始發/實際IP地址。

您可以簡單地使用該屬性的值來找出始發客戶端IP,即使它位於代理之後。