28

我已经使用 Spring/GWT 制作了一个使用 Flash 上传文件的 Web 应用程序。

当我使用 GWT 发送 ajax 请求并尝试获取用户 ip 地址时,我得到一个 ipv4 地址,例如:127.0.0.1

但是当我用 flash 上传文件时(以及同一个 webapp 上的发布请求),我得到一个 ipv6 地址 0:0:0:0:0:0:0:1

我使用相同的代码来获取用户 ip,即:

ServletRequestAttributes att = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
att.getRequest().getRemoteAddr();

问题是我使用了一个使用 ip 地址的签名来确保用户可以上传文件(由于使用 flash 上传时会话丢失的错误),并且当我使用 ajax 或通过 flash 发布时,ip 地址会发生变化。

有什么问题,我怎样才能获得相同的 ip 格式?

谢谢

4

3 回答 3

53

您可以通过使用此标志启动服务器来修复它

-Djava.net.preferIPv4Stack=true
于 2014-02-21T00:42:38.890 回答
12

原因是您在浏览器中键入的名称同时具有 ipv4 和 ipv6 地址。浏览器选择使用ipv4,flash选择使用ipv6。在服务器端您无能为力(无法转换)。
但是,您可以更改您的 DNS 并让您的名称只有一个地址,即 ipv4 或 ipv6。您还可以使用文字 IP 地址 (127.0.0.1) 而不是名称 (localhost) 进行连接。

于 2010-06-25T14:37:31.680 回答
0

你得到一个 IPv6 地址,然后 IPv6 正在被使用。IPv4 和 IPv6 是不同的协议,当两者都可用时,客户端会选择使用哪一个。

如果您想要客户端的 IPv4 地址,则可以通过不在 DNS 中通告 IPv6 地址来强制他们使用它。尽管随着 IPv6 的部署越来越多,这将是一个坏主意。支持两者都很好,因此最好与使用 IPv6 的客户端打交道。

于 2014-12-01T05:06:37.540 回答