从 WebSphere 中的请求获取客户端 ip 地址
Getting Client ip address from request in WebSphere
我有一个场景需要从请求中检索客户端的 IP 地址
我用来获取客户端 IP 地址的代码是:
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
据我了解,如果中间有代理,request.getHeader("X-FORWARDED-FOR")
将 return 客户端的 IP 地址。如果客户端和应用程序服务器之间没有代理,request.getHeader("X-FORWARDED-FOR")
将 return 为空,但 request.getRemoteAddr()
可以 return 在这种情况下的 IP 地址。
对于我的本地开发,我之间没有任何代理或负载均衡器。因此,在上面的代码中,request.getHeader("X-FORWARDED-FOR")
将 return 设为 null 然后我可以从 request.getRemoteAddr();
获取 IP 地址,这似乎工作正常。
对于我的 qa 和 prod 环境,我们有一个 F5 LOAD BALANCER,它将请求路由到 IHS Webserver,然后 IHS Webserver 将请求路由到部署此代码的 Websphere appserver。
所以,在这个分布式环境中,我猜测 request.getHeader("X-FORWARDED-FOR")
应该 return 我的客户端 IP 地址是正确的。我姐姐还没有机会在分布式环境中测试它。
我的想法是否正确,或者这种方法有什么问题吗?
提前致谢。
我的想法对吗
你的思路大部分是正确的,但有几点值得注意:
header实际上是X-Forwarded-For(注意大小写)。
我有一个场景需要从请求中检索客户端的 IP 地址
我用来获取客户端 IP 地址的代码是:
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
据我了解,如果中间有代理,request.getHeader("X-FORWARDED-FOR")
将 return 客户端的 IP 地址。如果客户端和应用程序服务器之间没有代理,request.getHeader("X-FORWARDED-FOR")
将 return 为空,但 request.getRemoteAddr()
可以 return 在这种情况下的 IP 地址。
对于我的本地开发,我之间没有任何代理或负载均衡器。因此,在上面的代码中,request.getHeader("X-FORWARDED-FOR")
将 return 设为 null 然后我可以从 request.getRemoteAddr();
获取 IP 地址,这似乎工作正常。
对于我的 qa 和 prod 环境,我们有一个 F5 LOAD BALANCER,它将请求路由到 IHS Webserver,然后 IHS Webserver 将请求路由到部署此代码的 Websphere appserver。
所以,在这个分布式环境中,我猜测 request.getHeader("X-FORWARDED-FOR")
应该 return 我的客户端 IP 地址是正确的。我姐姐还没有机会在分布式环境中测试它。
我的想法是否正确,或者这种方法有什么问题吗?
提前致谢。
我的想法对吗
你的思路大部分是正确的,但有几点值得注意:
header实际上是X-Forwarded-For(注意大小写)。