/**
*
* @param request
* @return 请求IP地址
*/
public static String getIp(HttpServletRequest request) {
//
String ip = null;
//
ip = request.getHeader("X-Forwarded-For");
if (isRealIP(ip)) {
return getRealIp(ip);
}
//
ip = request.getHeader("Proxy-Client-IP");
if (isRealIP(ip)) {
return getRealIp(ip);
}
//
ip = request.getHeader("WL-Proxy-Client-IP");
if (isRealIP(ip)) {
return getRealIp(ip);
}
//
ip = request.getHeader("HTTP_CLIENT_IP");
if (isRealIP(ip)) {
return getRealIp(ip);
}
//
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
if (isRealIP(ip)) {
return getRealIp(ip);
}
//
ip = request.getParameter("__fromReferIP");
if (isRealIP(ip)) {
return getRealIp(ip);
}
// NGINX用
ip = request.getHeader("X-Real-IP");
if (isRealIP(ip)) {
return getRealIp(ip);
}
ip = request.getRemoteAddr();
//
return ip;
}
/**
* @param ip
* @return
*/
private static boolean isRealIP(String ip) {
return StringUtils.isNotBlank(ip) && !"unknown".equalsIgnoreCase(ip);
}
/**
* @param ip
* @return
*/
private static String getRealIp(String ip) {
//
if (ip.indexOf(",") != -1) {
return StringUtils.left(ip.split(",")[0], 15);
}
return ip;
}