Java獲取客戶端真實IP地址
阿新 • • 發佈:2019-01-22
1、我們一般在程式開發時,總會用到這種獲取訪問者IP的功能,以便記錄客戶端的登入和訪問行為。一般情況下,我們可以使用 request 的 getRemoteAddr() 方法獲取客戶端實際 IP ,但是 Nginx 使用反向代理後,我們使用 getRemoteAddr() 是無法獲取真實的 IP 的。
2、經過代理之後,客戶端和服務端之間加了一箇中間層,在轉發請求的HTTP頭部增加了 x-forwarded-for 資訊,以跟蹤原來的客戶端IP地址和原來客戶端請求的伺服器地址。
3、當我們去訪問頁面時,先由代理伺服器去訪問伺服器的地址和檔案,代理伺服器再講訪問結果返回給我們的瀏覽器,所以直接和伺服器打交道的是代理伺服器,所以我們使用 request.getRemoteAddr()
public String getRemortIP(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for" );
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
大功告成!