对于Tomcat 8 Java 8,HttpServletRequest.getRemoteAddr()为空

对于Tomcat 8 Java 8,HttpServletRequest.getRemoteAddr()为空,java,tomcat,servlets,websocket,atmosphere,Java,Tomcat,Servlets,Websocket,Atmosphere,如果我使用Java 6运行Tomcat 7,则HttpServletRequest.getRemoteAddr()方法会像我预期的那样返回IP地址 如果我用Java8运行Tomcat8,同样的方法会返回一个空字符串 在这两种情况下,X-Forwarded-For头也是null 这些信息通过带有Atmosphere的WebSocket发送 另外,remoteHost()和remoteUser()也都是空的。JSR-356 Websocket规范没有公开客户端IP,这就是为什么HttpServlet

如果我使用Java 6运行Tomcat 7,则
HttpServletRequest.getRemoteAddr()
方法会像我预期的那样返回IP地址

如果我用Java8运行Tomcat8,同样的方法会返回一个空字符串

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

这些信息通过带有Atmosphere的WebSocket发送


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

JSR-356 Websocket规范没有公开客户端IP,这就是为什么
HttpServletRequest.getRemoteAddr()
返回
null

这也解释了为什么
HttpServletRequest.getRemoteAddr()
返回空字符串或0.0.0.0,具体取决于您使用的大气版本,因为大气会改变
HttpServletRequest

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


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

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