FeignClient 正在传递 headers

FeignClient is passing on headers

我有大约 10 个微服务,全部使用 Spring boot 2 使用 Eureka 和 FeignClients 构建。我的微服务使用某些 header 值来跟踪数据,因此当使用 FeignClient 时,它需要传递传入请求中的某些值。因此,如果微服务 1 调用微服务 2,它必须将传入请求中的 header 传递给微服务 2。我一直无法找到如何做到这一点。我知道他们是 @Header 但是如果你有 20 个 FeignClients 那么你不想手动将 @header 添加到所有 FeignClients。你能指出 FeignClients 必须从传入请求中读取某个 header 并在 FeignClient 中传递它吗?

您可以在 Feign 中使用请求拦截器。

示例实现:

请求拦截器:

@Component
public class MyRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String authorization = requestAttributes.getRequest().getHeader(HttpHeaders.AUTHORIZATION);
        if(null != authorization) {
            template.header(HttpHeaders.AUTHORIZATION, authorization);
        }
    }

}

Bean 配置:

@Configuration
public class CustomFeignConfig {

    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }

    @Bean
    public MyRequestInterceptor basicAuthRequestInterceptor() {
        return new MyRequestInterceptor();
    }

    @Bean
    public OkHttpClient client() {
        return new OkHttpClient();
    }

}