• Filter和ThreadLocal结合存储用户id信息


    1. ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
    2. ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。
    3. ThreadLocal在使用过程中,若使用完之后,建议在finally中调用remove()方法,手动释放对key和value的引用,避免产生内存泄漏问题。
    4. 在过滤器Filter的filterChain.doFilter(request, response)执行之前进行用户id信息的设置,在filterChain.doFilter(request, response)执行之后进行ThreadLocal的remove方法的操作。
      1. 建立ThreadLocal的操作userId的用户信息类
          1. package com.app.studypro.utils;
          2. /**
          3. * 获取用户信息的工具类
          4. * 采用ThreadLocal存储用户的id信息
          5. * @author Administrator
          6. */
          7. public class UserUtil {
          8. /**
          9. * ThreadLocal存储用户id信息
          10. */
          11. private static ThreadLocal threadLocal=new ThreadLocal<>();
          12. /**
          13. * 获取当前用户的id
          14. * @return 返回long类型的用户id
          15. */
          16. public static Long getCurrentUserId(){
          17. return threadLocal.get();
          18. }
          19. /**
          20. * 设置用户id的信息
          21. * @param userId 用户id
          22. */
          23. public static void setCurrentUserId(Long userId){
          24. threadLocal.set(userId);
          25. }
          26. /**
          27. * 移除ThreadLocal中的当前线程存储的内容信息。请在使用完之后将其移除,避免存在内存泄漏
          28. */
          29. public static void removeCurrentUserId(){
          30. threadLocal.remove();
          31. }
          32. }
      2. 在Filter中将session中用户的登录信息存入或者移除ThreadLocal中的信息
  • 相关阅读:
    MybatisPlus 快速开发
    【已解决】MySQL:执行sql查询出错误数据(MySQL隐藏机制-类型转换导致)
    招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计
    FasterViT:基于分层注意力的快速视觉transformer
    2022.6.28
    npm run build小技巧
    flutter系列之:用来管理复杂状态的State详解
    c语言免杀火绒
    JavaScript基础
    JavaScript-修炼之路第六层
  • 原文地址:https://blog.csdn.net/weixin_41926152/article/details/134484401