java httpRequest getRemoteAddr总是返回127.0.0.1

时间:2014-01-07 10:40:53

标签: java jsf tomcat localhost httprequest

大家好,感谢您的帮助,

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

我使用以下代码:

HttpServletRequest request=(HttpServletRequest) context.getExternalContext().getRequest();
remoteAddress=request.getRemoteAddr();

问题是,当我检查我的应用程序日志以检查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虚拟机中运行
  • 我从与包含VM的PC不同的PC连接到服务器。

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

request.getHeader("X-FORWARDED-FOR");

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

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

1 个答案:

答案 0 :(得分:2)

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

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

如果你已经这样做了,你可以使用Tomcat的RemoteIpValve

来实现这一目标。
<Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="X-Forwarded-For"
           requestAttributesEnabled="true"
           internalProxies="127.0.0.1"  />

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