Spring Cloud Feign 拦截器

Posted

技术标签:

【中文标题】Spring Cloud Feign 拦截器【英文标题】:Spring Cloud Feign Interceptor 【发布时间】:2015-10-21 17:37:26 【问题描述】:

我创建了一个 ClientHttpRequestInterceptor 用于拦截所有传出的 RestTemplate 请求和响应。我想将拦截器添加到所有传出的 Feign 请求/响应中。有没有办法做到这一点?

我知道有一个 feign.RequestInterceptor 但是这样我只能拦截请求而不是响应。

我在 Github 中找到了一个 FeignConfiguration 类,它可以添加拦截器,但我不知道它在哪个 maven 依赖版本中。

【问题讨论】:

【参考方案1】:

如何在 Spring Cloud OpenFeign 中拦截响应的实际示例。

    通过扩展Client.Default创建自定义Client,如下所示:
public class CustomFeignClient extends Client.Default 


    public CustomFeignClient(SSLSocketFactory sslContextFactory, HostnameVerifier hostnameVerifier) 
        super(sslContextFactory, hostnameVerifier);
    

    @Override
    public Response execute(Request request, Request.Options options) throws IOException 

        Response response = super.execute(request, options);
        InputStream bodyStream = response.body().asInputStream();

        String responseBody = StreamUtils.copyToString(bodyStream, StandardCharsets.UTF_8);

        //TODO do whatever you want with the responseBody - parse and modify it

        return response.toBuilder().body(responseBody, StandardCharsets.UTF_8).build();
    

    然后在配置类中使用自定义Client
public class FeignClientConfig 


    public FeignClientConfig()  

    @Bean
    public Client client() 
        return new CustomFeignClient(null, null);
    


    最后,使用 FeignClient 中的配置类:
@FeignClient(name = "api-client", url = "$api.base-url", configuration = FeignClientConfig.class)
public interface ApiClient 


祝你好运

【讨论】:

【参考方案2】:

如果你想使用 spring cloud 中的 feign,使用 org.springframework.cloud:spring-cloud-starter-feign 作为你的依赖坐标。目前修改响应的唯一方法是实现自己的feign.Client

【讨论】:

谢谢@spencergibb。我目前正在使用 org.springframework.cloud:spring-cloud-starter-feign 的 Feign。

以上是关于Spring Cloud Feign 拦截器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Feign 参数上下文设计

Spring Cloud Alibaba - 15 微服务之间使用Feign实现参数的透传

spring cloud Feign oauth2令牌传递

如何排除特定 Spring Cloud Feign 客户端的 RequestInterceptor?

Spring Cloud Alibaba全家桶——微服务调用组件Feign

Spring Cloud Alibaba - 14 OpenFeign自定义配置 + 调用优化 + 超时时间