我们需要通过 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" );
我猜原始请求者和您的服务器之间的代理行为不当可能会导致真实值丢失。
关于apache - HttpServletRequest.getRemoteAddr() 返回错误的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767080/