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

相关文章

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1

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