有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jsp从servlet请求java获取客户端IP地址

我有许多tomcat服务器,它们运行相同的JSP应用程序和负载平衡器。我想知道客户端请求来自哪个IP地址。我正在使用以下代码:

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

代码request.getHeader("X-FORWARDED-FOR")始终为空,并且request.getRemoteAddr()始终从不同的客户机返回相同的IP地址。有什么问题


共 (2) 个答案

  1. # 1 楼答案

    An "X-FORWARDED-FOR" header通常由位于客户端和web服务器之间的代理、负载平衡器或反向代理插入。然而,这只是一个惯例/事实标准,不是真正的标准。负载平衡器可能插入了不同的头,或者根本没有头。您需要检查负载平衡器的文档和/或配置

    request.getRemoteAddr()返回的IP地址是请求来自的直接上游IP地址。它很可能是负载平衡器的IP地址,但在其他情况下,它可能是客户端代理或NAT服务器的IP地址。一般来说,您不能指望它是实际的客户端IP地址

  2. # 2 楼答案

    你说,request.getHeader("X-FORWARDED-FOR") is always null,你应该在load balancer级别检查这个,可能从那里它会被修改

    关于第二点request.getRemoteAddr() is always returning the same IP address from diffrent client machines,如果您看到API Docs,它明确指定此api调用将返回发送请求的client address or address of last proxy,而在您的情况下,它是load balancer(我根据您的描述假设),这就是您接收相同IP地址的原因