1 public static String getIpAddr(HttpServletRequest request) { 2 String ipAddress = request.getHeader("x-forwarded-for"); 3 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 4 ipAddress = request.getHeader("Proxy-Client-IP"); 5 } 6 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 7 ipAddress = request.getHeader("WL-Proxy-Client-IP"); 8 } 9 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 10 ipAddress = request.getRemoteAddr(); 11 String localIp = "127.0.0.1"; 12 String localIpv6 = "0:0:0:0:0:0:0:1"; 13 if (ipAddress.equals(localIp) || ipAddress.equals(localIpv6)) { 14 // 根據網卡取本機配置的IP 15 InetAddress inet = null; 16 try { 17 inet = InetAddress.getLocalHost(); 18 ipAddress = inet.getHostAddress(); 19 } catch (UnknownHostException e) { 20 e.printStackTrace(); 21 } 22 } 23 } 24 // 對於通過多個代理的情況,第一個IP為客戶端真實IP,多個IP按照','分割 25 String ipSeparate = ","; 26 int ipLength = 15; 27 if (ipAddress != null && ipAddress.length() > ipLength) { 28 if (ipAddress.indexOf(ipSeparate) > 0) { 29 ipAddress = ipAddress.substring(0, ipAddress.indexOf(ipSeparate)); 30 } 31 } 32 return ipAddress; 33 }