微服务组件之OpenFeign\Feign的区别、RequestInterceptor配置全局拦截器、局部拦截器详解

本文主要是介绍微服务组件之OpenFeign\Feign的区别、RequestInterceptor配置全局拦截器、局部拦截器详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Feign和OpenFeign 

Feign

       Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>	

OpenFeign

        OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

RequestInterceptor请求拦截器

        RequestInterceptor是OpenFeign提供的一个拦截器,它可以在每一次接口调用之前,对这个接口进行拦截器,你可以对这个接口做一些额外的处理,例如:权限认证、添加请求头信息等等操作。         

        RequestInterceptor的使用步骤包括如下:

  • 实现RequestInterceptor请求拦截器。
  • 对实现的拦截器进行配置,分为全局配置以及局部配置。

实现RequestInterceptor请求拦截器

        自定义一个类,实现RequestInterceptor接口,重写apply()方法:

package com.gitee.code.interceptor;import feign.RequestInterceptor;
import feign.RequestTemplate;/*** @version 1.0.0* @Copyright (C) * @Description: 请求拦截器*/
public class CustomFeignInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {// TODO 在这里可以实现一些自定义的逻辑,例如:用户认证System.out.println("执行拦截器....");requestTemplate.query("name","Allen") ;requestTemplate.header(header, "secret"); //作用 :统一加 Headers : }
}

        配置类指定我们的自定义拦截器,拦截器需要继承RequestInterceptor,实现 apply(RequestTemplate requestTemplate)方法。在这个方法我们拿到了被拦截请求的RestTemplate实例,就可以往里面扔公共参数啦~

        在这里调用query,就是追加一个新的query param,还有其他api如header、body等等,按需调用即可。调用header,就是向请求头中添加一个header字段,其值为secret。

全局配置拦截器 

        上面虽然写好了拦截器,但是OpenFeign还不知道有这个拦截器,所以还需要通过配置,告诉OpenFeign使用我自己编写的拦截器。编写一个配置类,使用@Configuration注解,并且使用@Bean注解将RequestInterceptor注入到IOC容器里面。

        注意:这种方式配置的拦截器,是对所有的FeignClient都生效的。

package com.gitee.code.config;import com.gitee.code.interceptor.CustomFeignInterceptor;
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @version 1.0.0* @Description: OpenFeign 配置类*/
@Configuration
public class FeignConfig {/*** 注入自定义的拦截器*/@Beanpublic RequestInterceptor requestInterceptor() {return new CustomFeignInterceptor();}}

局部配置拦截器

        局部拦截器不同于全局拦截器,强调的是1对1配置【对于某一个FeignClient下的所有接口生效】,此时不需要在配置FeignConfig上面添加注解@Configuration,而是在@FeignClient注解的configuration参数指定一个配置类。示例如下所示:

@FeignClient(name = "auth",configuration = FeginConfig.class)
public interface AuthFeignService {/*** 该接口需要传输的http header ,需要每次手动传输header * 比较麻烦,重复代码多* /@PostMapping("/role/user/isSystemAdmin1")Boolean isSystemAdmin(@RequestBody Map entity,@RequestHeader String secret);/*** 拦截器 FeginHeaderInterceptor 自动配置传输参数 header,无需每次手动传输* 大大简化接口参数,减少手写冗余代码参数* /@PostMapping("/role/user/isSystemAdmin2")Boolean isSystemAdmin(@RequestBody Map entity);} 

        除了上面所述在FeignClient中通过configuration指定配置项,也可以通过在配置文件【application.yml】中指定局部拦截器。

# feign 配置
feign:client:config:# 这里写微服务的服务名称,例如:我这里写的是 service-provider 服务名称# 针对 service-provider 微服务的请求,都将执行这些配置信息service-provider:loggerlevel: full# 配置请求拦截器,可以多个requestInterceptors:- com.gitee.code.interceptor.CustomFeignInterceptor

参考文献

feign 全局 与 局部拦截器的区分与使用_feigninterceptor局部拦截-CSDN博客

Feign Interceptor 拦截器实现全局请求参数_feign拦截器获取请求参数-CSDN博客 

 

这篇关于微服务组件之OpenFeign\Feign的区别、RequestInterceptor配置全局拦截器、局部拦截器详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057273

相关文章

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

IDEA配置Tomcat远程调试

因为不想把本地的Tomcat配置改乱或者多人开发项目想测试,本文主要是记录一下,IDEA使用Tomcat远程调试的配置过程,免得一段时间不去配置到时候忘记(毕竟这次是因为忘了,所以才打算记录的…) 首先在catalina.sh添加以下内容 JAVA_OPTS="-Dcom.sun.management.jmxremote=-Dcom.sun.management.jmxremote.port

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Jitter Injection详解

一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通过调整数据包的时延和抖动,可以有效地降低误码率,提高数据传输的可靠性。均衡网络负载:通过对不同的数据流进行不同程度的抖动注入,可以实现网络资源的合理分配,提高整体传输效率。增