实战!openFeign如何实现全链路JWT令牌信息不丢失?

软件工程毕业设计选题指南:50个实战项目与核心原则解析 软件工程的核心在于通过系统化的工程方法,将需求转化为稳定、可维护的软件产品。其原理涵盖从需求分析、系统设计到编码实现、测试部署的完整生命周期,强调架构设计、代码质量与团队协作。这一学科的技术价值在于能够高效、可靠地构建复杂系统,解决实际业务问题。在应用场景上,无论是开发高并发的电商系统、智能推荐算法,还是构建微服务架构或物联网平台,都离不开扎实的软件工程实践。本文聚焦于毕业设计这一具体场景,针对软件工程专业学生常见的选题迷茫,提供了涵盖Web全栈、人工智能、物联网等六大方向的50个精选实战题目,并深入剖析了 阅读详情

大家好,我是不才陈某~

这是《Spring Cloud 进阶》第20篇文章,往期文章如下:

今天这篇文章介绍一下JWT令牌如何在微服务链路中保证信息不丢失?官方称为令牌中继。

什么是令牌中继?

令牌中继通俗的讲则是让令牌在微服务链路调用中传递下去,保证各个微服务能够获取令牌中的用户信息。

以下订单的例子来说,如下图:

下单流程

客户端携带令牌请求网关,网关鉴权成功后会将令牌中的用户信息解析出来放在请求头中下发给订单服务,同样的,订单服务需要将用户信息传递给账户服务获取该用户的账户信息。

那么问题来了?如何保证网关服务->订单服务->账户服务这条链路中的用户信息传递下去是个痛点

解决方案

令牌在openFeign调用过程中是不能自动中继的,因此必须手动的将令牌信息传递下去。

注意:openFeign在开启熔断降级后内部调用开启了子线程,因此传统的方案直接在RequestInterceptor中设置是不可行的。

那么如何保证子线程也能获取请求头中的用户信息呢?

答案是:RequestContextHolder这个神器。

RequestContextHolder内部通过InheritableThreadLocal实现子线程共享信息。

在FeignCircuitBreakerInvocationHandler这个类中也是有如下一行代码:

RequestContextHolder.setRequestAttributes(requestAttributes);

正是使用RequestContextHolder将request的信息保存在其中,因此实现令牌中继只需要读取RequestContextHolder的信息即可。

详细代码如下:

/**
 * @author 公众号:码猿技术专栏
 * 用于实现令牌信息中继
 */
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        //从RequestContextHolder中获取HttpServletRequest
        HttpServletRequest httpServletRequest = RequestContextUtils.getRequest();
        //获取RequestContextHolder中的信息
        Map<String, String> headers = getHeaders(httpServletRequest);
        //放入feign的RequestTemplate中
        for (Map.Entry<String, String> entry : headers.entrySet()) {
            template.header(entry.getKey(), entry.getValue());
        }
    }

    /**
     * 获取原请求头
     */
    private Map<String, String> getHeaders(HttpServletRequest request) {
        Map<String, String> map = new LinkedHashMap<>();
        Enumeration<String> enumeration = request.getHeaderNames();
        if (enumeration != null) {
            while (enumeration.hasMoreElements()) {
                String key = enumeration.nextElement();
                String value = request.getHeader(key);
                map.put(key, value);
            }
        }
        return map;
    }
}

源码目录如下图:

【信息科学与工程学】计算机科学与自动化——第一百三十五篇 开发框架篇 系列二 Spring框架系列 02 Spring Cloud01 定义 HealthScore=∑wi​⋅indicatori​,其中 indicatori​ 为各组件健康度(0~1),wi​ 为权重。当 HealthScore<threshold 时返回 DOWN。②。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第一百三十五篇 开发框架篇 系列二 Spring框架系列 03 Spirng 01

编号机制/用法表现形式和配置编译器(底层实现·说明·缺陷·缺陷解决方案(含数学方程式描述与数学建模))引入版本国产化·信创·商用的CPU/GPU/ASIC/NP/DPU/其他硬件S1控制反转 (IoC)​ / 依赖注入 (DI)​- XML配置 () - Java注解 (, , ) - Java配置类 (, )底层实现: 反射 + 工厂模式 + 容器(Map)。 说明: 通过反射实例化Bean,解析依赖关系并注入。 缺陷: 运行时性能损耗(反射调用慢);循环依赖问题(构造器注入场景)

