在java中检索客户端IP地址时,获取request.getHeader(" X-FORWARDED-FOR")的空值?

时间:2014-09-02 18:02:15

标签: java tomcat java-ee networking ip

我已经在具有IP地址10.xx.xx.90的计算机上的Tomcat 6.0上部署了我的Web应用程序。然后我从具有IP地址(10.xx.xx.56)的m / c发出一个http请求(从浏览器)到这个应用程序。

我想使用下面的代码在我的应用程序中获取客户端(10.xx.xx.56)的IP地址。但是我获取了request.getHeader(“X-FORWARDED-FOR”)的空值,其中as request.getRemoteAddr()返回部署应用程序的计算机的IP地址,即10.xx.xx.90。

但是,如果我从独立的java程序对应用程序进行http调用,我可以获得客户端m / c ip地址。那么,获取客户端IP地址的正确方法是什么。我需要在我的tomcat中配置一些东西吗?

   String ipAddress = request.getHeader("X-FORWARDED-FOR");  
   if (ipAddress == null) {  
   ipAddress = request.getRemoteAddr();  
   }

1 个答案:

答案 0 :(得分:0)

如果您使用reverse proxy,您应该知道它。但是,最终客户端可能会落后于常规Web代理。无论如何,负载均衡器或代理将设置“X-Forwarded-For”。来自Wikipedia文章,

  

X-Forwarded-For(XFF)HTTP头字段是用于识别通过HTTP代理或负载平衡器连接到Web服务器的客户端的原始IP地址的事实标准。

根据您的评论和问题,没有代理或负载均衡器。对于最佳实践,我建议您先检查标题。如果它为null,则使用request.getRemoteAddr()(您报告为工作)。