JWT 实现登录认证 + Token 自动续期方案,这才是正确的使用姿势!

💡 原文中文,约7600字,阅读约需19分钟。
📝

内容提要

本文介绍了用户认证功能的技术选型和实现,包括基于session和JWT的认证方式,JWT工具类和Redis工具类的实现,以及拦截器类和拦截器配置类的实现方法。

🎯

关键要点

  • 用户管理模块涉及加密及认证流程,认证功能的技术选型及实现是本文重点。
  • 认证方式主要有基于session和基于JWT的两种,二者的主要区别在于用户状态的保存位置。
  • 基于session的认证流程包括用户输入用户名和密码,服务器生成session并保存到数据库,使用cookie进行后续请求的认证。
  • 基于JWT的认证流程中,用户输入用户名和密码后,服务器生成token并保存到数据库,前端存储token以进行后续请求的认证。
  • JWT的优点在于不需要在分布式环境下做额外的数据共享工作,而session需要实现多机数据共享。
  • JWT的安全性较低,不能存储敏感数据,而session信息相对更安全。
  • JWT的性能开销较大,HTTP请求的Header可能比Body还要大,而sessionId较短,开销小。
  • JWT是一次性的,无法中途废弃,续签需要生成新的JWT,结合redis可以解决续签问题。
  • 选择JWT进行认证的原因是其在分布式环境下的优势,尽管存在缺点,但可以通过redis弥补。
  • 实现JWT所需的依赖和工具类的代码示例,包括生成token和检验token的方法。
  • Redis工具类的实现,提供了对token的存储、获取和删除功能。
  • 登录功能的实现包括验证用户名密码、生成token并存入redis。
  • 登出功能通过删除redis中的token实现。
  • 更新密码功能需要重新生成token并更新redis中的token,以提升用户体验。
  • 拦截器类用于校验token的有效性和判断是否需要续期。
  • 拦截器配置类用于配置拦截器的路径和排除的路径。
➡️

继续阅读