【问题标题】:java httpRequest getRemoteAddr allways return 127.0.0.1java http请求getRemoteAddr总是返回127.0.0.1
【发布时间】:2014-01-25 00:15:24
【问题描述】:

大家好,感谢您的帮助,

我正在使用 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 的电脑不同的电脑连接到服务器。

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

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

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

我现在很迷茫,知道为什么会这样吗?

【问题讨论】:

  • 我认为如果您在同一台物理机上进行测试,它将始终显示本地 IP (127.0.0.1)..
  • 那是我不在同一台物理机上测试的东西。
  • 您的虚拟机是否有公共 IP,或者您是否使用某种本地 NAT 或基于 iptables 的端口转发?您是通过 Apache 前端访问 Tomcat 还是直接调用 Tomcat?
  • 服务器和我的电脑都在一个私有 LAN (10.X.X.X) 中,我正在使用 Apache
  • 我忘了说所有流量都重定向到8443端口

标签: java jsf tomcat localhost httprequest


【解决方案1】:

首先,检查您的 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() 时,它会提供正确的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多