首页 > 其他分享 >如何获取当前登录用户的各种信息(如id等)

如何获取当前登录用户的各种信息(如id等)

时间:2023-11-14 11:24:07浏览次数:31  
标签:登录 Token JWT 用户 获取 ThreadLocal 线程 id

场景:

一个后台管理系统,当前登录用户(user1)在修改其他某个用户(user2)信息后,需要在数据库中将被修改用户(user2)的修改人信息填写为当前用户(user1)的id

解决办法:

前端发送请求执行过程

  • 用户登录成功后,后端会生成一个JWT-Token返回给前端;
  • 之后前端每次给后端发送请求都会在请求头中携带该JWT-Token,后端拦截器会拦截这次请求,在验证JWT-Token正确后才会允许这次请求(验证不通过会返回错误信息,前端会自动跳转到登陆页面)

思路

根据上述执行过程,我们可以得到如下思路:

  1. 首先我们可以把登录用户的id封装到JWT-Token中去,前端每次操作时都可以从JWT-Token中获得其id
    (但由于拦截并解析JWT-Token是拦截器所做的,从而只能在拦截器中获取到id,怎么将此id信息传递给之后的controller、service层呢?于是便有了第2步)
  2. 然后使用ThreadLocal工具类,将用户的id等信息存储到ThreadLocal对象中
  3. 之后的控制层、业务处理层直接调用ThraedLocal对象就可以获取到当前用户的id等信息

解释

ThreadLocal并不是一个线程,而是当前线程的局部变量。

ThreadLocal为每个线程单独提供一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。
(客户端发送的每次请求,Spring后端内嵌的Tomcat服务器都会分配一个单独的线程来处理,于是每次请求的当前用户信息都可以通过ThreadLocal存储在对应的线程内部)

ThreadLocal的常用方法:

方法名 作用
public void set(T value) 设置当前线程的线程局部变量的值
public void get() 返回当前线程所对应的线程局部变量的值
public void remove() 移除当前线程的线程局部变量

标签:登录,Token,JWT,用户,获取,ThreadLocal,线程,id
From: https://www.cnblogs.com/sunjuil/p/17831107.html

相关文章

  • 通过NGINX搭建TiDB负载均衡
    作者:像风一样的男子前言目前TIDB的负载均衡官网推荐使用HAProxy,社区主流也是HAProxy,本文尝试使用nginx四层代理tidb提供TCP协议下的负载均衡能力,因为nginx安装编译需要自己添加模块,很多小伙伴觉得麻烦,本文使用基于Nginx的openresty来安装,可以实现一键安装并打包各个模块,快速......
  • AJAX发送请求到服务器获取信息和状态码到前端浏览器------前端
    AJAX在浏览器当中发送异步请求,请求之间是独立的,谁也不用等谁类似于多线程并发,不会出现页面清空然后展示新的页面的效果实现局部刷新(靠多种技术一起做到的,而不是一个技术叫ajax)它是异步的(类似于多线程)在AJAX的请求以及响应中完全依靠的是XMLHttpRequest对象XMLHttpRequ......
  • TiDB实践安装及性能测试(上)
    作者:TiDBer_小阿飞TIDB分布式数据库离线实施方案及相关测试(测试版)第一部分 ~~ ~~硬件资源一、硬件资源现有硬件资源环境统计如下|||||||||--|------------|---|-----|----|---------|-------------||序号|IP|CPU|存储|内存|Hostname......
  • TiDB实践安装及性能测试(下)
    作者:TiDBer_小阿飞第六部分 数据备份及数据迁移一、TiDBDataMigration(DM)安装部署TiDBDataMigration(DM)是一款便捷的数据迁移工具,支持从与MySQL协议兼容的数据库(MySQL、MariaDB、AuroraMySQL)到TiDB的全量数据迁移和增量数据同步。1.解压DM包在TOOLS的文件......
  • 记一次 TiDB v7.1 版本生产环境的完整搭建流程
    作者:随缘天空本文包含以下内容:1、安装的硬件要求2、安装前环境检查及系统优化3、集群搭建4、服务访问1、硬件要求tidb集群搭建对服务器的cpu和内存有要求,过低的配置可能会导致搭建失败或影响集群性能2、安装前环境检查及系统优化为了保证安装顺利和集群的性能,安装前我们需......
  • 三地五中心,TiDB POC最佳姿势探索
    POC测试背景在某地震多发省,为了避免地震造成的机房级灾难,或者城市级灾难,导致整个系统不可用,拟建设一套三地五中心五副本分布式高可用数据库系统,保证高可用需求。在该系统中需要接入不同地区的应用流量,且前期应用开发已经采用了百库百表的水平分库表策略。为尽可能减少应用~数据库......
  • 【运维实操】TIDB v6.1.1:全量备份、全量恢复和增量备份方法解析
    作者:Fly-bird背景:由于公司要求必须保证数据库的数据安全,我们生产环境的数据库采取全量备份+增量备份+实时同步从库的方式保证数据库的高可用,本文介绍我公司生产环境的数据库备份方式。注意:我们使用实时同步数据到从库的方式保障高可用(使用pump+drainer),同时支持恢复任意时刻数据的......
  • Identifier Naming Method
    I.VariablesLocalvariableDefinetheloop:i,j,z,x,y;Uselowercaseforsinglewordsandusethesmallcamelcasecommandformultiplewords;ModulevariablesDefineitasstatic,usingHungariannamingconventions+camelcasenamingconvention......
  • 国产首款IDE环境:数字广东公司联合麒麟软件打造的国内首款适配国产操作系统、蜘蛛创新
    参考:https://www.youtube.com/watch?v=fOpBEWZVKU0   在中国it历史上继“木兰编程语言(实际上套壳Python),红旗操作系统(实际上套壳Chrome),汉芯(虚假芯片),鸿蒙操作系统(安卓套壳)”后又推出了一款由数字广东公司联合麒麟软件打造的国内首款适配国产操作系统、蜘蛛创新的集成开发环......
  • Intellij Idea搭建Spring环境-xml方式
    本篇博客介绍适合使用xml配置Spring环境和SpringMVC环境。①首先我们使用maven新建一个普通的javaweb工程(包含WEB-INF/web.xml),然后在pom文件中相关的依赖maven创建的web工程标准目录结构一般为:|--root|--pom.xml|--src/|--main/|--java/Java源代码目录......