为什么 request.getRemoteAddr() 根据上下文(post query 或 ajax query)返回 ipv4 或 ipv6

2022-09-01 13:50:24

我使用Spring / GWT的Web应用程序,该应用程序使用Flash上传文件。

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

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

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

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

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

有什么问题,我怎么能得到相同的IP格式?

谢谢


答案 1

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

-Djava.net.preferIPv4Stack=true

答案 2

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


推荐