• 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中的信息
  • 相关阅读:
    C语言实现扫雷游戏(分解代码,超级详细,无压力)
    【JavaSE】认识异常(下篇)
    李白的苏台览古译文赏析
    图计算 on nLive:Nebula 的图计算实践
    springboot+vue项目部署配置开机自启动
    【数据结构】快速排序
    MySQL总结(DQL)
    九、(正点原子)Linux定时器
    k8s使用MetalLB作爲LoadBalancer:介紹、安裝及簡單使用
    Linux-v10.0 笔记(一)
  • 原文地址:https://blog.csdn.net/weixin_41926152/article/details/134484401