HttpServletRequest r = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
String ip = r.getHeader("x-forwarded-for");
System.out.println("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip=" + ip);
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = r.getHeader("Proxy-Client-IP");
System.out.println("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip=" + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = r.getHeader("WL-Proxy-Client-IP");
System.out.println("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip=" + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = r.getHeader("HTTP_CLIENT_IP");
System.out.println("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip=" + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = r.getHeader("HTTP_X_FORWARDED_FOR");
System.out.println("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip=" + ip);
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = r.getRemoteAddr();
System.out.println("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip=" + ip);
}
} else if (ip.length() > 15) {
String[] ips = ip.split(",");
for (int index = 0; index < ips.length; index++) {
String strIp = (String) ips[index];
if (!("unknown".equalsIgnoreCase(strIp))) {
ip = strIp;
break;
}
}
}
這是我現在用的代碼
但放在服務器上只能通過getRemoteAddr取到網關地址 頭部里面取x-forwarded-for為Null
這是列印圖

uj5u.com熱心網友回復:
x-forwarded-for等等這些是頭部的一個欄位,一般nginx這樣的http負載、代理等才會有(并且需要配置nginx支持這種方式),你的這個函式是一種綜合性的包裝,考慮的很多情況的發生,所以你要考慮你的運行環境。而getRemoteAddr是從tcp/ip協議中讀取到值,這是一個網路系統中的值(順便說一句,如果使用nginx這樣的負載工具的時候getRemoteAddr獲取下來的還是nginx的IP,所以這個函式處理的順序也很重要)。
uj5u.com熱心網友回復:
需要在nginx配置proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123490.html
標籤:Web 開發
