Spring Cloud Feign请求拦截器和日志

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

创建拦截器

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

1
2
3
4
5
6
7
8
9
10
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");
}
}

附加拦截器

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

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

测试验证

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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");
}

}

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

1
2
3
4
5
6
7
8
9
10
11
[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 数据

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :