当前位置: 首页 > news >正文

SpringBoot 微服务中怎么获取用户信息 token

SpringBoot 微服务中怎么获取用户信息 token

当我们写了一个A接口,这个接口需要调用B接口,但是B接口需要包含请求头内容,比如需要用户信息、用户id等内容,由于不在同一个线程中,使用ThreadLocal去获取数据是无法获取的,这个时候需要手动将信息放置请求头中。

前置知识

获取请求头方式

return BaseContext.getUserId();是我随便写的不要在意!!!

第一种 ServletRequestAttributes

通过ServletRequestAttributes获取请求。

@GetMapping("/token")
public Long getToken() {ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();String token = request.getHeader("token");return BaseContext.getUserId();
}

第二种 HttpServletRequest

@GetMapping("/token")
public Long getToken(HttpServletRequest request) {String token = request.getHeader("token");return BaseContext.getUserId();
}

第二种 通过注解

@GetMapping("/token")
public Long getToken(@RequestHeader("token") String token) {return BaseContext.getUserId();
}

操作步骤

准备好两个接口还有一个OpenFeign。

OpenFeign

@FeignClient(value = "service-admin",contextId = "IndexFeignClient", path = "")
public interface IndexFeignClient {@GetMapping("/token")Long getToken();
}

被调用接口B

@GetMapping("/token")
public Long getToken() {ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();String token = request.getHeader("token");return BaseContext.getUserId();
}

调用接口A

@GetMapping("abc")
public String index() {Long id = indexFeignClient.getToken();return "欢迎访问。。。";
}

这个时候正常去调用这个接口是无法获取到token相关信息的。

可以看到是null,因为没有将请求头传递过来。

在这里插入图片描述

传递请求头

我使用的是JWT方式,这种可以存储一些信息。使用的是注解方式存入请求头。

重写以实现对Feign请求的拦截和处理,首先通过RequestContextHolder.getRequestAttributes()方法获取ServletRequestAttributes对象,这个对象封装了当前请求的相关信息。然后将ServletRequestAttributes对象转换为ServletRequestAttributes类型,并确保它不为空。

使用requestTemplate.header("token", token)方法将获取到的token值作为请求的header添加到Feign请求模板中。这样,在发起Feign请求时,会自动将token作为请求头一并发送给目标服务。

创建UserTokenFeignInterceptor

import feign.RequestInterceptor;
import feign.RequestTemplate;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;public class UserTokenFeignInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();assert requestAttributes != null;HttpServletRequest request = requestAttributes.getRequest();String token = request.getHeader("token");requestTemplate.header("token", token);}
}

使用注解

使用@Import将之前的UserTokenFeignInterceptor引入。

import cn.bunny.common.utils.feign.UserTokenFeignInterceptor;
import org.springframework.context.annotation.Import;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
@Import(value = UserTokenFeignInterceptor.class)
public @interface EnableUserTokenFeignInterceptor {}

最后在接口启动类上加上这个注解,也就是在接口A的启动类上这个注解。不要加错了!!!

是接口A的启动类!!!

是接口A的启动类!!!

是接口A的启动类!!!

@EnableFeignClients(basePackages = {"cn.bunny.feign.admin"})
@SpringBootApplication
@Slf4j
@EnableUserTokenFeignInterceptor
public class ServiceWebApplication {public static void main(String[] args) {log.info("ServiceApplication启动...");SpringApplication.run(ServiceWebApplication.class, args);}
}

之后就可以看到传递成功的token

在这里插入图片描述

相关文章:

SpringBoot 微服务中怎么获取用户信息 token

SpringBoot 微服务中怎么获取用户信息 token 当我们写了一个A接口,这个接口需要调用B接口,但是B接口需要包含请求头内容,比如需要用户信息、用户id等内容,由于不在同一个线程中,使用ThreadLocal去获取数据是无法获取的…...

npm包-fflate

fflate 是一个快速、轻量级且纯JavaScript实现的压缩库,用于处理gzip、zlib和Deflate格式的数据压缩与解压缩。它专注于提供高性能的压缩算法实现,特别适合于浏览器环境及Node.js环境中使用,且不依赖任何外部库。fflate的优势在于其极小的体积…...

华为WLAN无线组网技术与解决方案

WLAN无线组网技术与解决方案 网络拓扑采用AP和AC旁挂式无线组网 配置思路: 1.让AP上线 1.1,使得AP能够获得IP地址 配置步骤: 1.把AC当作一个一个有管理功能的三层交换机 sys Enter system view, return user view with CtrlZ. [AC6605]vlan …...

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱

课程下载:https://download.csdn.net/download/m0_66047725/89360471 更多资源下载:关注我。 课程内容: 10-9、怎么寻找优质的货源店铺.mp4 11-10、怎么去选择商品图片.mp4 12-11、商品图片的注意避免事项.mp4 13-12、怎么写标题.mp4 …...

Yann LeCun 和 Elon Musk 就 AI 监管激烈交锋

