废话不多说,直接上代码,这里主要是写一下主要方法:
public static String getIP(HttpServletRequest request) {
String ip = request.getHeader("X-Real-IP");
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("x-forwarded-for");
} else {
return ip;
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
} else {
// 当有多级反向代理时,x-forwarded-for值为多个时取第一个ip地址
if (ip.indexOf(IP_SEPARATOR) != -1) {
ip = ip.substring(0, ip.indexOf(IP_SEPARATOR));
}
return ip;
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
} else {
return ip;
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
} else {
return ip;
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = "";
}
return ip;
}