1. 程式人生 > >Java獲取HTTP請求的真實IP

Java獲取HTTP請求的真實IP

本文介紹使用Java獲取HTTP請求的真實IP,包括了對反向代理、代理客戶端、多個IP情況的處理。

請參考以下程式碼片段:

/**
 * 獲取真實IP
 * @param request 請求體
 * @return 真實IP
 */
public static String getRealIp(HttpServletRequest request) {
    // 這個一般是Nginx反向代理設定的引數
    String ip = request.getHeader("X-Real-IP");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        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();
    }
    // 處理多IP的情況(只取第一個IP)
    if (ip != null && ip.contains(",")) {
        String[] ipArray = ip.split(",");
        ip = ipArray[0];
    }
    return ip;
}


以上方法,絕大多數情況下可用獲取到HTTP請求的真實IP。當然,如果該請求是經過了多層反向代理髮送的,則可能獲取的是代理伺服器的IP,而不是真實IP。
 

本文原文地址:https://blog.csdn.net/zebe1989/article/details/82692315