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

黑马点评学习笔记:短信登录流程、ThreadLocal 隔离与 Redis 共享 Session

短信登录1. 基于 Session 实现短信登录完整流程接口拦截器拦截到用户信息后保存到 ThreadLocal 中。因为ThreadLocal 它是一个线程域对象每一个进如 Tomcat 的请求都是一个独立的线程将来 ThreadLocal 就会在线程中开辟一个内存的空间去保存对应的用户这样一来每个用户互相不干扰。为什么要使用拦截器校验登录状态好处统一管理所有登录检查在一个地方完成代码复用不用在每个Controller方法里都写检查逻辑职责清晰业务代码只关心业务不关心权限检查易于维护修改登录规则只需改一处为什么要用 ThreadLocal 保存用户信息在Web服务器中的问题Tomcat服务器有线程池多个请求可能复用同一个线程如果用普通变量存储用户信息会发生数据混乱A用户的信息可能被B用户看到严重的安全问题注意使用 ThreadLocal 必须清理如果不清理线程被放回线程池后下一个请求可能会拿到上一个用户的信息造成严重的隐私泄露ThreadLocal 的真实存储结构服务器上有多个线程(处理多个用户请求): 线程1 (处理用户A的请求) └─ ThreadLocalMap (线程私有的) └─ key: ThreadLocal对象 └─ value: UserDTO(id1, nickName张三, iconxxx) 线程2 (处理用户B的请求) └─ ThreadLocalMap (线程私有的) └─ key: ThreadLocal对象 └─ value: UserDTO(id2, nickName李四, iconyyy) 线程3 (处理用户C的请求) └─ ThreadLocalMap (线程私有的) └─ key: ThreadLocal对象 └─ value: UserDTO(id3, nickName王五, iconzzz)关键点:每个线程都有自己的ThreadLocalMap- 不是共享一个大 MapThreadLocalMap 是 Thread 类的一个成员变量- 属于线程私有不同线程之间互不干扰 - 线程1拿不到线程2的数据使用UserDTO类隐藏敏感信息。2. 基于 Redis 实现共享 Session 登录session 共享问题多台 Tomcat 并不共享 session 存储的空间当请求切换到不同的 Tomcat 服务时导致数据丢失的问题。Session 的替代方案应该满足数据共享内存存储key、value 结构对于验证码存储的 key 选择以手机号为 key 存储验证码以手机号为 key 读取验证码对于保存用户的 key 选择以随机的 token 为 key 存储用户数据有两种选择第一使用 String 结构以 JSON 字符串来保存优点比较直观第二使用 Hash 结构将对象中的每个字段独立存储可以针对单个字段做 CRUD优点内存占用更少本项目的选择方案对于前端代码对 token 的保存和访问携带的实现代码随机 Token 不可预测、更安全、更灵活部分代码//TODO 这里的userDTO 里面的id 是Long类型存入Redis中需要转换为String类型 MapString, Object userMap BeanUtil.beanToMap(userDTO,new HashMap(), CopyOptions.create() .setIgnoreNullValue(true) //对于每个字段不管它原来是什么类型都给我转成字符串 .setFieldValueEditor((fieldName, fieldValue) - fieldValue.toString()));登录拦截器优化
http://www.gsyq.cn/news/1385807.html

相关文章:

  • 完整渗透测试用例表
  • Reqable替代Fiddler:移动端HTTPS抓包与证书配置全解
  • 磁吸扳手收纳架美国外观专利侵权预警,部分亚马逊热链遭投诉下架!
  • linux-安装Ubuntu的docker
  • 3步上手Highlighter:网页阅读者的免费记忆增强神器
  • 收藏 2026 版|一文吃透 Transformer 原理:从分词 Token 到逐字预测全过程
  • ARM PMU性能监控单元原理与优化实践
  • 2026公路波形护栏技术拆解与核心供应商参考:波形梁钢护栏板/省道波形护栏/路侧护栏板/道路波形护栏/镀锌波形护栏/选择指南 - 优质品牌商家
  • Veo 2胶片质感生成器失效?——深度解析Color Science v2.3内核中被屏蔽的Cinematic Grain Injection层
  • 从SaaS到自建CMS的选型复盘:一个专注网站开发的技术选型笔记
  • 大模型应用开发--2--AGENT问题
  • 如何判断工业冷水机组的冷量是否充足,避免被厂家参数虚标误导?-西谷制冷
  • 手把手调SerDes信号质量:从“翘眼皮”眼图到清晰波形的FFE配置实战
  • 照着用就行:2026 最新降AIGC软件测评与推荐
  • 贵阳婚礼西服定制攻略:面料、工艺、版型避坑指南
  • 别再为Velodyne发愁了:手把手教你用开源工具搞定禾赛/速腾雷达跑通LIO-SAM和FAST-LIO2
  • 单片机485实验
  • Users Chat AI全栈项目模块化开发实战解析
  • OPC中国与智能体来了
  • 基于CD4093与拍频效应的无MCU LED呼吸灯硬件实现
  • 【限时解密】Sora 2内部GIF编码协议曝光:如何用Python脚本强制启用LZW+Alpha通道(含GitHub私藏工具包)
  • macOS升级后鼠标侧键失灵?3步修复Mac Mouse Fix让你的鼠标功能满血复活
  • 2026年波形护栏供应商排行:防撞波形护栏/防撞波形梁护栏板/三波波形护栏/乡村公路波形护栏/公路护栏板/双波护栏板/选择指南 - 优质品牌商家
  • DeepSeek-R1推理延迟骤降41.8%?独家披露3类硬件感知调度策略(A100/H100/MI300X实测对比数据)
  • Anthropic 买下“接口工厂”:AI 的下一场战争,不在聊天框里
  • 企业知识库怎么搭建:2026年从需求分析到AI接入的完整路径 - 观域传媒
  • Taotoken Token Plan套餐如何帮助个人开发者控制学习成本
  • 5个关键步骤解决AMD Ryzen系统调试与优化问题
  • DeepSeek代码生成评测:GitHub Copilot vs CodeLlama vs DeepSeek-R1——在金融/嵌入式/高并发三大敏感场景中谁真正扛得住?
  • 收藏!2026 大模型入门指南|程序员 / 小白必学,抓住 AI 高薪风口