小生刚学完后台,有几个疑问
问题一:
下面这里为什么要用callable开启一个新线程执行啊,而且不是cllable.start()执行的而是直接callable.call(),这样不就是直接在主线程执行吗

问题二:
既然使用了jwt...为什么数据还要存在redis中...然后返回给客户端的还是个md5摘要信息,单纯的当做一个key来使用...这样子使用jwt不就和直接使用session没撒两样了吗(甚至比直接使用session还要损耗性能,服务端还要解析token)
没明白这样用jwt的优势在哪里
第一个问题我看错了,我看成了邮件发送的那个开线程的了。
第一个问题是检查登录状态的,就是要阻塞。我们视频里好像有讲到,你去看看微信的扫码登录,它发起一个请求,如果你不阻塞,直接返回,那么你要很频繁地去检查登录状态。
所以我们阻塞当前的线程,当用户在30秒内扫描了登录,改变了对应用户id的登录状态,那么就会释放掉阻塞。
课程中写了Callable<ResponseResult>,其实没有开启线程,仅仅是直接调用call方法。可以把这个Callable去掉,直接调用里面的方法,这个写多余的。至于当时是怎么想的,我也不知道了,哈哈。
第二个问题,没说用session实现不了单点登录。假设你的系统A是用Java写的,假设你的系统B是用PHP写的,你的系统C是用Python写的。这样是否方便实现呢?
第一个问题。其实没有主线程之分,你来一个请求就会给你开一个线程。为了不阻塞当前的线程,让发送的任务在另外一个线程里执行。有返回值,是当前的一个执行状态。
第二个问题。之所以保存在redis里是为了单点登录。一处登录,同域处处访问携带者令牌就可以访问各服务器。这个博客系统只是单体应用。比如说,你登录了百度网盘,你可以访问贴吧,你可以访问百度旗下的所有网站,已经登录的状态,不需要再单独进行登录了。比如说我们阳光沙滩,有问答服务器,有文章服务器,有用户系统服务器,有很多个服务器程序,它们跑在不同的tomcat服务器上。如果你登录的时候,与用户系统服务器建立了session会话,那么你去向文章服务器提交文章的时候呢?文章服务器与你没有会话呀。如果使用令牌的话,你登录了,你有令牌,去访问同域的服务器,都可以拿到令牌,不同的服务器直接校验令牌是否合法即可。