如何在Maven项目中将IPv4绑定到嵌入式tomcat?

时间:2018-08-15 14:41:17

标签: java maven tomcat ip

执行时

request.getRemoteAddr()

我将在0:0:0:0:0:0:0:0:1的IPv6中接收本地主机。但是我需要的是127.0.0.1或通常只有IPv4。我如何在我的Maven项目中实现嵌入哪个tomcat?

如果我执行request.getHeader("X-Forwarded-For"),我会得到IPv4吗?因为在本地对其进行记录时,我为此收到了NULL。

3 个答案:

答案 0 :(得分:0)

在“正常” Tomcat中,您需要传递-Djava.net.preferIPv4Stack=true才能仅使用IPv4。您应该可以设置环境变量,或者,如果需要,可以在环境开始时添加一些代码,例如:

Properties props = System.getProperties();
props.setProperty("java.net.preferIPv4Stack", "true");

答案 1 :(得分:0)

您正在为失败做好准备。使127.0.0.1作为远程主机的唯一方法是提供IPV4,而从不提供 IPV6。虽然可用IPV4 localhost 地址的数量不会很快用完,但公共IPV4地址的数量却会很快用完,因此建议也可以使用IPV6。通过IPV6的任何连接 自然会显示其IPV6地址。

当您限制自己仅提供IPV4地址时,您甚至可能无法接收寻址为http://localhosthttp://localhost:8080的连接,因为在许多当前操作系统上,localhost表示{{1} },即IPV6地址。而且,如果您不在那里听,则浏览器将无法连接,除非它明确连接到::1

咬紧牙关,更改您的本地逻辑以适应IPV4 IPV6,您就完成了。在tomcat方面,您不受连接的浏览器使用的地址的控制。浏览器是。

http://127.0.0.1(:8080)标头由代理插入。如果您没有代理(这在localhost连接中很常见),它就不会存在(如您所观察)。如果有一个代理,它将包含原始服务器的字符串表示形式-可能是IPV4地址(如果通过IPV4连接),IPV6地址甚至是完全限定的域名。此标头与您要实现的目标无关。

答案 2 :(得分:0)

将环境变量CATALINA_OPTS设置为导出CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"并没有帮助。

但是设置_JAVA_OPTIONS env变量确实神奇。

  1. export _JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"#表示永久将其放入~/.bashrcsource ~/.bashrc
  2. mvn clean install
  3. java -jar file.jar
  4. netstat -tunlp#看到tomcat收听ipv4