网关登录校验(3)-----如何在微服务之间传递用户信息

SpringCloud OpenFeign 服务调用传递 token 本篇文章简单介绍OpenFeign调用传递header,以及多线程环境下可能会出现的问题。其中涉及到的相关知识,如果有同学对不清楚的可以留言,后面出一篇的文章。httpshttpshttps。 阅读详情

OpenFeign传递用户

前端发起的请求都会经过网关再到微服务,由于我们之前编写的过滤器和拦截器功能,微服务可以轻松获取登录用户信息。

但有些业务是比较复杂的,请求到达微服务后还需要调用其它多个微服务。比如下单业务,流程如下:

下单的过程中,需要调用商品服务扣减库存,调用购物车服务清理用户购物车。而清理购物车时必须知道当前登录的用户身份。但是,订单服务调用购物车时并没有传递用户信息,购物车服务无法知道当前用户是谁!

由于微服务获取用户信息是通过拦截器在请求头中读取,因此要想实现微服务之间的用户信息传递,就必须在微服务发起调用时把用户信息存入请求头。

微服务之间调用是基于OpenFeign来实现的,并不是我们自己发送的请求。我们如何才能让每一个由OpenFeign发起的请求自动携带登录用户信息呢?

这里要借助Feign中提供的一个拦截器接口:feign.RequestInterceptor

public interface RequestInterceptor {

  /**
   * Called for every request. 
   * Add data using methods on the supplied {@link RequestTemplate}.
   */
  void apply(RequestTemplate template);
}

我们只需要实现这个接口,然后实现apply方法,利用RequestTemplate类来添加请求头,将用户信息保存到请求头中。这样以来,每次OpenFeign发起请求的时候都会调用该方法,传递用户信息。

由于FeignClient全部都是在hm-api模块,因此我们在hm-api模块的com.hmall.api.config.DefaultFeignConfig中编写这个拦截器:

@Bean
public RequestInterceptor userInfoRequestInterceptor(){
    return new RequestInterceptor() {
        @Override
        public void apply(RequestTemplate template) {
            // 获取登录用户
            Long userId = UserContext.getUser();
            if(userId == null) {
                // 如果为空则直接跳过
                return;
            }
            // 如果不为空则放入请求头中,传递给下游微服务
            template.header("user-info", userId.toString());
        }
    };
}

好了,现在微服务之间通过OpenFeign调用时也会传递登录用户信息了。 

 

 

【微服务】不同微服务之间用户信息的获取和传递方案 要在每个微服务中获取用户信息,可以采用以下几种方法:1.通过认证和授权:在用户登录时,进行身份认证并生成访问令牌(token)。将该令牌与用户相关的信息存储在安全的方式下,比如使用JWT(JSON Web Token)等。在每个微服务中,对请求进行校验,验证令牌的有效性,并解析出用户信息。2.使用网关或API管理工具:通过引入网关或API管理工具,所有请求都经过该组件进行路由和处理。在网关中,可以将用户信息添加到请求头部或者设置上下文变量,在微服务中可以方便地从请求中提取用户信息。至于在微服务之间。 阅读详情

相关推荐

微服务登录解决方案

一套基于JWT工具的微服务解决方案,从客户端请求-jwt处理-网关过滤器-微服务拦截器-OpenFeign拦截器,全套微服务的用户登录解决方案。

f135917h的博客 2279

Spring-Cloud-Openfeign如何传递用户信息?

Spring-Cloud-Openfeign如何传递用户信息?

若鱼的专栏 2748

SpringBoot+SpringCloud用户信息微服务传递实现解析

主要介绍了SpringBoot+SpringCloud实现登录用户信息在微服务之间的传递,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

实现微服务间调用传递用户信息

本文提供了如何解决微服务的用户登录鉴权问题

2302_79530937的博客 2034

matlab2021a版本条件下安装spm

