从session中取出SysUser的信息,而不使用RequestHolder可以吗?

来源:8-11 ThreadLocal,LoginFilter实现登录请求的拦截

timshinlee

2019-03-16

请问老师这两种方式哪一种会比较好?

写回答

1回答

Jimin

2019-03-16

你好,requestHolder里的sysUser其实就是来自session里,可能课程里细节你没完全属于到,课程里loginFilter里就是在判断用户登录了之后,取出request对应session里的sysUser放到requestHolder里的。
这里具体说一下这样做的好处:requestHolder本质上是使用了threadlocal(通过线程隔离保证线程间数据的线程安全),在当前请求所在的线程里,不需要沿着方法一直传递登录用户这个对象实例,而是只在需要时直接调用就可以了,这样一来方法封装会简单很多,逻辑也更清晰。

0
7
古城老巷
回复
Jimin
老师,每次请求就是新开一个线程,请求结束意味着线程结束。课程中在过滤器实现把user对象存到threadlocal中,拦截器中实现请求结束后remove掉,那么在每次请求时,都会给threadlocal中进行set,结束后remove掉。我这样理解对吗? 2:如果我只通过拦截器实现,当请求被拦截后,进入具体方法前实现判断当前session中是否存在user,若存在,则存入threadlocal中,若不存在,则跳转到登录页面,这样实现与课程中通过使用过滤器实现的区别在哪里呢? 3:对线程与进程的区别:只知道一个进程里包含多个线程,每次请求就是一个线程,那进程呢?具体指什么,不是很清楚,
2020-04-06
共7条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2261 学习 · 1347 问题

查看课程