我有一个场景,我需要从请求中检索客户端的ipaddress
我用来获取客户端的ipaddress的代码是:
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
根据我的理解,如果客户端之间有代理,request.getHeader("X-FORWARDED-FOR")
将返回客户端的ipaddress。如果客户端和应用服务器之间没有代理,request.getHeader("X-FORWARDED-FOR")
将返回null,但在这种情况下request.getRemoteAddr()
可以返回ipaddress。
对于我的本地开发,我之间没有任何代理或负载均衡器。所以,在上面的代码中,request.getHeader("X-FORWARDED-FOR")
将返回null,然后我可以从request.getRemoteAddr();
获取ipaddress,这似乎正常。
对于我的qa和prod环境,我们有一个F5 LOAD BALANCER,它将请求路由到IHS Webserver,然后将请求路由到将部署此代码的Websphere appserver。
所以,在这个分布式环境中,iam猜测request.getHeader("X-FORWARDED-FOR")
应该正确地返回客户端的ipaddress。我还没有机会在分布式环境中测试它。
我的想法是否正确或是否有任何问题?
预感谢。
我的想法是否正确
答案 0 :(得分:1)
你的想法大多是正确的,但这些事情值得注意:
标题实际上是X-Forwarded-For(注意案例)。