如何在微服务中获取的本命userId

在我们的微服务中, 用户查询本命信息, 过了网关再过API服务,过了API 还有 service服务,经历重重劫难,突然发现用户本命id没有了,如何能在如此错中复杂的服务中保持自我,传递userid呢

首先, 我们要知道,请求是如何运作的。

  1. Client 用户用浏览器 调用请求,或者swagger调用,用户把认证信息放在了请求头, 突破网关,来到了第一个 AAPI服务。网关在处理时,增加header 存放 userid

请注意此时强大的RequestContextHolder 中,保存着线程内的request信息,
在这里插入图片描述

此时请调用 LoginContext.getUser 方法获取你的本命userId;

  1. AAPI服务经过一系列蹂躏之后,准确后数据库找数据了,此时就准备给 Aservice服务发起请求,feign 此时出来了,做了第二道请求的服务发起者,根据你指定的service-name 和 url、参数,发起http请求
    但是此时,fegin并不知道你还有 userId 需要传递,当然你可以在接口上之地 @RequestHeader 添加 消息头 user,放入本命userid,
    但是这些操作多了,这么错乱的服务都觉得恶心了,那该怎么办呢
    Feign给我们提供了一个拦截器,统一处理restTemplate

在client 增加一个 configuration
在这里插入图片描述

在configuration的类中,增加一个如下代码

在这里插入图片描述

  1. 恭喜你,当你通过 feign调用 AService服务的时候,在Aservice中也可以通过 LoginContext.getUser 获取用户ID 了(前提是如果用户登录了,通过了网关之后)

经过了一系列的讲解, 你该怎么办呢

  1. 当你浏览器 被调用的服务 api ,需要获取用户id ,请添加 LoginContext.java (它在哪? 请到代码分支中去找吧,相信你总会找到!)
  2. 当你使用 FeignClient 去调用别的服务时候,同时你还希望你被调用的服务中也能优雅的获取到 userId, 请在你的FeignClient中增加 如上的 RequestInterceptor(当然,代码中有例子), 同时在你被调用的服务中增加 LoginContext.java,此时你将如此优雅的获取本命userid 了
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值