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 数据

上一篇 Spring Cloud消息总线RabbitMQ方式
下一篇 Spring Cloud手动创建Feign客户端后zipkin调用链断层问题解决
目录
文章列表
1 使用Composer安装Magento 2.4
使用Composer安装Magento 2.4
2
MySQL 复制表
MySQL 复制表
3
MongoDB查询文档
MongoDB查询文档
4
腾讯企业邮箱IMAP和SMTP
腾讯企业邮箱IMAP和SMTP
5
微信境外服务商支付
微信境外服务商支付
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。