Feign / Eureka客户端未传递X-Forwarded-For标头

问题描述 投票:6回答:1

我使用Spring boot + Eureka + Feign客户端将请求从一个发现的服务器转发到另一台,并且运行正常。

在我的服务器上,我需要获取原始用户的IP。

我似乎找不到如何配置Feign客户端以自动编辑'X-Forwarded-For'标头,以便能够提取原始用户的IP地址。

[当我使用getRemoteAddr()时,我获得了代理IP地址(如预期的那样)。当尝试提取request.getHeader(“ X-Forwarded-For”)时,我总是得到null。

我应该在哪里添加/配置此功能?

spring-boot http-headers netflix-eureka netflix-feign
1个回答
0
投票

您需要添加自己的拦截器,该拦截器会将此标头添加到请求中。

a good example in Feign docs(但问这个问题时可能不存在):

static class ForwardedForInterceptor implements RequestInterceptor {
  @Override public void apply(RequestTemplate template) {
    template.header("X-Forwarded-For", "origin.host.com");
  }
}

public class Example {
  public static void main(String[] args) {
    Bank bank = Feign.builder()
                 .decoder(accountDecoder)
                 .requestInterceptor(new ForwardedForInterceptor())
                 .target(Bank.class, "https://api.examplebank.com");
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.