返回顶部
首页 > 资讯 > 后端开发 > Python >微服务如何通过feign.RequestInterceptor传递参数
  • 968
分享到

微服务如何通过feign.RequestInterceptor传递参数

2024-04-02 19:04:59 968人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录微服务通过feign.RequestInterceptor传递参数创建自定义请求拦截器具体获取逻辑如下feign的拦截器RequestInterceptor首先创建自定义的Req

微服务通过feign.RequestInterceptor传递参数

Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下:

创建自定义请求拦截器

在发送请求前增加了一个请求头信息,进行身份校验。

import feign.RequestInterceptor; 
import feign.RequestTemplate;      
public class MyRequestInterceptor implements RequestInterceptor{      
public void apply(RequestTemplatetemplate){ 
template.header("Authorization","123"); 
} 
}

服务端可以通过httpservletRequest获取到前面传递的参数

具体获取逻辑如下

RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
if (requestAttributes != null) {
     HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
     request.getHeader("Authorization");
 }

feign的拦截器RequestInterceptor

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

首先创建自定义的RequestInterceptor

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

@Slf4j
@Component
public class MyFeignInterceptor implements RequestInterceptor {
    @Override
    public 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 {
    @Autowired
    private 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: a
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : WEBsession: ECF4D97D02EEAFDDA3C15A7F1F050F61
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: aaaa, bbbb
  INFO 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_191
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: host, 39.108.15.147:8801
  INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController   : header: connection, keep-alive

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 微服务如何通过feign.RequestInterceptor传递参数

本文链接: https://lsjlt.com/news/141551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微服务如何通过feign.RequestInterceptor传递参数
    目录微服务通过feign.RequestInterceptor传递参数创建自定义请求拦截器具体获取逻辑如下feign的拦截器RequestInterceptor首先创建自定义的Req...
    99+
    2024-04-02
  • SpringCloud如何通过Feign传递List类型参数
    小编给大家分享一下SpringCloud如何通过Feign传递List类型参数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过Feign传递List类型参数首先...
    99+
    2023-06-29
  • php怎么通过url传递参数
    在PHP中,可以通过URL传递参数使用GET方法或POST方法。1. 通过GET方法传递参数:通过在URL中附加参数来传递参数,参数...
    99+
    2023-08-17
    php
  • SpringBoot如何通过Feign调用传递Header中参数
    目录【SpringBoot】通过Feign调用传递Header中参数如何通过Feign传递Header参数问题描述解决方案【SpringBoot】通过Feign调用传递Header中...
    99+
    2023-05-17
    SpringBoot Feign调用传递Header参数 SpringBoot Feign调用参数
  • vue如何通过$router.push传参数
    目录如何通过$router.push传参数this.$router.push传参及参数接收1、两种方式2、区别如何通过$router.push传参数 下面通过A页面向B页面传值来举个...
    99+
    2024-04-02
  • Ajax是通过什么给XMLHttpReq.onreadystatechange传递参数
    这篇文章主要介绍“Ajax是通过什么给XMLHttpReq.onreadystatechange传递参数”,在日常操作中,相信很多人在Ajax是通过什么给XMLHttpReq.onreadystatecha...
    99+
    2024-04-02
  • 怎么在Shell脚本中通过参数名传递参数
    这期内容当中小编将会给大家带来有关怎么在Shell脚本中通过参数名传递参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。#!/bin/bashwhile getopts i:o:p:s...
    99+
    2023-06-09
  • golang函数通过管道传递参数的详解
    在 go 中,可以将函数作为参数通过管道传递,实现步骤如下:定义接收函数的 goroutine。在调用端 goroutine 中,创建管道并向其发送函数。 Go 中通过管道传递函数参数...
    99+
    2024-05-05
    管道 参数传递 golang
  • SpringCloud通过Feign传递List类型参数方式
    目录通过Feign传递List类型参数1、单个List实体传递2、基本类型传递3、实体类型传递Feign在参数为List时的坑错误写法正确写法通过Feign传递List类型参数 首先...
    99+
    2024-04-02
  • vue中如何通过函数传参数
    目录vue通过函数传参数vue事件函数传参总结vue通过函数传参数 一,通过点击事件本身的js特性传参。 <view class="center_menu">      ...
    99+
    2023-05-14
    vue函数传参数 vue参数 函数传参数
  • Shell脚本通过参数名传递参数的实现代码
    平常在写shell脚本都是用$1,$2…这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护。linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采用参数名和参数值这样...
    99+
    2022-06-04
    Shell 参数名传递参数 Shell 传递参数
  • 微信小程序页面如何传递参数
    微信小程序页面传递参数的示例:示例1:在对应的wxml文件中添加以下代码:<block wx:for="{{postList}}" wx:for-item="item"&nb...
    99+
    2024-04-02
  • 如何通过C#引用传递
    这篇文章主要介绍“如何通过C#引用传递”,在日常操作中,相信很多人在如何通过C#引用传递问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何通过C#引用传递”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#...
    99+
    2023-06-17
  • php通过url传递参数的方法是什么
    PHP通过URL传递参数的方法有两种:1. 使用GET方法传递参数在URL后面添加参数,格式为`参数名1=值1&参数名2=值2&.....
    99+
    2023-08-09
    php
  • thinkphp如何传递GET参数
    这篇文章主要介绍“thinkphp如何传递GET参数”,在日常操作中,相信很多人在thinkphp如何传递GET参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”thinkphp如何传递GET参数”的疑惑有所...
    99+
    2023-07-05
  • 如何通过引用传递变量?
    问题内容 我编写这个类是为了测试: class PassByReference: def __init__(self): self.variable = 'Or...
    99+
    2024-02-09
    作用域
  • 如何通过CSS向JS传参
    这篇文章主要介绍了如何通过CSS向JS传参,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、需要通过CSS传参的背景CSS中有很多媒体查询的用法,例如设备尺寸判别,是否支持鼠...
    99+
    2023-06-08
  • java中通过行为参数化传递代码方案
    目录方案一方案二方案三方案四方案五方案六总结:行为参数化:它意味着拿出一个代码块,把它准备好但是不执行,可以推迟该代码块的执行,比如将代码块作为参数,需要的时候再内部执行。下面我来通...
    99+
    2024-04-02
  • Vue通过路由实现页面间参数的传递
    目录在Vue项目开发中,页面之间传递参数有很多种方法1.路由传递2.sessionStorage/localStorage缓存的形式进行传递3.父子组件之间的传值 4.使用...
    99+
    2023-05-17
    vue路由实现页面参数传递 vue页面参数传递 vue路由参数传递
  • 微信小程序如何向父页面传递参数
    在微信小程序中利用小程序盏队功能向父页面传递参数,实现代码如下:let pagetotal = getCurrentPages(),//获取盏队thispage = pagetotal[pagetotal.length - 1],//子页面...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作