[Java]web项目获取客户端ip

今天群里在说产品的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服务器应该就好了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc阅读 7,946评论 0 0
  • 本文章仅作为个人笔记 CDH官网地址:https://www.cloudera.com/ CDH镜像地址: c...
    草丛里的黄盖阅读 6,243评论 2 2
  • 1.命令格式:ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设...
    Nuuuu阅读 9,356评论 0 12
  • 1. 概述 在网络环境中一般用户只需要在浏览器中输入url如www.sunny.com就可以到对应服务器获取相应的...
    ghbsunny阅读 8,213评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,422评论 19 139