现在需要得到客户端的IP地址使用request请求,现在有三种结果,一种是需要的正确的IP,一种是空就是没得到,还有一种也是大多数情况得到的却是服务器的IP地址.网上的借助请求报头中的x-forwarded-for 的方法没有任何效果,请大家帮忙分析下
初步调查发现,有些客户端存在代理登录,但同属于内网系统,其他应用登录可以正常获取IP,
x-forwarded-for只是代理的其中一种,还有很多其他的字段,你需要一一获取:
Proxy-Client-IP:使用apache代理
WL-Proxy-Client-IP:使用weblogic时
HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR:有一些代理
X-Real-IP:Nginx代理
现在问题是得到了IP,但IP是服务器地址,不是客户端地址
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}