"白歌看着系统架构图说:'Session 在单体里够用,但咱们的微服务集群有5个实例,不可能每个都存一份 Session。'JWT 把用户身份信息编码在 Token 里,服务端不需要存任何会话状态。'这一章,你将掌握 JWT 的完整机制及其与 Spring Security 的集成方式。"
章节导读:JWT 与无状态认证
本章定位
本章解决的核心问题:JWT 如何通过自包含 Token 实现无状态认证,以及 Spring Security 如何通过 JwtDecoder 和 JwtAuthenticationConverter 将 JWT 集成到过滤器链中。 本章是分布式和微服务架构下的认证方案。
学习路线图
学习顺序说明:先理解 JWT 的结构与原理(Header + Payload + Signature)→ 掌握 JWT 认证流程(签发、传输、校验、提取权限)→ 深入 JwtDecoder(Token 解码与签名验证)→ 最后掌握 JwtAuthenticationConverter(将 JWT Claims 转换为 Spring Security 的 Authentication 对象)。
文件关系说明
| 文件 | 一句话角色 |
|---|---|
JWT.md | JWT 基础:Header + Payload + Signature 三部分结构、Base64URL 编码、签名算法与安全性。 |
JWT认证.md | JWT 认证流程:签发 Token → 客户端存储 → 请求携带 → 服务端校验 → 提取权限的完整链路。 |
JwtDecoder.md | Token 解码器:验证签名、检查过期时间、解析 Claims,Spring Security 的 JWT 校验入口。 |
JwtAuthenticationConverter.md | 权限转换器:将 JWT 中的 scope / roles Claims 映射为 Spring Security 的 GrantedAuthority。 |
知识图谱
核心逻辑:JWT 通过自包含结构实现无状态认证:Header 声明算法,Payload 携带用户身份和权限(Claims),Signature 保证 Token 未被篡改。登录成功后服务端签发 Token,客户端后续请求携带 Authorization: Bearer <token> 头。Spring Security 的 JwtDecoder 解码并验证签名和过期时间,JwtAuthenticationConverter 将 JWT 中的 scope 或 roles Claims 转换为 GrantedAuthority 列表,最终存入 SecurityContext。服务端无需存储任何会话状态,天然支持横向扩展。
与上下章的衔接
上一章回顾:你掌握了 Session 管理机制,包括创建策略、会话固定防护和并发控制。但 Session 在分布式环境中需要共享存储(如 Redis),增加了架构复杂度。
下一章预告:JWT 解决了单系统无状态认证,但现代应用往往需要接入微信、GitHub、Google 等第三方账号。下一章「OAuth2 与第三方登录」将引入 OAuth2 协议——让用户通过授权服务器登录,第三方应用永远接触不到用户密码。