Java 如何在maven项目中将IPv4绑定到嵌入式tomcat?
当我执行Java 如何在maven项目中将IPv4绑定到嵌入式tomcat?,java,maven,tomcat,ip,Java,Maven,Tomcat,Ip,当我执行 request.getRemoteAddr() 我将在IPv6中接收localhost,它是0:0:0:0:0:0:1。但我需要的是127.0.0.1或通常仅IPv4。我如何实现将tomcat嵌入到我的maven项目中的目标 如果我执行request.getHeader(“X-Forwarded-For”),我会得到IPv4吗?因为在本地记录时,我收到了一个空值。在“普通”Tomcat中,您需要传递-Djava.net.preferIPv4Stack=true才能使用IPv4。您应该能
request.getRemoteAddr()
我将在IPv6中接收localhost,它是0:0:0:0:0:0:1。但我需要的是127.0.0.1或通常仅IPv4。我如何实现将tomcat嵌入到我的maven项目中的目标
如果我执行request.getHeader(“X-Forwarded-For”)
,我会得到IPv4吗?因为在本地记录时,我收到了一个空值。在“普通”Tomcat中,您需要传递-Djava.net.preferIPv4Stack=true才能使用IPv4。您应该能够设置一个环境变量,或者,如果需要,在环境的开头有一些代码,例如:
Properties props = System.getProperties();
props.setProperty("java.net.preferIPv4Stack", "true");
你是在为自己的失败做准备。要将127.0.0.1
作为远程主机,唯一的方法是只提供IPV4,而不提供IPV6。虽然可用的IPV4本地主机地址的数量不会很快用完,但公共IPV4地址的数量会很快用完,而且最好也能使用IPV6。当然,通过IPV6的任何连接都会显示其IPV6地址
当您将自己限制为仅提供IPV4地址时,您甚至可能无法接收地址为http://localhost
或http://localhost:8080
,因为在许多当前操作系统上,localhost表示IPV6地址。如果您不收听,浏览器将无法连接,除非它连接到http://127.0.0.1(:8080)
明确
咬紧牙关,改变你的本地逻辑以适应IPV4和IPV6,你就完成了。在tomcat方面,您无法控制连接浏览器使用的地址。浏览器正在运行
X-Forwarded-For
头由代理插入。如果您没有代理(这在本地主机连接上很常见),它就不会存在(正如您所观察到的)。如果有代理,它将包含原始服务器的字符串表示形式-可能是IPV4地址(如果通过IPV4连接)、IPV6地址,甚至是完全限定的域名。此标题与您试图实现的目标无关。将环境变量CATALINA_OPTS
设置为exportCATALINA_OPTS=“-Djava.net.preferIPv4Stack=true”
没有帮助
然而,设置\u JAVA\u选项
env变量发挥了神奇的作用
export\u JAVA\u OPTIONS=“-Djava.net.preferIPv4Stack=true”
\35;对于永久性,请将其放入~/.bashrc
和源代码~/.bashrc
mvn清洁安装
java-jar文件.jar
netstat-tunlp
#请参阅tomcat侦听ipv4
你好谢谢你的回复,谢谢!您是否认为还有其他方法可以做到这一点,通过某种方式将属性存储在源代码之外@我不确定你的代码是什么样子。“嵌入式”可能意味着很多事情。我会尝试传递命令行版本--Djava.net.preferIPv4Stack=true
,看看是否有效。如果没有,您可能需要修改一些代码。不过,关于您的环境外观的更多细节也会很有用。您可以使用这些信息修改现有的问题。我应该将-Djava.net.preferIPv4Stack=true放在哪里?我正在使用Mac终端,因为我读了很多关于启动脚本catalina.sh的书,所以我找不到任何。。Tomcat8嵌入在我的java项目中的maven依赖项列表中。我会尽快更新我的问题@EnyangWang-如果你有那么多,那么设置环境变量CATALINA\u OPTS
。类似于命令行上的导出CATALINA_OPTS=“-Djava.net.preferIPv4Stack=true”
。请意识到,这将只适用于您所处的输入终端。如果您希望在所有环境中都使用此功能,请参阅,以了解有关如何使其“永久”的详细信息。