【问题标题】:HttpServletRequest.getRemoteAddr() empty for Tomcat 8 Java 8Tomcat 8 Java 8 的 HttpServletRequest.getRemoteAddr() 为空
【发布时间】:2016-03-21 21:34:49
【问题描述】:

如果我使用 Java 6 运行 Tomcat 7,HttpServletRequest.getRemoteAddr() 方法会返回我期望的 IP 地址。

如果我用 Java 8 运行 Tomcat 8,同样的方法会返回一个空字符串。

X-Forwarded-For 标头在这两种情况下也是 null

消息通过带有 Atmosphere 的 websockets 发送。

另外,remoteHost()remoteUser() 也是空的。

【问题讨论】:

  • 您没有提供足够的信息。此外,如果您费心在搜索引擎中输入HttpServletRequest.getRemoteAddr returns null,您会看到很多点击。
  • 是的,我搜索了大约一个小时,但没有人回答我关于唯一区别是 tomcat/java 版本的问题。非常感谢,你帮了大忙。

标签: java tomcat servlets websocket atmosphere


【解决方案1】:

JSR-356 Websocket 规范不公开客户端 IP,这就是 HttpServletRequest.getRemoteAddr() 返回 null 的原因。

这也解释了为什么 HttpServletRequest.getRemoteAddr() 根据您使用的 Atmosphere 版本返回空字符串或 0.0.0.0,因为 Atmosphere 会改变 HttpServletRequest

虽然 Websockets 上的 Tomcat 7 文档声明“Tomcat 实现了 JSR-356 定义的 Java WebSocket 1.1 API”,但当我运行 Tomcat 版本 7.0.68(即当前 Tomcat 7 版本)时,HttpServletRequest.getRemoteAddr() 仍然返回客户端通过 websocket 的 IP 地址。当我使用 Java 6、7 或 8 运行 Tomcat 时,情况确实如此。

关于 Websockets 的 Tomcat 8 文档还声明“Tomcat 实现了由 JSR-356 定义的 Java WebSocket 1.1 API”,当在 Tomcat 8 上运行我在 7 上运行的相同应用程序时,HttpServletRequest.getRemoteAddr() 返回一个空字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2017-09-18
    • 2015-01-09
    • 2019-11-30
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多