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

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;/*** 获取用户信息的工具类* 采用ThreadLocal存储用户的id信息* @author Administrator*/
        public class UserUtil {/*** ThreadLocal存储用户id信息*/private static ThreadLocal<Long> threadLocal=new ThreadLocal<>();/*** 获取当前用户的id* @return 返回long类型的用户id*/public static Long getCurrentUserId(){return threadLocal.get();}/*** 设置用户id的信息* @param userId 用户id*/public static void setCurrentUserId(Long userId){threadLocal.set(userId);}/*** 移除ThreadLocal中的当前线程存储的内容信息。请在使用完之后将其移除,避免存在内存泄漏*/public static void removeCurrentUserId(){threadLocal.remove();}}
        
    2. 在Filter中将session中用户的登录信息存入或者移除ThreadLocal中的信息

相关文章:

  • HashMap散列表的相关知识点
  • Python Flask: 构建轻量级、灵活的Web应用
  • 一键云端,AList 整合多网盘,轻松管理文件多元共享
  • jbase打印导出实现
  • TCP/IP详解卷一第三章“链路层”概要总结(未完编辑中)
  • 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
  • QQ五毛项目记
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • [acwing周赛复盘] 第 94 场周赛20230311
  • 解决:微软在登录时总是弹出需要家长或监护人同意才能使用该账户并且不断循环?
  • Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)
  • Spring 事务和事务传播机制
  • 2023年第九届数维杯国际大学生数学建模挑战赛
  • 一文图解爬虫_姊妹篇(spider)
  • 推介会如何做好媒体宣传
  • Google 是如何开发 Web 框架的
  • 5、React组件事件详解
  • co模块的前端实现
  • Elasticsearch 参考指南(升级前重新索引)
  • k8s如何管理Pod
  • Meteor的表单提交:Form
  • Odoo domain写法及运用
  • vue 配置sass、scss全局变量
  • 初识 beanstalkd
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 排序算法之--选择排序
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 学习笔记TF060:图像语音结合,看图说话
  • gunicorn工作原理
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​虚拟化系列介绍(十)
  • (2020)Java后端开发----(面试题和笔试题)
  • (26)4.7 字符函数和字符串函数
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (六)vue-router+UI组件库
  • (一)插入排序
  • (转)大道至简,职场上做人做事做管理
  • (转)德国人的记事本
  • .gitignore文件设置了忽略但不生效
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .Net Web窗口页属性
  • .NET 表达式计算:Expression Evaluator
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @Responsebody与@RequestBody
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [14]内置对象
  • [2023年]-hadoop面试真题(一)
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [AutoSar NVM] 存储架构
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]