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的有效性和判断是否需要续期。
- 拦截器配置类用于配置拦截器的路径和排除的路径。
➡️