原文链接:
https://blog.youkuaiyun.com/u013126379/article/details/53324753
今天使用request.getRemoteAddr()获取IP时,得到了0:0:0:0:0:0:0:1,最后通过查询发现是C:\Windows\System32\drivers\etc\hosts这个文件中的配置问题。
hosts文件中默认有:
# 127.0.0.1 localhost# 0:0:0:0:0:0:0:1 localhost
只需要把# 0:0:0:0:0:0:0:1 localhost 注释或者删除就行
如果项目部署在本机win7系统,访问时是通过 localhost 来访问,
用java获取ip地址可能会出现该问题,这时获取的ip将是 0:0:0:0:0:0:0:1
要是机器在局域网中,访问时使用自己的ip访问,如 我的ip是 :10.0.1.234
访问url:http://10.0.1.234:8080/demo
这时候请求会经过路由器转发,所以服务器获取的就是本机的局域网内ip,在java中获取的ip就是 10.0.1.234
public static String getIP(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (!checkIP(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (!checkIP(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (!checkIP(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
private static boolean checkIP(String ip) {
if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)
|| ip.split(".").length != 4) {
return false;
}
return true;
}