今天使用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 注释或者删除就行
 
0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机
 如果项目部署在本机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;
    }








