如何在java中获取用户ip地址

如何在java中获取用户ip地址,java,Java,虽然这看起来很简单,但我尝试了通常的request.getRemoteAddr(),request.getRemoteHost(),但我一直在获取服务器地址。关于我的配置,我得到我的网关ip。有人知道如何获取acutal用户的IP地址吗 谢谢如果您和用户之间有代理,那么您可能需要查看。请注意,这也不能保证有效,但如果您只需要“足够好”,那么它可能就足够了。Apache Http将集成一个安全机制,以处理带有mod_remoteip(1)的X-Forwarded-For头 这里有一个Tomcat

虽然这看起来很简单,但我尝试了通常的request.getRemoteAddr(),request.getRemoteHost(),但我一直在获取服务器地址。关于我的配置,我得到我的网关ip。有人知道如何获取acutal用户的IP地址吗


谢谢

如果您和用户之间有代理,那么您可能需要查看。请注意,这也不能保证有效,但如果您只需要“足够好”,那么它可能就足够了。

Apache Http将集成一个安全机制,以处理带有mod_remoteip(1)的X-Forwarded-For头

这里有一个Tomcat valve RemoteIpValve(2)和一个servlet筛选器XForwardedFilter(3),分别在Tomcat和WAR级别使用与mod_remoteip相同的安全机制集成X-Forwarded-For和X-Forwarded-Proto头文件

有鉴于此,
request.getRemoteAddr()
request.getRemoteHost()
request.isSecure()
request.getScheme()
request.getServerPort()
将公开X-Forwarded-For和X-Forwarded-Proto传输的值,而不是前面的代理/负载平衡器的值

希望这有帮助

西里尔

cleclerc@xebia.fr

(1) http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html

(2) http://code.google.com/p/xebia-france/wiki/RemoteIpValve


(3)

您的应用服务器前面是否有代理或其他web服务器(Apache等)?您是否尝试远程访问服务器,是否得到相同的结果?关于X-Forwarded-For的警告。一些实现实际上会添加一个可能在链中的IP地址列表,因此您可能需要预测哪一个是原始地址。X-Forwarded-For:client1,proxy1,proxy2@Trey:感谢您对IP地址链的评论。我必须修改一些日志代码以使用X-Forwarded-For,现在我知道要预测这种可能性,而不是对此感到惊讶。