【问题标题】:request.getRemoteAddr() returns null [duplicate]request.getRemoteAddr() 返回 null [重复]
【发布时间】:2015-09-11 20:07:27
【问题描述】:

我正在使用 tomcat 7 和 servlet 3 在本地机器上开发一个应用程序。 在此,我试图读取 Servlet 中的客户端地址,以使用始终返回 null 的 request.getRemoteAddr() 来识别请求的来源。

我也尝试过 here ,但面临同样的问题。在我读到的一些地方,使用机器名而不是 localhost 将解决这个问题。我尝试使用机器名称仍然是同样的问题。

谁能提供任何帮助链接或解决方案文档以进行必要的配置更改以检索 IP 地址?

【问题讨论】:

  • 当我尝试 request.getHeader("x-forwarded-for") 时,在 tomcat 中它总是返回 null,但是当我在 Jboss AS7 中使用相同的代码时,它给出了与预期相比的值鸡IP。到目前为止,我们已经转移到 JBoss ,想知道我们是否必须使用 Tomcat 7 我需要启用哪些过滤器,如下所述。
  • 您解决了这个问题吗?你能不能让我,因为我也面临同样的问题。
  • 现在不记得了,但你可以试试这些memorynotfound.com/client-ip-address-java。 2)您还可以通过其他方式检查是否可以在客户端中添加一些标头标签(并确保客户端传递该信息)。 3)如果我记得在 server.xml 中配置的 access*.log 也有一些日志,请探索。

标签: java servlets ip-address


【解决方案1】:

检查您收到的标头。请求可能是通过 X-Forward-For 所在的代理来的。在这种情况下,您必须阅读 X-Forwarded-For 值。

req.getRemoteAddr() 通过从打开的套接字连接读取属性返回。可以说,中间有一个代理,代理是服务器的直接客户端。 Proxy 负责以 X-Forwarded-For 标头的形式发送实际客户端的地址。

默认情况下,tomcat 不支持 X-Forwarded-For 值。但是有一个过滤器可以为您完成这项工作。当您调用 req.getRemoteAddr();

时,此过滤器将返回 X-Forwarded-For

https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/RemoteIpFilter.html

【讨论】:

    【解决方案2】:

    如果请求已经被消费,则 getRemoteAddr() 可以返回 NULL 的一种可能性,这意味着已经发送了响应。这已在 Tomcat 7 中注意到

    还可以通过调用 getHeader("X-Forwarded-For") 检查 X-Forwarded-For 标头并查看它返回的 IP。

    【讨论】:

    • 嗨 Mudassar,我尝试在服务方法中添加为第一行.. 它用于返回 0.0.0.0.0.1 所以奇数值或 null
    • request.getHeader("x-forwarded-for") 得到什么
    • 当我执行与上面相同的 SOP 时,它会打印 null
    猜你喜欢
    • 2019-10-04
    • 2011-11-01
    • 2017-05-09
    • 2012-02-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多