java - 如何将 IPv4 绑定到 Maven 项目中的嵌入式 tomcat?
问题描述
当我执行
request.getRemoteAddr()
我将在 IPv6 中收到 0:0:0:0:0:0:0:1 的 localhost。但我需要的是 127.0.0.1 或通常只有 IPv4。如何在我的 maven 项目中实现嵌入 tomcat 的功能?
如果我执行request.getHeader("X-Forwarded-For")
,我会得到 IPv4 吗?因为在本地记录它时,我收到了一个 NULL ..
解决方案
你在这里为失败做准备。获得127.0.0.1
远程主机的唯一方法是只提供 IPV4,而不提供IPV6。虽然可用的 IPV4本地主机地址的数量不会很快用完,但公共 IPV4 地址的数量会用完,建议也能够与 IPV6 通信。任何通过 IPV6 的连接都会自然地显示其 IPV6 地址。
当您将自己限制为仅提供 IPV4 地址时,您甚至可能无法接收寻址为http://localhost
或的连接http://localhost:8080
,因为在许多当前操作系统上,localhost 表示::1
IPV6 地址。如果你不在那里听,浏览器将无法连接,除非它http://127.0.0.1(:8080)
明确连接。
咬紧牙关,更改您的本地逻辑以适应 IPV4和IPV6,然后您就完成了。在 tomcat 方面,您无法控制连接浏览器使用的地址。浏览器是。
标X-Forwarded-For
头由代理插入。如果您没有代理(这在 localhost 连接中很常见),它就不会存在(如您所见)。如果有代理,它将包含原始服务器的字符串表示形式——可能是 IPV4 地址(如果通过 IPV4 连接)、IPV6 地址甚至是完全限定的域名。此标头与您要实现的目标无关。
推荐阅读
- algorithm - 这个三重嵌套循环的大 O 是多少?
- android - Android导航视图点击监听器不起作用
- c# - Sys.WebForms.PageRequestManagerServerErrorException:引发了“System.Web.HttpUnhandledException”类型的异常
- collections - kotlin 将此转换的结果分配给一个变量
- c++ - 在 C++ 中强制删除 std::shared_ptr
- r - 在 r 中创建带有凸包的图
- sql-server - 将 3 个表连接到一个结果集中
- reactjs - react-router-dom 中的第二个和后续路由没有被渲染?
- excel - Excel VBA 代码,用于在一个单元格中进行多项选择的数据验证 - 用于多列
- xml - 使用 XML 和 XSL 创建 SVG 折线图