请稍等 ...
×

采纳答案成功!

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

单点登陆的问题

用ThreadLocal支持分布式单点登陆吗?ThreadLocal比redis好吗。

//使用ThreadLocal,可以隔离每个线程的数据,为每一个线程创建数据副本,各个用户的数据不会混乱
private static ThreadLocal<Map<String,Object>> threadLocal = new ThreadLocal<>();

//设置user值
public static void set(User user,Integer scope){
   // LocalUser.user = user;
    Map<String,Object> map = new HashMap<>();
    map.put("user",user);
    map.put("scope",scope);

    //把包含用户信息和权限的HashMap,保存到threadLocal中
    LocalUser.threadLocal.set(map);
}

正在回答

1回答

ThreadLocal不能用来保存登录信息,你也写了,用来每个线程隔离信息。我登录完成后,登录这个线程就释放了,这个变量就没有了。

一般用在并发场景时,需要每个线程各自存一些临时数据,可以用到。

并且对分布式不适用。ThreadLocal只在本机本线程有效

1 回复 有任何疑惑可以回复我~
  • 提问者 蓝色西西 #1
    所以分布式单点登陆,只有redis是最好的解决方案对吗。
    回复 有任何疑惑可以回复我~ 2020-07-01 08:34:09
  • 甲蛙 回复 提问者 蓝色西西 #2
    是的,redis本身就是分布式缓存,适合用来存储登录信息
    回复 有任何疑惑可以回复我~ 2020-07-01 20:20:40
  • 提问者 蓝色西西 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-07-02 10:41:33
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号