🦉 AI新闻 🚀 Yann LeCun 和 Elon Musk 就 AI 监管激烈交锋 摘要:昨天,Yann LeCun 和Elon Musk 在社交媒体就人工智能的安全性和监管问题展开激烈辩论。LeCun 认为目前对 AI 的担忧和监管为时过早,主张开放和共享。而…...

C++重点基础知识汇总大全

文章目录 一些基础知识点指针和引用 一些基础知识点 1、十进制的数字比较长的时候&#xff0c;可以加方便阅读到底是几位&#xff0c;输出的时候跟不加是一样的效果 // 十进制可以加 cout << 13890324 << endl; // 13890324 // 二进制前加0b cout << 0b111…...

【Linux】线程安全及锁的使用

文章目录 前言一、锁1.定义一个锁变量2.pthread_mutex_init3.pthread_mutex_destroy4.pthread_mutex_lock/pthread_mutex_unlock5.静态变量锁和全局变量锁的初始化 二、问题描述及锁的运用三、RAII风格的锁 前言 临界资源: 在多个线程或进程间共享的资源. 临界区: 代码中访问临…...

深入解析绘图范式:面向对象与直接操作的较量

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 第一节&#xff1a;面向对象绘图的魅力 第二节&#xff1a;直接操作绘图模块的便捷性 第三…...

英特尔LLM技术挑战记录

英特尔技术介绍&#xff1a; Flash Attention Flash Attention 是一种高效的注意力机制实现&#xff0c;旨在优化大规模 Transformer 模型中的自注意力计算。在深度学习和自然语言处理领域&#xff0c;自注意力是 Transformer 架构的核心组件&#xff0c;用于模型中不同输入元…...

在 MFC 中 UNICODE 加 _T 与 L 长字符串,有什么区别?

在MFC&#xff08;Microsoft Foundation Classes&#xff09;和更广泛的Windows编程环境中&#xff0c;UNICODE宏用于指示程序应使用Unicode字符集&#xff08;通常是UTF-16&#xff09;来处理文本。当定义了UNICODE宏时&#xff0c;编译器和库函数会期待和处理宽字符&#xff…...

synopsys EDA 2016 合集 下载

包含如下安装包&#xff0c;如需安装服务也可联系我 FineSim_vL_2016.03 Laker201612 Library Compiler M-2016.12 Update Training PrimeTime M-2016.12 Update Training StarRC M-2016.12 Update Training SynopsysInstaller_v3.3 TSMC-65nm(OA) fm_vL-2016.03-SP1 fpga_vL-…...

CentOS 7如何使用systemctl管理应用

说明&#xff1a;本文介绍如何使用systemctl命令的方式来启动、查看、停止和重启应用&#xff0c;以安装后的prometheus、alertmanager为例&#xff1b; Step1&#xff1a;创建文件 在系统/etc/systemd/system/路径下&#xff0c;创建一个xxx.service文件&#xff0c;该文件内…...

武大深度学习期末复习-常见神经网络概念

深度学习经典神经网络概念、优缺点及应用场景 文章目录 一、多层感知机&#xff08;MLP&#xff09;1.1 结构和原理1.2 优缺点1.3 应用场景 二、卷积神经网络&#xff08;CNN&#xff09;2.1 结构和原理2.2 优缺点2.3 应用场景 三、循环神经网络&#xff08;RNN&#xff09;3.1…...

Leetcode3161. 物块放置查询(Go语言的红黑树 + 线段树)

题目截图 题目分析 每次1操作将会分裂成两块区间长度&#xff0c;以最近右端点记录左侧区间的长度即可 因此涉及到单点更新和区间查询 然后左右侧最近端点则使用redBlackTree&#xff0c;也就是python中的sortedlist ac code type seg []int// 把 i 处的值改成 val func (t …...

基于springboot实现医疗挂号管理系统项目【项目源码+论文说明】

基于springboot实现医疗挂号管理系统演示 摘要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&…...

ScrumMaster认证机构及CSM、PSM、RSM价值比较

企业现有的经营管理模式和传统的瀑布式交付模式&#xff0c;已经不能适应快速变化的市场响应和客户需求&#xff0c;现代的敏捷工作方式在过去数年涌现&#xff0c;比如Scrum&#xff0c;XP&#xff0c;看板&#xff0c;DevOps等敏捷方法&#xff0c;近十年Scrum在国内企业中备…...

加氢站压缩液驱比例泵放大器

加氢站压缩液驱液压系统的要求是实现换向和速度控制&#xff0c;对液压动力机构而言&#xff0c;按原理可区分为开式&#xff08;阀控&#xff09;- 节流控制系统和闭式&#xff08;泵控&#xff09;- 容积控制系统&#xff1a; 阀控系统 – 节流调速系统&#xff1a;由BEUEC比…...

MyBatis系统学习篇 - MyBatis逆向工程

MyBatis的逆向工程是指根据数据库表结构自动生成对应的Java实体类、Mapper接口和XML映射文件的过程。逆向工程可以帮助开发人员快速生成与数据库表对应的代码&#xff0c;减少手动编写重复代码的工作量。 我们在MyBatis中通过逆向工具来帮我简化繁琐的搭建框架&#xff0c;减少…...

