今天群里在说产品的trace_log获取到的ip地址都是0:0:0:0:0:0:0:1的问题,自己的一个项目里刚好有对客户端登录信息的记录,顺带记一笔。
实际上这个只是ipv6的127.0.0.1,可以在你的hosts里面找到他,贴上我的配置。
windows请看C:\Windows\system32\drivers\etc\hosts
Linux/Unix/Mac请看/etc/hosts
这是我的hosts(请注意加粗部分):
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
192.168.56.129 VM-Hive-NAT
192.168.3.105 VM-Hive-Bridge
有几个办法解决,第一,就是记录的时候把ipv6的127.0.0.1转换成ipv4的127.0.0.1
详见代码
public String getRemoteHost(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.getRemoteAddr();
}
return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
}
第二个办法就是直接干掉hosts中的 "::1 localhost"啦~
记得注释掉或者删除以后要重启网络服务或者更新dns解析
windows可以打开cmd: ipconfig /flushdns
linux可以sudo /etc/init.d/network restart
如果还有问题,重启一下tomcat或者其他web服务器应该就好了