weixin_49199313的博客 378

微服务多模块:Springboot+Security+Redis+Gateway+OpenFeign+Nacos+JWT (附源码)仅需一招,520彻底拿捏你

基于微服务的Springboot+Security+Redis+Gateway+OpenFeign+Nacos+JWT。 对使用到的微服务技术进行在项目中的说明: Security:负责登录验证(文章中没有实现授权,在过滤器中直接返

white_mvlog的博客 4440

在VSCode中使用LaTex+(grammarly语法检测,chatgpt翻译,Sumatra PDF 轻量级pdf阅读器)

整个文章分为以下几个内容,打 * 的是必须要安装的。

u011895157的博客 2万+

Java - 微服务整合Shiro和JWT解决OpenFeign携带Token问题

一般情况下,我们微服务之间的服务调用可以通过OpenFeign来完成,但是它默认情况下,是不会把当前请求的相关请求头带过去的。解决,我们可以写一个拦截器。的情况下,服务调用就会出现这个问题。在发送请求之前都会调用该接口的。那这种情况下,在整合。

Zong_0915的博客 2158

GR00TN1.7国内本地下载+模型下在+hugingface无法连接,本地模型下载

GR00TN1.7

alsj123456的博客 97

告别糊涂账!用CKM3底表逻辑自建物料成本监控报表(含ABAP代码片段)

本文详细介绍了如何利用CKM3底表逻辑自建物料成本监控报表,解决标准报表无法穿透成本差异根源的问题。通过ABAP代码片段和四步架构法,帮助财务团队精准分析成本构成,优化成本核算批量处理,实现多维透视差异分析,提升成本监控效率。

weixin_30740295的博客 267

Feign之Jwt值传递

附:SpringCloud之系列教程汇总跳转地址 在微服务系统中,为了保证微服务系统的安全,常常使用jwt来鉴权,而jwt又往往存放在ThreadLocal中,可是服务内部的相互调用时,这样的做法在Feign开启了Hystrix的情况下,是有问题的。 首先我们先看下在Feign关闭Hystrix的情况下,是怎样的情况: feign.hystrix.enabled=false FeignI...

猎户星座 1050

基于Simulink和Control System Toolbox的线控转向(Steer-by-Wire)系统设计

通过上述步骤,我们成功设计并实现了基于 Simulink 和 Control System Toolbox 的线控转向(Steer-by-Wire)系统。该系统能够接收来自方向盘的角度指令,经过控制器处理后,驱动转向执行器(如电动机),实现对车辆前轮转向角度的精确控制。通过虚拟场景仿真、硬件在环测试和实车测试,验证了系统的响应速度、控制精度、车辆稳定性和实时性能,并通过参数优化进一步提升了系统的性能。

MHD0815的博客 549

Spring Cloud Feign如何实现JWT令牌中继以传递认证信息

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。一个人可以走的很快,但一群人才能走的更远。

2401_84024576的博客 1132

3、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)

硬件工程师笔试面试学习

XU157303764的博客 7624

SAP BTP Trial 生命周期全解析:90 天试用、30 天活跃规则、Kyma 有效期与向 Free Tier 的顺滑迁移

摘要: SAP BTP免费试用账号(trial)提供90天有效期,需每30天登录一次保持活跃状态。Kyma运行时有效期仅14天,需特别注意重建。到期后数据不可恢复,建议将关键配置脚本化并保存。若需长期使用,可迁移至无时间限制的免费层(free tier)。文章详细拆解了试用生命周期规则,包括续期、删除机制,并针对CAP开发、集成套件和Kyma等场景提供实操建议,帮助用户规避常见误区,高效利用试用资源。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 367

openFeign如何实现全链路JWT令牌信息不丢失?

什么是令牌中继? 令牌中继通俗的讲则是让令牌在微服务链路调用中传递下去,保证各个微服务能够获取令牌中的用户信息。 以下订单的例子来说,如下图: 下单流程 客户端携带令牌请求网关,网关鉴权成功后会将令牌中的用户信息解析出来放在请求头中下发给订单服务,同样的,订单服务需要将用户信息传递给账户服务获取该用户的账户信息。 那么问题来了?如何保证网关服务->订单服务->账户服务这条链路中的用户信息传递下去是个痛点 解决方案 令牌在openFeign调用过程中是不能自动中继的,因此必须手动

