请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

正在回答

1回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 timshinlee #1
    好的谢谢老师
    回复 有任何疑惑可以回复我~ 2019-03-16 13:33:26
  • anmumu #2
    请问下老师, 这里threadlocal实现的效果其实和 类似本地缓存ehcache是一样的吧? 假如我项目配置了ehcache缓存,直接从缓存里面取user的信息,区别在于缓存取的时候会从session里先得到账户,再把该账户作为key从缓存里面获取user对象, 不知道我这样理解对么?
    回复 有任何疑惑可以回复我~ 2019-06-04 14:07:39
  • Jimin 回复 anmumu #3
    有一个根本不同的地方,就是我们这里threadlocal里的信息在访问时是肯定存在的,因为在请求进来时会写入threadlocal,否则就无法进入后面请求直接被loginFilter拦截住,而缓存里是无法保证肯定有对应的用户信息的,而且缓存是可能失效的。另外一个不同点时,threadlocal是线程间隔离的,一份数据只有某一个线程可以访问,其他线程都访问不到,而缓存是不区分线程的。
    回复 有任何疑惑可以回复我~ 2019-06-04 21:51:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信