java - 在 Spring Cloud Gateway 中获取真实的客户端 IP 地址

标签 java spring spring-cloud-gateway

我在 Spring Cloud Gateway (SCG) 中实现速率限制。我使用以下代码获取客户端 IP 地址

@Component
public class RemoteAddressKeyResolver implements KeyResolver {
    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        return Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
    }
}

我的 SCG 在代理后面,因此它获取代理地址而不是真实客户端地址。如何获取真实的客户地址?

最佳答案

我找到了解决办法! RemoteAddressResolver 的实现是XForwardedRemoteAddressResolver。直接使用即可,不需要再实现逻辑。

@Component
public class RemoteAddressKeyResolver implements KeyResolver {
    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        XForwardedRemoteAddressResolver resolver = XForwardedRemoteAddressResolver.maxTrustedIndex(1);
        InetSocketAddress inetSocketAddress = resolver.resolve(exchange);
        return Mono.just(inetSocketAddress.getAddress().getHostAddress());
    }
}

就这么简单!

关于java - 在 Spring Cloud Gateway 中获取真实的客户端 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67016887/

相关文章:

java - 使用 JPATest 和 MongoDB Test 为 Polyglot Springboot 编写测试

java - Hibernate 尝试获取用户时出现 Spring 安全错误

java - 是否可以使 Spring Gateway 路由不区分大小写?

java - Spring Boot 云网关 - 除一个端点外始终为 404

java - 在 Java 中重新启动 handler.postDelayed

java - 重新获取锁

java - Sun Java KeyManagerFactory 和空密码

java - SOAP Web 服务,可以进行性能测试吗?

java - 如何 "remove the gobal prefix('/api') 然后转到 lb ://"when migrate to spring cloud gateway from zuul

java - 愚蠢类名的解决方法