apache - HttpServletRequest.getRemoteAddr() 返回错误的地址

标签 apache jboss servlets

我们需要通过 Seam 操作记录客户端的 IP 地址。目前,我们使用的代码是:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest)context.getRequest();

this.remoteAddress =  request.getRemoteAddr();

但是,这似乎总是返回我们网络的内部地址,而不是客户端的 IP 地址。根据我的研究,网络中的反向代理似乎会让事情变得困惑,但我们也许可以通过重新配置我们的网络服务器来解决它。有其他人遇到过这个问题吗?您是如何解决的?

我们正在使用 JBoss 5.1 应用服务器和 Apache Web 服务器。谢谢!

最佳答案

您可以“透视”代理并使用 X-FORWARDED-FOR header 获取原始请求者的地址

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

我猜原始请求者和您的服务器之间的代理行为不当可能会导致真实值丢失。

引用号:wikipedia description of X-FORWARDED-FOR

关于apache - HttpServletRequest.getRemoteAddr() 返回错误的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767080/

相关文章:

java - struts2 展示的 Maven 构建失败

java - 将大量数据从 servlet 传输到 android 应用程序

ruby-on-rails - Rails3、apache、乘客不工作。但rails2应用程序可以在相同的环境中工作

mysql - 在 ubuntu 上使用 apache 和 passenger 运行 rails 应用程序

java - 从 shell 脚本停止 jboss 5.x

java - 获取 Java 进程的 CPU 使用率

java - Servlet ArrayList 到 JSP(从对象到 ArrayList 的未经检查的转换)

java - 如何从 Netbeans 上的 Servlet 中的项目类路径获取图像

apache - 如何将不同的子域请求重定向到不同的端口

php - 500 内部服务器错误 - 日志位置?