我在 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
c# - 使用 Newtonsoft.JSON 自定义转换器读取具有不同输入的 json