首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring网关中获取真实的客户端IP地址

在Spring网关中获取真实的客户端IP地址
EN

Stack Overflow用户
提问于 2021-04-09 07:33:49
回答 3查看 3.9K关注 0票数 3

我在(SCG)中实现了速率限制。我获得以下代码的客户端IP地址

代码语言:javascript
复制
@Component
public class RemoteAddressKeyResolver implements KeyResolver {
    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        return Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
    }
}

我的SCG在代理后面,所以它获取代理地址,而不是真正的客户地址。我怎样才能得到真正的客户地址?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-09 09:34:21

我找到了解决办法!有一个RemoteAddressResolverXForwardedRemoteAddressResolver的实现。只要使用它,就不需要再实现逻辑了。

代码语言:javascript
复制
@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());
    }
}

就这么简单!

票数 2
EN

Stack Overflow用户

发布于 2021-04-09 07:49:04

您可以检查请求头键,如-转发-为 (取决于代理设置)

XFF报头是一个事实上的标准报头,用于识别通过HTTP代理或负载均衡器连接到web服务器的客户端的原始IP地址。

getFirst将返回原始ip

代码语言:javascript
复制
exchange.getRequest().getHeaders().getFirst("X-Forwarded-For")
票数 0
EN

Stack Overflow用户

发布于 2021-11-10 10:03:18

代码语言:javascript
复制
    return exchange -> {
        // String origin = exchange.getRequest().getHeaders().getFirst("X-Forwarded-For");
        // if (origin == null) 
        // origin = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();
        // return Mono.just(origin);
        XForwardedRemoteAddressResolver resolver = XForwardedRemoteAddressResolver.maxTrustedIndex(1);
        InetSocketAddress inetSocketAddress = resolver.resolve(exchange);
        logger.trace("inetSocketAddress {}", inetSocketAddress);
        logger.trace(".getHostName() {}", inetSocketAddress.getHostName());
        return Mono.just(inetSocketAddress.getHostName());
    };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67016887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档