【问题标题】:IP Address in Java and JSFJava 和 JSF 中的 IP 地址
【发布时间】:2014-01-08 08:13:52
【问题描述】:

我正在使用以下代码从客户端获取 IP 地址。

public String getIp(@Context HttpServletRequest requestContext, @Context SecurityContext context) {
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String ipAddress = request.getHeader("X-FORWARDED-FOR");
    if (ipAddress == null) {
        ipAddress = request.getRemoteAddr();
    }
    return ipAddress;
}

但是,当它执行时,它返回0:0:0:0:0:0:0:1。它在我的本地电脑上运行,我希望它能够返回良好的 ol127.0.0.1。有什么想法为什么不呢?

【问题讨论】:

  • 不是重复的。问题不在于获取 IP 地址,而在于为什么它是 0:0:0:0:0:0:0:1 而不是 127.0.0.1
  • 0:0:0:0:0:0:0:1 是 IPv6 IP 地址。如果您只需要 IPv4 响应,则需要确保将其设置为 IPv4。请参阅@Javier 的回答。

标签: java jsf ip


【解决方案1】:

但是,当它执行时,它返回 0:0:0:0:0:0:0:1。它在我的本地电脑上运行,我希望它能够返回良好的 ol 127.0.0.1。有什么想法为什么不呢?

如果机器位于代理后面,您将无法通过任何服务器端技术获取其本地 IP 或域信息

参考 [1]Getting IP address of client

【讨论】:

    【解决方案2】:

    您的机器具有双栈 (IPv4/IPv6)。 0:0:0:0:0:0:0:1 地址(也写作::1)是 localhost 的 IPv6 等价物。

    【讨论】:

    • 最好提供详细信息如何将其设置为仅捕获 IPv4 信息 ;)
    • 服务器应该绑定一个IPv4地址,否则它会监听每一个地址,优先使用IPv6。
    • 对,但是可以选择只绑定到ipv4接口。
    【解决方案3】:

    这已经晚了,但对于那些将来会访问此页面的人来说。如果你运行的是Tomcat,你可以设置JAVA_OPTS环境变量并添加

    -Djava.net.preferIPv4Stack=true 
    

    -Djava.net.preferIPv4Addresses=true
    

    在 Eclipse 中它可能被添加到:

    调试为 -> 调试配置 -> 环境。

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2015-05-29
      • 1970-01-01
      • 2012-08-10
      • 2012-02-05
      • 1970-01-01
      相关资源
      最近更新 更多