首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java httpRequest getRemoteAddr始终返回127.0.0.1

java httpRequest getRemoteAddr始终返回127.0.0.1
EN

Stack Overflow用户
提问于 2014-01-07 10:40:52
回答 1查看 3.8K关注 0票数 5

大家好,谢谢你们的帮助,

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

我使用以下代码:

代码语言:javascript
复制
HttpServletRequest request=(HttpServletRequest) context.getExternalContext().getRequest();
remoteAddress=request.getRemoteAddr();

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

信息07/01/2014 11:04:22 ->用户xxx从127.0.0.1连接

信息07/01/2014 11:27:43 ->用户xxx从127.0.0.1连接

欲了解更多细节:

  • 我用的是tomcat 7
  • 我的服务器在debian虚拟机中工作。
  • 我是连接到服务器从一个不同的pc与一个包含VM。

我在网上搜索过,并读到了有关使用以下内容的文章:

代码语言:javascript
复制
request.getHeader("X-FORWARDED-FOR");

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-07-28 19:56:11

首先,检查您的http服务器是否应该转发标头。你用的是nginx,这应该能用

代码语言:javascript
复制
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

代码语言:javascript
复制
<Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="X-Forwarded-For"
           requestAttributesEnabled="true"
           internalProxies="127.0.0.1"  />

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20969513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档