Java Can';如果使用";从HttpServletRequest获取IP;“本地主机”;统一资源定位地址

Java Can';如果使用";从HttpServletRequest获取IP;“本地主机”;统一资源定位地址,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,尝试从HttpServletRequest获取IP时遇到问题,请先查看我的编码: String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip

尝试从HttpServletRequest获取IP时遇到问题,请先查看我的编码:

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.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip; 
我的问题是,如果使用以下URL打开应用程序(我的电脑的URL为18.111,服务器部署在localhost上)”https://192.168.18.111:8443/test/main.html,我可以用上面的编码获得正确的URL,但如果用https://localhost:8443/test/main.html,它将返回类似于“0.1.0.1…”的内容,并带有上述函数,为什么这个函数不适用于“localhost”,或者有人知道是否有更好的方法从HttpServletRequest获取IP吗?

为什么不试试

request.getRemoteAddr()
只是?您真的需要原始IP地址(由“X-Forwarded-For”提供的地址)吗?我猜有时候,看到一些哑LAN地址而不是上面方法提供的可寻址资源是没有用的

以后编辑:


看看这个问题:它似乎是固定的。

您的方法的结果是绝对正确的。 我假设你得到的数字是
0:0:0:0:0:0:0:1
。这是回送地址的有效形式但它只是IPv6格式的本地主机。 本地主机的IPv4地址为
127.0.0.1
,本地主机的IPv6地址为
0:0:0:0:0:1

问题是URL
https://localhost:8443/test/main.html
默认情况下匹配两个版本的IP协议。显然,您的浏览器选择使用IPv6


对于本地测试,请尝试使用文字地址
127.0.0.1
而不是名称
localhost
。或者,您可以使DNS设置中只有IPv4地址。

0.1.0.1?哇,第127.0.0.1位?您的计算机已启用IPv6吗?操作系统有哪些功能?试一下我的操作系统是ubuntu,我不确定我是否在我的机器上启用了IPV6
getRemoteAddress()
没有向您提供客户端的IP地址,如果网络有中间节点。代理和负载平衡器尤其如此。你是对的,这就是为什么我在回答中添加了编辑。OP可以从那里检查正确答案。好的,得到它,但是对于这个“您可以在DNS设置中只设置IPv4地址”。如何在浏览器中进行设置?