java httpRequest getRemoteAddr 总是返回 127.0.0.1

ant*_*per 5 java jsf tomcat localhost httprequest

大家好,感谢您的帮助,

我正在使用 JSF 开发一个 Web 应用程序,出于安全原因,我需要在用户登录时捕获他的 IP。

我正在使用以下代码:

HttpServletRequest request=(HttpServletRequest) context.getExternalContext().getRequest();
remoteAddress=request.getRemoteAddr();
Run Code Online (Sandbox Code Playgroud)

问题是,当我检查应用程序日志以检查 IP 地址时,它总是返回 127.0.0.1。

[INFO] 07/01/2014 11:04:22 --> 用户 xxx 从 127.0.0.1 连接

[INFO] 07/01/2014 11:27:43 --> 用户 xxx 从 127.0.0.1 连接

欲了解更多详情:

  • 我使用的是tomcat 7
  • 我的服务器在 Debian 虚拟机中运行
  • 我从另一台电脑与包含虚拟机的电脑连接到服务器。

我在互联网上搜索并阅读了有关使用的信息:

request.getHeader("X-FORWARDED-FOR");
Run Code Online (Sandbox Code Playgroud)

但它并没有解决我的问题。

我现在很迷茫,有什么想法为什么会发生这种情况吗?

Die*_*ntz 3

首先,检查您的 http 服务器是否应该转发标头。你正在使用 nginx,这应该可以工作

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Run Code Online (Sandbox Code Playgroud)

如果您已经这样做了,您可以使用 Tomcat 来完成RemoteIpValve

<Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="X-Forwarded-For"
           requestAttributesEnabled="true"
           internalProxies="127.0.0.1"  />
Run Code Online (Sandbox Code Playgroud)

这样,当您致电 时request.getRemoteAddr(),它将提供正确的信息。