[color=green][size=medium][b] 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.getRemoteAddr();
} else {
int index = ip.indexOf(',');
if (index != -1) {
ip = ip.substring(0, index);
}
}
return ip;
当只有一层nginx反向代理时,可以通过“HTTP_X_REAL_IP”取得client的真实IP。
如果有二层nginx反向代理,则client的真实IP被包含在“HTTP_X_FORWARDED_FOR”中。
最不可信的是“REMOTE_ADDR”,它的内容完全可以被client指定!总之只要编译和配置正确,“HTTP_X_FORWARDED_FOR”总是包含了client的真实IP。[/b][/size][/color]
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.getRemoteAddr();
} else {
int index = ip.indexOf(',');
if (index != -1) {
ip = ip.substring(0, index);
}
}
return ip;
当只有一层nginx反向代理时,可以通过“HTTP_X_REAL_IP”取得client的真实IP。
如果有二层nginx反向代理,则client的真实IP被包含在“HTTP_X_FORWARDED_FOR”中。
最不可信的是“REMOTE_ADDR”,它的内容完全可以被client指定!总之只要编译和配置正确,“HTTP_X_FORWARDED_FOR”总是包含了client的真实IP。[/b][/size][/color]