Feign拦截器RequestInterceptor优先级排序详解

news/2024/12/22 13:13:11/

RequestInterceptor接口是Feign请求拦截接口,可以在请求发送之前添加header、记录日志等操作;

一、RequestInterceptor接口
public interface RequestInterceptor {/*** 每个请求都会调用apply方法*/void apply(RequestTemplate template);
}

其实现类有BaseRequestInterceptor抽象拦截器,主要用来添加子类的header信息,其实现类有两个,FeignAcceptGzipEncodingInterceptor用来添加 Accept-Encoding、gzip、deflate头信息,FeignContentGzipEncodingInterceptor用来添加Content-Encoding、gzip、deflate头信息;BasicAuthRequestInterceptor用来添加认证Authorization头信息;OAuth2FeignRequestInterceptor用来添加OAuth2认证相关信息;这五个默认实现只有开启相关配置后才可以启用,优先级是最低的;

二、RequestInterceptor接口实现类优先级

自定义拦截器会希望有一个优先级顺序,那如何确定优先级呢?可以通过PriorityOrdered>Ordered>@Order来设置优先级顺序,但是系统已经实现的优先级因为没有设置上述排序字段,所以优先级永远是最低的;

org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingConfiguration方法在系统启动时排序:

		if (requestInterceptors != null) {List<RequestInterceptor> interceptors = new ArrayList<>(requestInterceptors.values());// 对拦截器进行排序AnnotationAwareOrderComparator.sort(interceptors);builder.requestInterceptors(interceptors);}

feign.SynchronousMethodHandler#targetRequest方法在发送请求时轮询调用拦截器apply方法:

  Request targetRequest(RequestTemplate template) {for (RequestInterceptor interceptor : requestInterceptors) {interceptor.apply(template);}return target.apply(template);}

GitHub地址:https://github.com/mingyang66/spring-parent


http://www.ppmy.cn/news/667472.html

相关文章

处理火绒弹窗拦截无法开机启动

问题 最近在使用Word时, 发现右下角弹广告, 一阵排查, 最后确认是Office助手搞的鬼. 处理完后有点纳闷, 按理来说弹窗会被火绒主动拦截才对, 去任务栏一看, 弹窗拦截没启动. 于是又去排查自动启动的问题, 如文章头图所示, 点了没反应. 排查 这里点名表扬下火绒的技术团队,…

SpringBoot中通过mybatis拦截器打印sql执行时间

真正的光明决不是永没有黑暗的时间&#xff0c;只是永不被黑暗所掩蔽罢了。真正的英雄决不是永没有卑下的情操&#xff0c;只是永不被卑下的情操所屈服罢了。——《约翰 • 克利斯朵夫》 1、引言 开发时&#xff0c;在控制台打印SQL语句的执行时间和语句对于调试bug和优化SQL语…

IP地址绕过 . 拦截

这里牵涉到IP地址的一个概念&#xff1a;整数和点分十进制 先来看下这两个IP的结果&#xff1a; 可以看到这两个不同IP结果是相同的&#xff0c;可以说明其等价&#xff0c;那么&#xff0c;如何将IP地址转换过去呢&#xff1f; 220.181.57.216 每部分准换成16进制是 DC B5 3…

SpringBoot 拦截器(Interceptor)的使用

拦截器intercprot 和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候&#xff0c;里面都是filter 后来springmvc时就用interceptor 没太在意过区别&#xff0c;反正就是起检查作用的&#xff0c; 仔细阅读 过滤器&#xff08;filter&#xff09;和拦截器…

java自定义拦截所有请求_Java实现拦截HTTP请求的几种方式

在Java的服务端开发当中,拦截器是很常见的业务场景,这里对Java开发当中几种常见的拦截器的实现方式进行记录和分析。案例说明基于Spring Boot环境。 一:实现javax.servlet.Filter接口(使用过滤器方式拦截请求) import org.springframework.stereotype.Component; import jav…

mybatisplus拦截器处理处理sql

场景 在项目中&#xff0c;会出现一些对sql处理的需求&#xff0c;如果sql操作很多&#xff0c;为了简化处理&#xff0c;可以在sql执行的时候加入一个拦截器&#xff0c;并对将要执行的sql进行统一的处理。 这里已使用了mybatisplus客户端为例的实现方式。 代码实现 maven…

Android拦截陌生号码,安卓手机应该如何设置拦截陌生号码

打开“手机管家”&#xff0c;“骚扰拦截”&#xff0c;点击“设置”&#xff0c;开启骚扰拦截&#xff0c;点击“拦截规则”&#xff0c;开启需要拦截的类型即可、打开手机2113&#xff0c;点击【电话】标志。52612、点击4102右下角‘三个点’标1653志&#xff0c;在点击【内骚…

dio拦截器 flutter_Flutter 中 Dio 拦截器

有时我们不需要复杂的应用程序,只需要显示一个数据列表的简单功能,我们可以通过一个简单的方法来实现: Future fetchItems() {return Dio().("https://some-website.com/listing"); } 复制代码 没有任何错误,也不用用log打印任何响应信息。 但是事实是,几乎没有…