Spring Cloud Feign请求拦截器和日志

Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下:

创建拦截器

创建自定义请求拦截器,在发送请求前增加了一个请求头信息,进行身份校验。

package cn.appblog.feignclient;

import feign.RequestInterceptor;
import feign.RequestTemplate;

public class MyRequestInterceptor implements RequestInterceptor {
    public void apply(RequestTemplatetemplate) {
        template.header("Authorization", "home:appblog.cn");
    }
}

附加拦截器

在使用时,如果需要附加拦截器和附加编码器、解码器的操作类似,示例如下:

HelloClient helloClient = Feign.builder().requestInterceptor(new MyRequestInterceptor())
            .target(HelloClient.class, "http://service/");

测试验证

在默认情况下,不会记录接口的日志,如果需要了解接口的调用情况,可以使用 logLevel 方法进行配置日志级别:

  • NONE:默认值,不进行日志记录
  • BASIC:记录请求方法、URL、响应状态代码和执行时间
  • HEADERS:除了 BASIC 记录的信息外,还包括请求头和响应头
  • FULL:记录全部日志,包括请求头、请求体、请求与响应的元数据

配置日志级别为 FULL,我们测试验证拦截器是否生效,代码如下:

public class Startup {

    public static void main(String[] args) {
        HelloClient helloClient = Feign.builder()
            .client(new MyClient())
            .logLevel(Logger.Level.FULL)
            .logger(new Logger.JavaLogger().appendToFile("E:\\Temp\\logs\\speak.log"))
            .requestInterceptor(new MyRequestInterceptor())
            .target(HelloClient.class, "http://service");
        helloClient.speak("isbody");
    }

}

启动项目,然后查看日志如下:

[HelloClient#speak] ---> GET http://localhost:8080/speak?body=isbody HTTP/1.1
[HelloClient#speak] Authorization: home:appblog.cn
[HelloClient#speak] ---> END HTTP (0-byte body)
[HelloClient#speak] <--- HTTP/1.1 200 (790ms)
[HelloClient#speak] content-length: 23
[HelloClient#speak] content-type: text/plain;charset=UTF-8
[HelloClient#speak] date: Thu, 05 Apr 2018 11:40:27 GMT
[HelloClient#speak] x-application-context: helloworld-provider:8080
[HelloClient#speak]
[HelloClient#speak] speak is body port:8080
[HelloClient#speak] <--- END HTTP (23-byte body)

在请求头中,已经增加 Authorization: home:appblog.cn 数据

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/11/spring-cloud-feign-request-interceptor-and-logs/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Spring Cloud Feign请求拦截器和日志
Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方……
<<上一篇
下一篇>>
文章目录
关闭
目 录