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全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论