Feign 请求拦截器和日志
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 请求拦截器和日志的更多相关文章
- 实现Feign请求拦截器,对请求header等参数进行转发
参考:Feign传递请求头信息(Finchley版本) 问题:通过Feign远程调用服务,无法传递header参数. 解决方式:实现RequestInterceptor接口(对所有的Feign请求进行 ...
- Vue添加请求拦截器
一.现象 统一处理错误及配置请求信息 二.解决 1.安装 axios , 命令: npm install axios --save-dev 2.在根目录的config目录下新建文件 axios.js ...
- 细说vue axios登录请求拦截器
当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...
- vue 路由拦截器和请求拦截器
路由拦截器 已路由为导向 router.beforeEach((to,from,next)=>{ if(to.path=='/login' || localStorage.getItem('to ...
- vue+axois 封装请求+拦截器(请求锁+统一错误)
需求 封装常用请求 拦截器-请求锁 统一处理错误码 一.封装常用的请求 解决痛点:不要每一个模块的api都还要写get,post,patch请求方法.直接将这些常用的方法封装好. 解决方案:写一个类 ...
- http request 请求拦截器,有token值则配置上token值
// http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...
- axios源码解析 - 请求拦截器
axios请求拦截器,也就是在请求发送之前执行自定义的函数. axios源码版本 - ^0.27.2 (源码是精简版) 平时在业务中会这样去写请求拦截器,代码如下: // 创建一个新的实例 var s ...
- struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置
1.权限拦截器 package login; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Serv ...
- 使用spring拦截器实现日志管理
使用HandlerInterceptor拦截器,可以拦截请求,实现通用的日志管理操作 一.添加拦截器类 在"src/main/java"代码文件夹的"org.xs.dem ...
随机推荐
- 2019-03-11-day008-函数帮助
[ i for i in dir(set) if not i.startswith('_') ] 查看数据类型的方法   
- java pojo类
POJO POJO是Plain OrdinaryJava Object的缩写 可以当作简单的Java对象 实际就是普通JavaBeans 外文名 POJO 实际意义 普通JavaBeans 全 ...
- Java 容器的使用及数组、List、Set 的相互转换
0. Utils 字符串数组的排序: Set<String> set = new TreeSet<String>(); Collections.addAll(set, args ...
- dblogin userid ogg ERROR: Unable to connect to database using user ogg
测试环境,初步配置ogg,添加ogg用户连接数据库,提示无权限报错. 1.0 报错信息 GGSCI (enmo) > dblogin userid ogg,password ogg ERROR: ...
- 一道DP
也是校赛学长出的一道题~想穿了很简单..但我还是听了学长讲才明白. 观察力有待提高. Problem D: YaoBIG’s extra homeworkTime LimitMemory Limit1 ...
- 【计算机视觉】seetaFace
class impl class FaceDetection::Impl { public: Impl() : detector_(new seeta::fd::FuStDetector()), sl ...
- [LeetCode&Python] Problem 427. Construct Quad Tree
We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...
- XXS level1
level1 (1)查看PHP源码,发现可以通过调用window,alert()完成任务 window.alert = function() { confirm("完成的不错!") ...
- Blender 简单齿轮驱动
直入主题. 1. 用户设置里,勾选扩展网格(Add Mesh: Extra Objects):这样可以直接新增简单齿轮了,免得自己再造轮子. 2. 新增2个齿轮,12赤为主动轮,驱动24赤的被动轮: ...
- (0)diango、ORM的语法
Django PS:Django默认的是sqlite3数据库 PS:settings里面的这里可以修改数据库 1.^ 这个符号就是以什么开头 #url(r'index/',views.index) ...