SpringCloud -Token传递之Feign

news2024/12/26 11:08:39

目录

方法一 @RequestHeader

方法二 使用Feign的Interceptor

步骤一 实现RequestInterceptor接口

步骤二:配置Feign


通常微服务对于用户认证信息解析有两种方案

  • 在 gateway 就解析用户的 token 然后路由的时候把 userId 等相关信息添加到 header 中传递下去。
  • 在 gateway 直接把 token 传递下去,每个子微服务自己在过滤器解析 token

现在有一个从 A 服务调用 B 服务接口的内部调用业务场景,无论是哪种方案我们都需把 header 从 A 服务传递到 B 服务。

方法一 @RequestHeader


在请求调用方的微服务方法头中添加@RequestHeader用来接收用户端请求时传入的token

@RequestMapping("/deleteByOpenId")
public Object deleteByOpenId(@RequestParam("opendId") String opendId, @RequestHeader("token") String token) {
    Object integer = appMpLoginAuthFeginClient.deleteByOpenId(opendId, token);
    return integer;
}


这里获取到header中的“token”在采用Feign调用其他微服务时将获取到的Token传入到下一个微服务的请求头中

@RequestMapping("/rest/user-service/in/mpLoginAuth/deleteByOpenId")
Object deleteByOpenId(@RequestParam("opendId") String opendId, @RequestHeader("token") String token);


这里的@RequestHeader的意思是将参数token放入到下个请求的请求头header中。


方法二 使用Feign的Interceptor


步骤一 实现RequestInterceptor接口


重写RequestInterceptor接口的apply,获取到token

public class TokenRequestIntecepor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes srat = (ServletRequestAttributes) requestAttributes;
        HttpServletRequest request = srat.getRequest();
        String token = request.getHeader("token");
        if (StringUtils.isNotBlank(token)) {
            //将token传递出去 requestTemplate.header("token", token); } } }
        }
    }
}

  1. 先获取到HTTPServletRequest
  2. 接着在从request中获取到header的“token”
  3. 将这个token传递给requestTemplate
  4. Interceptor实现之后还需要对这个Interceptor设置配置


步骤二:配置Feign


application.yaml文件中添加如下配置

feign:
  client:
    config:
    default:
      loggerLevel: full
      requestInterceptors: com.example.feigndemo.interceptor.TokenRequestIntecepor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

观测云助力跨境电商大幅提高加载性能

话不多说,先上结果 什么是用户体验 用户体验基本包含访问网站的性能、可用性和正确性。通俗的讲,就是一把通过用户访问测量【设计者】意图的尺子。 用户体验的基本价值 如果正确实施了终端用户体验,可以第一时间发现,确认影响了…

腾讯云服务器新用户优惠有哪些?腾讯云服务器新人优惠整理汇总

你们是否曾经幻想过拥有一台属于自己的服务器,却因为价格而望而却步呢?今天,我要告诉你一个好消息——腾讯云服务器现在针对新用户推出了一系列的优惠政策,让你可以用超低的价格购买到性能强大的服务器! 首先&#xf…

后端老项目迁移方法

老项目迁移方法 需求: 因某个模块MySQL表结构、表关系 错乱复杂,而且其他模块的代码也在操作这个模块的数据库 耦合严重 导致Web工程代码紊乱、不易理解、性能低下, 故在 系统由A JavaWeb工程迁移至B工程 时,重构MySQL表结构、表…

LaTeX 数学公式常见问题及解决方案

本文汇总了博主在使用 LaTeX 写文档过程中遇到的所有数学公式常见问题及对应的 LaTeX 解决方案 持续更新... 目录 1. 连等式2. 公式重新开始编号2.1 图片/表格重新编号 1. 连等式 在数学公式推导过程中常常会遇到如 Figure 1 所示的连等式,一般需要保证等号或者不等…

Halcon (0):C# 联合Halcon方式简介和就业市场说明

文章目录 文章专栏前言相关视频联合C#开发直接导出C#代码Halcon引擎调用开发函数封装库工程导出 总结就业市场 文章专栏 Halcon开发 前言 根据我的测试,我发现Halcon和WPF中的halcon插件,代码具有对应性。就是你会了Halcon,WPF也差不多久会了…

带您识别RJ45网口连接器/网口插座口的LED灯的平脚/斜脚,带弹/不带弹细节区分

Hqst华强盛(盈盛电子)导读:网口连接器,网口插座,也叫网口母座,因为产品规格众多,常常因为细小差别,耽误工程设计级或者生产排期延误,今天就带大家一起来认识下平脚RJ45网口连接器/网口插座与斜脚…

基于深度学习的单帧图像超分辨率重建综述

