未知 发表于 2022-10-16 14:58:29

使用Session和ThreadLocal有啥区别呢

想问下在项目中保存用户登录信息的时候,在后面获取使用的时候,使用Session和ThreadLocal有啥区别呢,在网上搜索他俩之间的区别几乎没大有文章写。我现在是通过JWT生成的token中获取用户信息保存在threadLocal里面。我想了几点您看对吗或者您补充下内容1、Session会占用服务器资源,用户越多所占的内存就越多,ThreadLocal保存信息实际上是用的所发送请求那条线程内部类里面的 ThreadLocals 来保存,不会申请额外资源2、Session获取用户信息,先要拿到对应的Request请求,且获取用户相关信息还要传入相应的参数,比较不雅,Threadlocal声明为一个公共的静态变量,可以在任何地方获取到3、线程安全问题,Threadlocal 本身是线程安全的,一个请求对应一个线程对应一个Threadlocal,而Session本身会有线程安全的问题

未知 发表于 2022-10-16 16:59:09

严格意义上这两个没有直接的关系,不具备对比性的关系,也不是替代的关系,session指的是服务器端的HttpSession,是处理当前会话业务相关的。 ThreadLocal通常可以存储了当前线程的上下文对象,可以跨边界通信,这样就不需要把一些对象或参数在整个调用链上传输,可以在调用第一层的时候,将某些对象存储下来(request,session,xxx等)封装为一个Context类,然后任何地方就可以调用这个类,获取之前那个参数,如果不用他,则需要把参数传递到第二层、第三层,第N层。 像以前那种基于session的会话的JSP项目或一些老项目,大部分都是在Filter中,将当前session或request对象放入到threadlocal上下文中,这样就不需要在每个类里面接收参数。而现在前后端分离后,会话机制升级为JWT,也是同理,为了方便在各个代码中调用,也会放到threadlocal中。

未知 发表于 2022-10-17 19:08:57

kkk
页: [1]
查看完整版本: 使用Session和ThreadLocal有啥区别呢