Java獲取HTTP請求的真實IP
阿新 • • 發佈:2018-11-09
本文介紹使用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