Pastxu的小屋 417

YOLOv8 超参数调优教程! 使用Ray Tune进行高效的超参数调优!

YOLOv8超参数调优教程!😎 使用Ray Tune进行高效的超参数调优!

Coding... 1万+

openFeign 异步 调用丢失上下文怎么破?

大家好,我是不才陈某~这是《Spring Cloud 进阶》第27篇文章,往期文章如下:五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强?openFeign夺命连环9问,这谁受得了?...

码猿技术专栏 1649

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

weixin_44119674的博客 440

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

微服务聚合API 文档,这样做真香!

大家好,我是不才陈某~这是《Spring Cloud 进阶》第22篇文章,往期文章如下:五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强?openFeign夺命连环9问,这谁受得了?阿里面试这样问:Nacos、Apollo、Config配置中心如何选型?这10个维度告诉你!阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你!阿里限流神器Sentinel夺命连环 17 问?对比7种分布...

码猿技术专栏 1150

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

互联网大厂Java面试故事:谢飞机的智慧物流微服务、消息队列与AI实战技术全流程

本故事以智慧物流场景为主线,涵盖微服务拆分、缓存、消息队列、AI路线优化、全链路追踪及运维上线等主流Java技术与业务实践。通过谢飞机的风趣答问,帮助初学者梳理大厂面试知识重点。

2401_88905706的博客 1446

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

互联网大厂Java面试纪实:谢飞机的内容社区微服务、缓存与AI场景全流程技术答疑

本故事以内容社区场景为主线,涵盖微服务拆分、缓存、消息队列、AI推荐、全链路监控及自动化上线等主流Java技术与业务实践。通过谢飞机的风趣答问,帮助初学者梳理大厂面试核心知识。

2401_88905706的博客 1638

Java高并发系统 + 安全监控 完整知识体系

本文系统梳理了Java高并发开发的全方位知识体系,涵盖单机并发基础、分布式架构、系统安全、监控体系和故障治理等核心模块。主要内容包括: 单机并发基础 CPU多级缓存与内存模型 JMM内存模型与happens-before原则 锁机制与CAS原子操作 并发容器与线程池原理 JVM调优与性能优化 分布式高并发架构 分布式锁与一致性算法 缓存体系与典型问题解决方案 消息队列的削峰填谷 负载均衡与分库分表 微服务通信与流量控制 生产级解决方案 高并发业务安全防护 全链路监控体系搭建 典型故障排查与治理 应急预案与性

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 575

spring cloud nacos feign服务调用携带jwtToken

之前都是用的springclou是eureka,现在使用nacos作为注册发现中心,同样feign调用的使用过程中踩过一些坑。 1.声明式调用 feign使用具体详见https://www.fangzhipeng.com/springcloud/2019/05/30/sc-nacos-discovery.html 2.服务之间接口调用有的需要token之类的校验 理论上只需要在调用方的请求的header中加入token就可以了,具体token获取还是生成需要调用方自己负责。举个例子:业务系统调用权限

K_Men的博客 1534

解决Token过期难题:Feign JWT认证全攻略

你是否还在为API调用中JWT(JSON Web Token,一种基于JSON的开放标准)过期导致的服务中断而烦恼?本文将详细介绍如何在Feign中实现JWT认证,包括Token的自动刷新与过期处理,让你的API调用更加稳定可靠。读完本文,你将掌握Feign拦截器的使用、Token管理策略以及异常处理等关键技能。 ## Feign与JWT认证概述 Feign是一个Java HTTP客户端绑定器...

gitblog_00185的博客 412

【spring 技术】基于springboot实现微服务之间FeignClient调用,免认证的功能

【spring 技术】基于springboot实现微服务之间FeignClient调用,免认证的功能,涉及OAuth2的拦截器OAuth2FeignRequestInterceptor 和AccessTokenContextRelay,即可实现内部feign调用免认证,也可以实现内部接口避免对外暴露

dylan的博客 4955
上一篇: Spring Cloud 全链路灰度发布 方案
下一篇: 掌握这30条超实用技巧,99%的服务器挖矿问题都能解决!
Java_2017_csdn
博客等级 码龄10年 329粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值