sa-Token的JWT验证问题

3 天前
/ , ,

sa-Token的JWT验证问题

写项目的时候,发现自己的项目在后端服务重启后,登入状态会失效,一查配置发现sa-Token用的默认是UUID作为token,于是便着手修改为JWT。众所周知,JWT会记录信息,包括你是谁、你有什么权限、什么时候过期,理所当然的,我就认为换成JWT后,登入状态失效的问题就能得到解决。

在更换为JWT的过程中,我遇到了两个问题:

其一,是在application.yml里配置token-style为jwt后,前端收到的token依旧是UUID的问题。

这个是因为我为了实现权限管理,实现了StpInterface这个接口,这就导致“约定大于配置”被打破了,所以,我还需要通过注入 StpLogic 对象,告知 Sa-Token 在 StpUtil 中要使用的 StpLogic 的具体实现类

其二,是登入状态依旧没有被保存的问题。

这个我思来想去都没能搞懂,最后,在Gemini大人的帮助下,我才知道这是sa-Token实现的问题:三次检查。

第一次,是根据密钥,用相同的算法,对head和payload进行运算,然后对JWT自带的那个值进行比较。

第二次,是检查有效期。

前两次都很正规,最头疼的就算这个第三次检查:Sa-Token的核心会话状态

sa-Token为了实现“把人踢下线”这个功能,会从JWT里读取loginId,去内存里查有没有这个id,正是这个步骤,导致我之前所作的将UUID替换为JWT的工作都白费了。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...