InetAddress.getLocalHost().getHostAddress() 取的本地 IP,于是把取得的 IP 地址打了出来,是 66.xx.xx.xx 的 IP,但实际本机 IP 是 192.168.11.185,怎么可能呢?难道是这个方法不会区分哪个 IP 才是真实 IP (这台机器有多个 IP 地址,有虚通道IP),用 ifconfig 命令查也没有这个 66 网段的IP呀!于是 PING 这个 66 网段的 IP 地址,还能 ping 通!又 ping 了一下本机的主机名(hostname),结果 PING 到了 66 这个 IP 上!嗯,问题有了结论了。
    查看 /etc/hosts 文件,里面果然有一条本机名和 66.xx.xx.xx IP 对应的记录。把它注释掉,然后修改了一下本机的主机名,又在 hosts 文件中加入主机名和 127.0.0.1 的对应,问题解决了。
    InetAddress.getLocalHost().getHostAddress() 方法的实现方法不是很清楚,就知道它能找到本机 IP,原来它是依靠本机的机器名去查询的 IP 地址,和 ping `hostname` 返回的 IP 地址是同一个,并不是 ifconfig 方法得到的 eth0 IP 地址。

 

可以用下面这个方法来获取客户端请求IP

//获得访问 controller 端口的客户端 ip 地址
    public String getRemoteIp() {
        HttpServletRequest request = null;
        try {
            request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        } catch (Exception e) {
            System.out.println("Can not get current IP.");
        }
        return request.getRemoteAddr();
    }