SPM (Statistical Parametric Mapping),中文名叫统计参数映射。统计参数映射是指构建和评估空间扩展的统计过程,用于测试关于功能成像数据的假设。这些想法已经在名为SPM的免费开源软件中得到了实例化。SPM软件包用于脑成像数据序列分析。目前的版本可以分析fMRI, PET, SPECT, EEG和MEG。 可能由于matlab版本更新的问题,按照之前教程所写的安装方法会出现错误,踩了一些坑,但好在最终解决了。。。 1、下载链接,如下 SPM12 Software -...

qq_42356925的博客 8405

解密TMS320F28377D双核工程中的内存分配艺术:从CMD文件到实战优化

本文深入解析TMS320F28377D双核DSP的内存管理艺术,从CMD文件配置到实战优化技巧。详细介绍了SARAM、GSRAM等内存类型的特性与配置方法,提供双核协同、性能优化及高级调试的实用方案,帮助开发者提升系统实时性和稳定性。

weixin_29190651的博客 662

Spring Cloud Gateway(6)-OpenFeign传递用户

【代码】Spring Cloud Gateway-OpenFeign传递用户。

2301_78117253的博客 306

最新Linux CSI Tools安装教程(两台主机,一发一收)(监控模式)

无线感知之CSI Tools工具安装,最新在监控模式下采集CSI数据,

h1998040218的博客 3028

SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)

只要把上面两处打通,然后业务微服务在通过拦截器获取到用户信息,之后再将用户信息存在ThreadLocal中,这样我们就可以实现业务为服务中通过工具类获取当前用户信息的效果了。在业务微服务中通过工具类获取当前用户信息。

qq_42449963的博客 3610

麒麟OS(Kylin OS)操作系统minikube+docker安装使用及遇到的问题

一 ,安装minikube及操作工具kubectl 1,安装kubectl 使用以下命令下载最新版本: curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 要下载指定版本(例如v1.22.0版本) ,请键入: curl -LO https://dl.k8s.io/release/v1.22.0/bin/linux/amd..

qq_23396017的博客 2643

从官方例程到实战:AXI Memory Mapped To PCIe 核在FPGA-RC模式下的配置与调试全解析

本文详细解析了AXI Memory Mapped To PCIe核在FPGA-RC模式下的配置与调试方法。从IP核基础结构到实战参数设置,再到例程代码剖析和调试技巧,全面覆盖了AXI与PCIe协议转换的关键技术点,帮助开发者高效实现FPGA与PCIe设备的高速数据交互。

weixin_42550597的博客 266

微服务之网关、网关路由、网关登录校验

自定义GlobalFilter过滤器进行登录校验一般都选择自定义GlobalFilter过滤器自定义GagtewayFilter过滤器自定义GagtewayFilter过滤器比较麻烦,大多数情况都选择自定义GlobalFilter过滤器自定义GatewayFilter不是直接实现GatewayFilter,而是实现AbstractGatewayFilterFactory。@Component@Override@Override// 获取请求// 编写过滤器逻辑。

weixin_62818371的博客 1942

输入过欠压保护电路分析

输入过欠压保护电路仿真分析

HW-BASE的博客 6897

网关、路由、过滤、登录校验、用户信息传递

本文介绍了微服务架构中网关的重要作用及实现方式。通过创建网关服务hm-gateway,解决了前端访问多个微服务端口的难题。文章详细说明了网关配置步骤,包括引入依赖、创建启动类、配置路由规则等。重点阐述了两种网关过滤器的实现:GatewayFilter(路由过滤器)和GlobalFilter(全局过滤器),并提供了自定义过滤器的代码示例。特别介绍了如何实现登录校验功能,通过JWT进行身份验证,并将用户信息传递给下游微服务。最后,说明了如何在微服务间调用时通过Feign拦截器传递用户信息,解决了跨服务用户身份识

Le1Yu的博客 997

YOLOv11改进 | Mamba-YOLOv11-L:基于SSM的高效全局建模,精度与效率的双重突破

摘要: 本文提出Mamba-YOLOv11-L,通过集成状态空间模型(SSM)改进YOLOv11的全局建模能力。针对YOLOv11在复杂场景中全局依赖缺失、精度-效率矛盾等问题,SSM以$O(N)$计算复杂度实现长程语义捕捉。改进后的模型在工业缺陷检测(Recall↑12%)、边缘设备部署(内存↓16%)、多尺度目标检测(小目标mAP↑9%)等场景表现优异,推理速度保持>40 FPS。核心创新包括轻量化SSM模块设计(稀疏状态转移+局部上下文融合)及与YOLOv11骨干的深度集成,代码实现展示了SSM