论文标题:基于深度学习的单帧图像超分辨率重建综述作者: 吴 靖,叶晓晶,黄 峰,陈丽琼,王志锋,刘文犀发表日期:2022 年9 月阅读日期 :2023.11.18研究背景: 图像…

剑指JUC原理-20.并发编程实践

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

CTF-PWN-tips

文章目录 overflowscanfgetreadstrcpystrcat Find string in gdbgdbgdb peda Binary ServiceFind specific function offset in libc手工自动 Find /bin/sh or sh in library手动自动 Leak stack addressFork problem in gdbSecret of a mysterious section - .tlsPredictable …

【Python数学练习1】

一、题目 中文描述&#xff1a; 给出正整数N&#xff0c;输出满足条件的数对(a,b)的个数&#xff0c;满足gcd(a,b)b, a,b < n 数学描述&#xff1a; 二、解法 解法1&#xff1a; 对应Python代码&#xff1a; def num_fact(n):num 0for i in range(1, n 1):if n % i …

Python程序打包指南:手把手教你一步步完成

最近感兴趣想将开发的项目转成Package&#xff0c;研究了一下相关文章&#xff0c;并且自己跑通了&#xff0c;走了一下弯路&#xff0c;这里记录一下如何打包一个简单的Python项目&#xff0c;展示如何添加必要的文件和结构来创建包&#xff0c;如何构建包&#xff0c;以及如何…

视频剪辑技巧:简单步骤,批量剪辑并随机分割视频

随着社交媒体平台的广泛普及和视频制作需求的急剧增加&#xff0c;视频剪辑已经成为了当今社会一项不可或缺的技能。然而&#xff0c;对于许多初学者来说&#xff0c;视频剪辑可能是一项令人望而生畏的复杂任务。可能会面临各种困难&#xff0c;如如何选择合适的软件和硬件、如…

栈和队列的初始化,插入,删除,销毁。

目录 题外话 顺序表和链表优缺点以及特点 一.栈的特点 二. 栈的操作 2.1初始化 2.2 栈的销毁 2.3 栈的插入 2.3 输出top 2.4 栈的删除 2.5 输出栈 题外话 顺序表和链表优缺点以及特点 特点&#xff1a;顺序表&#xff0c;逻辑地址物理地址。可以任意访问&#xff0c…

systemverilog:interface中端口方向、Clocking block的理解

1、interface中端口方向的理解 &#xff08;1&#xff09;从testbench的角度看&#xff0c;tb中信号的输入输出方向与interface中信号输入输出方向一致&#xff1a; &#xff08;2&#xff09;从DUT角度看&#xff0c;DUT中信号输入输出方向与interface中信号输入输出方向相反…

数据库的分库分表 详解

前言 一个系统随着用户量上升&#xff0c;产生的数据也越来越多&#xff0c;到达一定程度&#xff0c;数据库就会产生瓶颈。 首先单机数据库所能承载的连接数&#xff0c;io和吞吐量都是有限的&#xff0c;并发量上来数据库就渐渐顶不住了。 如果单表的数据量过大&#xff0…

腾讯云新用户优惠活动有哪些可以参加?腾讯云新人服务器优惠活动

腾讯云作为国内领先的云服务提供商&#xff0c;不仅为用户提供稳定可靠的云服务器&#xff0c;还为新用户带来了一系列的优惠活动和代金券&#xff0c;以降低购买成本&#xff0c;提高业务效益。在这里&#xff0c;我们将为您详细介绍腾讯云服务器的新人优惠活动及代金券&#…

JavaEE——简单认识HTML

文章目录 一、简单解释 HTML二、认识 HTML 的结构三、了解HTML中的相关标签1.注释标签2.标题标签3.段落标签 p4. 换行标签 br5.格式化标签6.图片标签解释 src解释 alt解释其他有关 img 标签的属性 7.超链接标签 a8.表格标签9.列表标签10.input 标签11. select 下拉菜单以及 div…

Flink1.17 DataStream API

目录 一.执行环境&#xff08;Execution Environment&#xff09; 1.1 创建执行环境 1.2 执行模式 1.3 触发程序执行 二.源算子&#xff08;Source&#xff09; 2.1 从集合中读取数据 2.2 从文件读取数据 2.3 从 RabbitMQ 中读取数据 2.4 从数据生成器读取数据 2.5 …

Vue3 toRef函数和toRefs函数

当我们在setup 中的以读取对象属性单独交出去时&#xff0c;我们会发现这样会丢失响应式&#xff1a; setup() {let person reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})return {name: person.name,age: person.age,type: person.jo…

​软考-高级-系统架构设计师教程(清华第2版)【第17章 通信系统架构设计理论与实践(P614~646)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第17章 通信系统架构设计理论与实践&#xff08;P614~646&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图