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

我在 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());
    }
}

就这么简单!

https://stackoverflow.com/questions/67016887/

相关文章:

android - 如何在 Android 中更改 TextInputLayout 的 boxStr

git - 如何使用 gitlab-ci.yml 进行简单的 pull ?

validation - VeeValidate 4 : two forms on one page

javascript - SwiftUI:在 macOS 上与 WKWebView 的 Javasc

reactjs - React Portal 中 nextJS 应用程序的转发样式

spring-boot - StreamingResponseBodyReturnValueHand

python - VSCode 终端不显示所有行

c# - 使用 Newtonsoft.JSON 自定义转换器读取具有不同输入的 json

javascript - 如何让 Bootstrap Toasts 不自动消失?

python - 类型错误 : forward() takes 2 positional argum