public static String getIpAddr(HttpServletRequest request){
String ipAddress = request.getHeader("x-forwarded-for");
if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if(StringUtils.isNotEmpty(ipAddress) && !"unKnown".equalsIgnoreCase(ipAddress)){
ipAddress = request.getHeader("X-Real-IP");
}
if("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)){
try {
//根据网卡取本机配置的IP
ipAddress= InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(StringUtils.isNotEmpty(ipAddress)){
int index = ipAddress.indexOf(",");
if(index != -1){
ipAddress = ipAddress.substring(0,index);
}
int otherIndex = ipAddress.indexOf(":");
if(otherIndex != -1){
ipAddress = ipAddress.substring(0,otherIndex);
}
}
LoggerUtil.doNormalInfo(new ApiResultUtil(), HttpUtil.class, "ipAddress: " + ipAddress);
return ipAddress;
}