SpringCloud的Config配置中心,为什么要分Server服务端和Client客户端?

SpringCloud的Config配置中心&#xff0c;为什么要分Server服务端和Client客户端&#xff1f; 在SpringCloud的Config配置中心中分了Server服务端和Client客户端&#xff0c;为什么需要这样分呢&#xff1f;它的思想是所有微服务的配置文件都放到git远程服务器上&#xff0c;让…...

「数据结构」队列

目录 队列的基本概念 队列的实现 头文件queue.h 实现函数接口 1.初始化和销毁 2.出队列和入队列 3.获取队头元素和队尾元素 4.队列长度判空 后记 前言 欢迎大家来到小鸥的博客~ 个人主页&#xff1a;海盗猫鸥 本篇专题&#xff1a;数据结构 多谢大家的支持啦&#xff…...

香农信息熵的5个常见误区:你以为的熵可能不是真正的熵

香农信息熵的5个常见误区&#xff1a;你以为的熵可能不是真正的熵 在机器学习与数据科学领域&#xff0c;香农信息熵&#xff08;Shannon Entropy&#xff09;常被视为衡量数据不确定性的黄金标准。但有趣的是&#xff0c;许多从业者在使用这一概念时&#xff0c;往往陷入一些…...

基于DAMOYOLO-S与计算机网络技术:构建分布式视频分析集群

基于DAMOYOLO-S与计算机网络技术&#xff1a;构建分布式视频分析集群 想象一下&#xff0c;一个大型物流园区&#xff0c;上百个摄像头日夜不停地运转&#xff0c;管理者需要实时知道&#xff1a;哪条通道拥堵了&#xff1f;哪个区域有异常人员闯入&#xff1f;传统的监控方式…...

Qwen3.5-4B-Claude-Opus零基础上手:Web交互页面功能详解与最佳实践

Qwen3.5-4B-Claude-Opus零基础上手&#xff1a;Web交互页面功能详解与最佳实践 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。…...

终极指南:5分钟上手BepInEx,打造你的Unity游戏插件帝国 [特殊字符]

终极指南&#xff1a;5分钟上手BepInEx&#xff0c;打造你的Unity游戏插件帝国 &#x1f680; 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款专为Unity游戏设计的强…...

CosyVoice3在CSDN星图一键部署:开箱即用,无需复杂配置

CosyVoice3在CSDN星图一键部署&#xff1a;开箱即用&#xff0c;无需复杂配置 1. 引言&#xff1a;语音克隆技术的新选择 你是否曾经想过&#xff0c;只需几秒钟的录音就能让AI完美复刻你的声音&#xff1f;或者为你的视频内容添加多种方言配音&#xff1f;CosyVoice3作为阿里…...

别再只盯着Loss曲线了!TensorBoard的SCALARS面板还有这些隐藏玩法(附GAN训练实战)

解锁TensorBoard SCALARS面板的隐藏战力&#xff1a;从GAN训练曲线中洞察模型灵魂 当你盯着GAN训练中那对纠缠不清的生成器和判别器Loss曲线时&#xff0c;是否感觉像在解读一部悬疑小说&#xff1f;TensorBoard的SCALARS面板远比大多数开发者想象的强大——它不仅是数据的展示…...

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络(SNN)手写数字识别Demo

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络&#xff08;SNN&#xff09;手写数字识别Demo 脉冲神经网络&#xff08;SNN&#xff09;作为第三代神经网络模型&#xff0c;正逐渐从学术研究走向工业应用。与传统人工神经网络不同&#xff0c;SNN通过模拟生物神经元的脉冲发…...

EcomGPT-7B模型蒸馏实践:训练更轻量的小模型服务于高并发场景

EcomGPT-7B模型蒸馏实践&#xff1a;训练更轻量的小模型服务于高并发场景 你是不是也遇到过这样的烦恼&#xff1f;手里有一个像EcomGPT-7B这样的大模型&#xff0c;它在电商场景下回答问题、生成文案的效果确实不错&#xff0c;但一到像“双十一”这样的大促节点&#xff0c;…...

雪女-斗罗大陆-造相Z-Turbo系统管理:Ubuntu服务器运维与模型服务监控

雪女-斗罗大陆-造相Z-Turbo系统管理&#xff1a;Ubuntu服务器运维与模型服务监控 想让你的“雪女”模型在Ubuntu服务器上像真正的封号斗罗一样&#xff0c;拥有稳定、可靠、持久的战斗力吗&#xff1f;对于任何投入生产环境的AI服务来说&#xff0c;部署成功只是第一步&#x…...

从YOLO到DeepLab:盘点CV任务中那些‘神级’特征融合技巧与避坑指南

从YOLO到DeepLab&#xff1a;盘点CV任务中那些‘神级’特征融合技巧与避坑指南 在计算机视觉领域&#xff0c;特征融合技术就像一位隐形的调音师&#xff0c;默默协调着神经网络中不同层次、不同来源的信息流。当你在目标检测任务中遇到小目标识别率低的问题&#xff0c;或在图…...