0
  • 最佳答案

    第一个问题我看错了,我看成了邮件发送的那个开线程的了。


    第一个问题是检查登录状态的,就是要阻塞。我们视频里好像有讲到,你去看看微信的扫码登录,它发起一个请求,如果你不阻塞,直接返回,那么你要很频繁地去检查登录状态。


    所以我们阻塞当前的线程,当用户在30秒内扫描了登录,改变了对应用户id的登录状态,那么就会释放掉阻塞。


    课程中写了Callable<ResponseResult>,其实没有开启线程,仅仅是直接调用call方法。可以把这个Callable去掉,直接调用里面的方法,这个写多余的。至于当时是怎么想的,我也不知道了,哈哈。


    第二个问题,没说用session实现不了单点登录。假设你的系统A是用Java写的,假设你的系统B是用PHP写的,你的系统C是用Python写的。这样是否方便实现呢?

    1153952789488054272  评论     打赏       拉大锯
    • QWER123  回复 @拉大锯
      第二点 还是没局的哪里方便 其它语言也不存在啊 反正是去redis数据库里判断。。。
      QWER123 2020-10-24 18:29   回复 1316268136319803392
    • 拉大锯  回复 @QWER123
      什么叫去redis数据库里判?
      拉大锯 2020-10-24 18:58   回复 1153952789488054272
    • QWER123  回复 @拉大锯
      就是登录的用户信息都放在redis里的,redis里按tokenKey查得到就说明是登录的,然后顺带也能拿到登录用户信息。 session不也是这么做的嘛
      QWER123 2020-10-25 18:56   回复 1316268136319803392
    • 拉大锯  回复 @QWER123
      把你把token叫session就可以了,不用改什么代码咯。
      拉大锯 2020-10-25 20:09   回复 1153952789488054272
  • 第一个问题。其实没有主线程之分,你来一个请求就会给你开一个线程。为了不阻塞当前的线程,让发送的任务在另外一个线程里执行。有返回值,是当前的一个执行状态。


    第二个问题。之所以保存在redis里是为了单点登录。一处登录,同域处处访问携带者令牌就可以访问各服务器。这个博客系统只是单体应用。比如说,你登录了百度网盘,你可以访问贴吧,你可以访问百度旗下的所有网站,已经登录的状态,不需要再单独进行登录了。比如说我们阳光沙滩,有问答服务器,有文章服务器,有用户系统服务器,有很多个服务器程序,它们跑在不同的tomcat服务器上。如果你登录的时候,与用户系统服务器建立了session会话,那么你去向文章服务器提交文章的时候呢?文章服务器与你没有会话呀。如果使用令牌的话,你登录了,你有令牌,去访问同域的服务器,都可以拿到令牌,不同的服务器直接校验令牌是否合法即可。

    1153952789488054272  评论     打赏       拉大锯
    • QWER123  回复 @拉大锯
      第一个问题的回答的疑问: 但这个方法就是需要阻塞当前线程呀。。。 第二个问题的回答的疑问:session也能做到单点登录呀...只要存redis里
      QWER123 2020-10-23 23:38   回复 1316268136319803392
相关问题
幻影~ · 提问
2024-04-13 20:13 10 2
幻影~ · 找工作
2024-04-07 10:44 15 2
幻影~ · 问题
2024-03-31 17:20 7 2
TONYGFX · AOSP
2024-03-28 17:11 4 2