Feign的拦截器RequestInterceptor

2023-10-29 15:40

本文主要是介绍Feign的拦截器RequestInterceptor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Feign的拦截器RequestInterceptor

SpringCloud的微服务使用Feign进行服务间调用的时候可以使用RequestInterceptor统一拦截请求来完成设置header等相关请求,但RequestInterceptor和ClientHttpRequestInterceptor有点不同,它拿不到原本的请求,所以要通过其他方法来获取原本的请求

首先创建自定义的RequestInterceptor

这里通过RequestContextHolder获取到当前的request

@Slf4j
@Component
public class MyFeignInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();log.info("===request: {}", template.url());template.header("aaaa", "bbbb");}
}

然后定义一个feign的接口类

@FeignClient(name = "SPRING-CLOUD-CLIENT-DEMO")
public interface ClientFeign {@GetMapping("/demo/get")String weight(@RequestParam String param);
}

再创建一个controller

@Slf4j
@RestController
@RequestMapping("/interceptor")
public class InterceptorController {@Autowiredprivate ClientFeign clientFeign;@GetMapping("/feign")public String feign(@RequestParam String param) {return clientFeign.weight(param);}}

运行程序测试一下接口
在这里插入图片描述

查看程序打印

可以看到进入了我们自定义的RequestInterceptor

INFO 25936 --- [ctor-http-nio-3] c.m.d.g.interceptor.MyFeignInterceptor   : ===request: /demo/weight?param=a

再查看feign调用的程序日志,可以看到设置的header信息

  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : aaaa: aINFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : websession: ECF4D97D02EEAFDDA3C15A7F1F050F61INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: aaaa, bbbbINFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: accept, */*INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: user-agent, Java/1.8.0_191INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: host, 39.108.15.147:8801INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: connection, keep-alive

欢迎关注微信交流
在这里插入图片描述

这篇关于Feign的拦截器RequestInterceptor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

【SpringMVC学习09】SpringMVC中的拦截器

Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法。 1. springmvc拦截器的定义和配置 1.1 springmvc拦截器的定义 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的

Feign入门讲解

1.引入 之前在讲解服务之间的远程调用的时候都是用RestTemplate来发送HTTP请求,但这种方式显得比较冗余,不方便维护,所以现在使用Feign来代替这种方式 Feign是一个声明式HTTP客户端,专门用来发送HTTP请求 2.快速入门 2.1.引入依赖 <!--feign的客户端依赖--><dependency><groupId>org.springframework.

Interceptor拦截器无法拦截根目录的解决方法

今天发现了一个bug,首页home.jsp的某一个值是通过拦截器拦截所有页面,然后赋值的,然而我们的首页是通过index.jsp直接引用首页home.jsp代码(如下),拦截器无法拦截。 <%@ include file="./WEB-INF/jsp/home.jsp" %> 首先,第一个解决方法就是,将首页的引用文件改为跳转即可 <html><head><meta http-equiv

【系统搭建】Feign + Ribbon + Eureka

感谢阅读,下次再见。ヾ( ̄▽ ̄)ByeBye!

OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头

一、需求 OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头 在使用Spring Boot结合OpenFeign进行微服务间调用时,需要在发起HTTP请求时添加一些默认的请求头,比如认证令牌(token)。为了实现这一功能,可以创建一个请求拦截器,并且通过@ConfigurationPropert

过滤器(Filter)和拦截器(Interceptor)

在Web开发中,过滤器(Filter)和拦截器(Interceptor)都是重要的组件,它们都可以对HTTP请求进行预处理、后处理以及一些额外的操作。然而,它们之间在多个方面存在明显的区别 1. 运行位置 过滤器(Filter):运行在Web服务器和Servlet容器之间的组件,可以拦截所有进出该容器的请求和响应。过滤器是Servlet规范的一部分,不依赖于特定的框架。拦截器(Intercep

SpringCloud开发实战(六):Feign的最佳实践

目录 SpringCloud开发实战(一):搭建SpringCloud框架 SpringCloud开发实战(二):通过RestTemplate实现远程调用 SpringCloud开发实战(三):集成Eureka注册中心 SpringCloud开发实战(四):Feign远程调用 SpringCloud开发实战(五):Feign的一些优化建议 前言 所谓最佳实践,就是使用过程中总结的经验,最

Spring Cloud的Ribbon-Hystrix-Feign

Ribbon 作为负载均衡,在客户端实现,服务段可以启动两个端口不同但servername一样的服务 Hystrix作为熔断流量控制,在客户端实现,在方法上注解,当请求出错时可以调用注解中的方法返回 Feign 可以定义请求到其他服务的接口,用于微服务间的调用,不用自己再写http请求,在客户端实现,调用此接口就像远程调用其他服务一样,当请求出错时可以调用接口的实现类来返回 一、客户端负载均