java - 从 WebSphere 中的请求获取客户端 IP 地址

标签 java jakarta-ee proxy websphere ip-address

我有一个场景,我需要从请求中检索客户端的 IP 地址

我用来获取客户端 IP 地址的代码是:

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

根据我的理解,如果中间有代理,request.getHeader("X-FORWARDED-FOR") 将返回客户端的 IP 地址。如果客户端和应用服务器之间没有代理,request.getHeader("X-FORWARDED-FOR") 将返回 null,但 request.getRemoteAddr() 可以返回在这种情况下是 IP 地址。

对于我的本地开发,我之间没有任何代理或负载均衡器。因此,在上面的代码中, request.getHeader("X-FORWARDED-FOR") 将返回 null,然后我可以从 request.getRemoteAddr(); 获取 IP 地址>这似乎工作正常。

对于我的 qa 和 prod 环境,我们有一个 F5 负载均衡器,它将请求路由到 IHS Webserver,然后 IHS Webserver 将请求路由到将在其上部署此代码的 Websphere 应用程序服务器。

因此,在这个分布式环境中,我猜测 request.getHeader("X-FORWARDED-FOR") 应该正确返回客户端的 ip 地址。我还没有机会在分布式环境中对此进行测试。

我的想法正确吗?这种方法有什么问题吗?

提前致谢。

我的想法对吗

最佳答案

您的想法大部分是正确的,但以下几点值得注意:

  1. header 实际上是 X-Forwarded-For(注意大小写)。

  2. You can have more than one such header .

  3. The header itself can contain more than one IP address.

关于java - 从 WebSphere 中的请求获取客户端 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589909/

相关文章:

java - Jersey SSE 客户端未接收到事件

java - 这是 32 位还是 64 位 JVM?

java - 记录实例的任何方法调用

java - *inject"编译时的接口(interface)方法实现

docker - 如何在gitlab CI中的docker-in-docker(dind)中设置代理

java - android sax 解析器处理程序

java - 使用 Apache Jena 查询 Wikipedia RDF 文件(Turtle 格式)

java - 什么是 JST 和 WST 服务器适配器?

java - 创建 servlet 时出现非 java 源文件夹错误

java - 无需任何内容即可打包和部署 Java EE Web 应用程序