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

  • 创建拦截器

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

    package org.lixue.feignclient;

    import feign.RequestInterceptor;

    import feign.RequestTemplate;

    public class MyRequestInterceptor implements RequestInterceptor{

    public void apply(RequestTemplatetemplate){

    template.header("Authorization","lixue:123456");

    }

    }

  • 附加拦截器

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

    HelloWorldClientspeakClient=

    Feign.builder().requestInterceptor(new MyRequestInterceptor())

    .target(HelloWorldClient.class,"http://localhost:8080/");

  • 测试验证

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

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

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

    public class Startup{

    public static void main(String[]args){

    HelloWorldClientspeakClient=

    Feign.builder().client(new MyClient())

    .logLevel(Logger.Level.FULL)

    .logger(new Logger.JavaLogger().appendToFile("E:\\Temp\\logs\\speak.log"))

    .requestInterceptor(new MyRequestInterceptor())

    .target(HelloWorldClient.class,"http://localhost:8080/");

    System.out.println(speakClient.speak("isbody"));

    }

    }

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

    [HelloWorldClient#speak] ---> GET http://localhost:8080/speak?body=is+body HTTP/1.1

    [HelloWorldClient#speak] Authorization: lixue:123456

    [HelloWorldClient#speak] ---> END HTTP (0-byte body)

    [HelloWorldClient#speak] <--- HTTP/1.1 200 (790ms)

    [HelloWorldClient#speak] content-length: 23

    [HelloWorldClient#speak] content-type: text/plain;charset=UTF-8

    [HelloWorldClient#speak] date: Thu, 05 Apr 2018 11:40:27 GMT

    [HelloWorldClient#speak] x-application-context: helloworld-provider:8080

    [HelloWorldClient#speak]

    [HelloWorldClient#speak] speak is body port:8080

    [HelloWorldClient#speak] <--- END HTTP (23-byte body)

    在请求头中,已经增加了 Authorization: lixue:123456 数据

Feign 请求拦截器和日志的更多相关文章

  1. 实现Feign请求拦截器,对请求header等参数进行转发

    参考:Feign传递请求头信息(Finchley版本) 问题:通过Feign远程调用服务,无法传递header参数. 解决方式:实现RequestInterceptor接口(对所有的Feign请求进行 ...

  2. Vue添加请求拦截器

    一.现象 统一处理错误及配置请求信息 二.解决 1.安装 axios  , 命令: npm install axios --save-dev 2.在根目录的config目录下新建文件 axios.js ...

  3. 细说vue axios登录请求拦截器

    当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...

  4. vue 路由拦截器和请求拦截器

    路由拦截器 已路由为导向 router.beforeEach((to,from,next)=>{ if(to.path=='/login' || localStorage.getItem('to ...

  5. vue+axois 封装请求+拦截器(请求锁+统一错误)

     需求 封装常用请求 拦截器-请求锁 统一处理错误码 一.封装常用的请求 解决痛点:不要每一个模块的api都还要写get,post,patch请求方法.直接将这些常用的方法封装好. 解决方案:写一个类 ...

  6. http request 请求拦截器,有token值则配置上token值

    // http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...

  7. axios源码解析 - 请求拦截器

    axios请求拦截器,也就是在请求发送之前执行自定义的函数. axios源码版本 - ^0.27.2 (源码是精简版) 平时在业务中会这样去写请求拦截器,代码如下: // 创建一个新的实例 var s ...

  8. struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置

    1.权限拦截器 package login; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Serv ...

  9. 使用spring拦截器实现日志管理

    使用HandlerInterceptor拦截器,可以拦截请求,实现通用的日志管理操作 一.添加拦截器类 在"src/main/java"代码文件夹的"org.xs.dem ...

随机推荐

  1. [工作日志] 2018-11-21 主要: 改bug 自测 :校验图片后缀名

    正则表达式 用以下方式去校验图片的后缀 String reg = ".+(.JPEG|.jpeg|.JPG|.jpg)$";String imgp= "Redocn_20 ...

  2. HDU 6143 17多校8 Killer Names(组合数学)

    题目传送:Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human appre ...

  3. Vue 之 element-ui upload组件的文件类型

    在使用element-ui的upload上传组件的时候,有时候会遇到 控制上传文件类型 的需求,只需要配置accept属性为允许的类型即可,比如: <el-upload class=" ...

  4. 2.21 JS处理滚动条

    2.21 JS处理滚动条 前言    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了.常见场景:当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到 ...

  5. A记录和CNAME记录的区别

    1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...

  6. Ioc容器beanDefinition-Spring 源码系列(1)

    Ioc容器beanDefinition-Spring 源码系列(1) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器 ...

  7. cf——Sasha and a Bit of Relax(dp,math)

    关于异或运算,是可以求前缀和的.还有一些异或运算的性质 0^a=a; 交换律 a^b=b^a 结合律 a^(b^c)=(a^b)^c 分配率 a^(b+c)=a^b+a^c 自反律 a^b^b=a 判 ...

  8. inner join 与一般笛卡尔积的区别

    inner join 与一般笛卡尔积的区别:inner join是笛卡尔积的特殊形式.如果有表a和表b,表a有m条记录,表b有n条记录,则一般笛卡尔积后得到的记录条数是m*n条,记录之间的组合是随意的 ...

  9. GraphQL和C#

    GraphQL ---02 GraphQL和C#结合的实战项目   本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方 ...

  10. Blender界面及模式统计

    Blender2.79b安装后默认界面分布: 所有窗口: 窗口: 3D View的9种模式: