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

【微服务】记录-登录信息传递过程

在这里插入图片描述
开发业务的时候,只需要在通过UserContext提供的getUser()方法就可以拿到用户id了
在这个拦截器中,获取到用户信息后保存到了UserContext中,这是一个基于ThreadLocal的工具,可以确保不同的请求之间互不干扰,避免线程安全问题发生:

public class UserContext {private static final ThreadLocal<Long> TL = new ThreadLocal<>();/*** 保存用户信息* @param userId 用户id*/public static void setUser(Long userId){TL.set(userId);}/*** 获取用户* @return 用户id*/public static Long getUser(){return TL.get();}/*** 移除用户信息*/public static void removeUser(){TL.remove();}
}

然后是微服务中的获取请求头中的用户信息的拦截器。由于这个拦截器在每个微服务中都需要,与其重复编写,不如抽取到一个模块中。

public class UserInfoInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.尝试获取头信息中的用户信息String authorization = request.getHeader(JwtConstants.USER_HEADER);// 2.判断是否为空if (authorization == null) {return true;}// 3.转为用户id并保存try {Long userId = Long.valueOf(authorization);UserContext.setUser(userId);return true;} catch (NumberFormatException e) {log.error("用户身份信息格式不正确,{}, 原因:{}", authorization, e.getMessage());return true;}}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 清理用户信息UserContext.removeUser();}
}
http://www.dtcms.com/a/266722.html

相关文章:

  • 【AI大模型】深入理解 Transformer 架构:自然语言处理的革命引擎
  • LangChain 全面入门
  • Java 大视界 -- Java 大数据实战:智能安防入侵检测的特征工程与模型融合全解析
  • 文本分词 nltk
  • 【Unity笔记01】基于单例模式的简单UI框架
  • PowerPoint 转 PDF 转换器:Python GUI 工具的深度解析
  • python高级变量XI
  • vue-39(为复杂 Vue 组件编写单元测试)
  • 行阶梯形矩阵和行最简形矩阵的区别
  • HTTP 缓存
  • suricata新增协议处理流程
  • Windows系统x86机器安装麒麟ARM系统(自用记录)
  • 批量印刷拼版助手Quite Imposing Plus:Adobe 专业PDF拼版插件
  • 2025微信小程序wxapkg解包全攻略
  • ESP32S3将摄像头映射到LCD屏
  • Android开发前的准备工作
  • ContextIQ 上线:助力 Copilot 深度洞察你的工作场景
  • vueX和Pinia的区别
  • JavaWeb笔记05
  • HarmonyOS-ArkUI 手势系列4--多层级手势
  • 鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)
  • [Linux]内核如何对信号进行捕捉
  • FastAPI 小白教程:从入门级到实战(源码教程)
  • springboot整合腾讯云cos对象存储,获取临时密钥,前端直传图片文件
  • Spring Cloud网关与CI文件配置请求安全性对比
  • 基于二维码的视频合集高效管理与分发技术
  • monorepo + Turborepo --- 运行任务
  • MySQL ON DUPLICATE KEY UPDATE 用法详解
  • 鸿蒙开发List长按Item拖拽切换效果
  • 基于区块链的物联网(IoT)安全通信与数据共享的典型实例