我已经使用Spring / GWT使用Flash上传文件。
当我用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或Post via flash时,ip地址会发生变化。
问题是什么?如何获得相同的ip格式?
感谢
答案 0 :(得分:42)
您可以通过使用此标志启动服务器来修复它
-Djava.net.preferIPv4Stack=true
答案 1 :(得分:11)
原因是您在浏览器中键入的名称同时包含ipv4和ipv6地址。浏览器选择使用ipv4,flash选择使用ipv6。在服务器端没有什么可以做的(没有办法转换) 但是,您可以更改DNS并使您的名称只有一个地址,ipv4或ipv6。您还可以使用文字IP地址(127.0.0.1)连接,而不是名称(localhost)。
答案 2 :(得分:0)
您获得IPv6地址,然后使用IPv6。 IPv4和IPv6是不同的协议,客户端选择在两者都可用时使用哪个协议。
如果您需要客户端的IPv4地址,则可以通过不在DNS中公布IPv6地址来强制它们使用它。随着IPv6的部署越来越多,这将是个坏主意。支持两者都很好,因此最好使用IPv6来处理客户端。