Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在maven项目中将IPv4绑定到嵌入式tomcat?_Java_Maven_Tomcat_Ip - Fatal编程技术网

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
设置为export
CATALINA_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”
    。请意识到,这将只适用于您所处的输入终端。如果您希望在所有环境中都使用此功能,请参阅,以了解有关如何使其“永久”的详细信息。