走向CTO的路上... 566

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

266

网关路由校验、微服务之间传递信息

微服务学习笔记

练习生 850

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

微服务网关登录校验

微服务学习笔记

qq_43798150的博客 903

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

微服务:网关路由和登录校验

微服务:网关路由和登录校验

安晴晚风的博客 1872

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

openFeign,网关路由,网关路由的登录校验

openFeign,网关路由,网关路由的登录校验,使用openfeign进行远程调用,网关路由实现端口的转发,通过网关拦截器实现登录校验

2301_79748665的博客 1337

微服务项目如何实现登录校验

在单体架构的项目中,我们做登录校验的方式是让前端的请求携带登录令牌Token,后端定义一个拦截器来拦截前端的请求,并且解析令牌,如果解析生成则把用户信息保存到ThreadLocal中,如果令牌解析失败则返回未登录异常信息这里以JWT校验为例:解析JWT成功解析JWT失败前端请求携带JWT后端拦截器拦截请求保存用户信息到ThreadLocal返回未登录异常信息继续处理请求前端提示未登录 但是在微服务项目中,各个模块部署在不同的服务器上,而请求也不会直接到达后端接口,而是请求到达网关,网关再路由到不同的微服务模

Gaomengsuanjia_的博客 1498

微服务——网关登录校验(一)

无论是还是都支持自定义,只不过编码方式、使用方式略有差别。自定义不是直接实现,而是实现。@Component@Override@Override// 获取请求// 编写过滤器逻辑System.out.println("过滤器执行了");// 放行注意:该类的名称一定要以GetwayFilterFactory为后缀。spring:cloud:gateway:- PrintAny # 此处直接以自定义的GatewayFilterFactory类名称前缀类声明过滤器。

m0_74197695的博客 1463

网关登录校验(2)----网关如何将用户信息传递给微服务

考虑到微服务内部可能很多地方都需要用到登录用户信息,因此我们可以利用SpringMVC的拦截器来实现登录用户信息获取,并存入ThreadLocal,方便后续使用。之前我们无法获取登录用户,所以把购物车服务的登录用户写死了,现在需要恢复到原来的样子。不过,需要注意的是,这个配置类默认是不会生效的,因为它所在的包是。改造网关过滤器,在获取用户信息后保存到请求头,转发到下游微服务。,与其它微服务的扫描包不一致,无法被扫描到,因此无法生效。接下来,我们只需要编写拦截器,获取用户信息并保存到。中,并写好自动装配。

Very_a的博客 1250

MP+Docker+SpringCloud+MQ+ES——9 网关登录校验

网关登录校验。鉴权思路分析、网关过滤器、自定义过滤器、登录校验、微服务获取用户、OpenFeign传递用户。

念头通达 1056

SpringCloudGateway — 网关登录校验

单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,不再共享数据。也就意味着每个微服务都需要做登录校验,这显然不可取。 既然网关是所有微服务的入口,一切请求都需要先经过网关。我们完全可以把登录校验的工作放到网关去做。

cyt涛的博客 1166

微服务-网关登录校验

本文介绍了Spring Cloud Gateway中网关过滤器的实现机制与应用。过滤器分为GatewayFilter(路由过滤器)和GlobalFilter(全局过滤器),通过pre和post逻辑分别在请求路由前和微服务响应后执行。文章重点演示了如何自定义GlobalFilter实现登录校验功能,包括JWT令牌的解析、路径排除判断和用户信息传递。同时说明了微服务如何通过拦截器从请求头获取用户信息并存入ThreadLocal,以及如何通过Feign拦截器实现微服务间用户信息的传递。整套方案实现了从网关到微服务

2301_80152750的博客 800
上一篇: 网关登录校验(2)----网关如何将用户信息传递给微服务
下一篇: Nacos配置管理(1)----配置共享
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值