如何获得当前登录用户ID,如何传值到service,线程局部变量ThreadLocal解决

[复制链接]
admin 发表于 2025-9-13 18:09:15 | 显示全部楼层 |阅读模式
如何获得当前登录用户ID,如何传值到service,线程局部变量ThreadLocal解决

====================
// 获取当前线程ID
long threadId = Thread.currentThread().getId();
System.out.println("线程ID:" + threadId);

每次请求都是不一样的,单独的线程
==========================
1,创建工具类,如图所示
1.jpg

上个项目人员管理系统工具类代码也参考下:
2.jpg

  1. package com.jinhei.utils;

  2. public class CurrentHolder {

  3.     private static final ThreadLocal<Integer> CURRENT_LOCAL = new ThreadLocal<>();

  4.     public static void setCurrentId(Integer employeeId) {
  5.         CURRENT_LOCAL.set(employeeId);
  6.     }

  7.     public static Integer getCurrentId() {
  8.         return CURRENT_LOCAL.get();
  9.     }

  10.     public static void remove() {
  11.         CURRENT_LOCAL.remove();
  12.     }
  13. }
复制代码
2,jwt令牌校验的拦截器中,存储当前用户ID

  1. try {
  2.             log.info("jwt校验:{}", token);
  3.             Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);
  4.             Long empId = Long.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString());
  5.             log.info("当前员工id:", empId);
  6.             // 将当前登录用户的ID保存到当前线程的LocalThread中
  7.             BaseContext.setCurrentId(empId);
  8.             //3、通过,放行
  9.             return true;
  10.         } catch (Exception ex) {
  11.             //4、不通过,响应401状态码
  12.             response.setStatus(401);
  13.             return false;
  14.         }
复制代码
1.jpg

3,Service层使用
2.jpg

employee.setCreateUser(BaseContext.getCurrentId());


4,最后remove
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    // 请求处理完成后清理线程局部变量
BaseContext.removeCurrentId();
}

3.jpg

JWT令牌技术
https://www.zidiu.com/thread-45-1-1.html
网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
微信扫码

网站建设,公众号小程序开发,商城小程序,系统定制开发,App软件开发等

粤ICP备2024252464号

在本版发帖
微信扫码
QQ客服返回顶部
快速回复 返回顶部 返回列表