获取IP
public static String getIpAddress(ServletRequest request) {
String ip = ((HttpServletRequest) request).getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ((HttpServletRequest) request).getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ((HttpServletRequest) request).getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ((HttpServletRequest) request).getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = ((HttpServletRequest) request).getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
本地测试获取到的ip为 0:0:0:0:0:0:0:1
查看 C:\Windows\System32\drivers\etc\hosts 这个文件
0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4 127.0.0.1 localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为是同一个是因为我们使用的大多数电脑上都讲localhost指向了127.0.0.1这个地址。
最有效的解决方案 :改变请求的ip,不要使用localhost