你是否经常听到这些词:
- '我们用 JWT 做登录认证'
- '前端把 token 放在 Authorization 头里'
- 'JWT 无状态,适合分布式系统'
但你真的理解 JWT 到底是什么?它怎么工作?和 Session 有什么区别? 吗?
今天我们就用 通俗语言 + 图解 + Spring Boot 代码实战,带你从零彻底搞懂 JWT!
🧩 一、一句话解释 JWT
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间安全地传递'声明'(claims)的紧凑、自包含令牌。
简单说:JWT 就是一个加密的字符串,里面包含了用户身份信息,服务器不用查数据库就能验证你是谁!
🔍 二、JWT 长什么样?
一个典型的 JWT 看起来像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
它由 三部分组成,用点 . 分隔:
| 部分 | 说明 | 是否可读 |
|---|---|---|
| Header(头部) | 算法 + 类型 | Base64 可解码 |
| Payload(载荷) | 用户数据(如 ID、角色、过期时间) | Base64 可解码 |
| Signature(签名) | 用于验证令牌是否被篡改 | 不可逆 |
✅ 注意:JWT 默认是 Base64 编码,不是加密!任何人都能解码看到内容!
🔒 安全靠的是 签名(Signature),防止内容被篡改。
📦 三、三部分详解(附解码示例)
1. Header(头部)
{ "alg": "HS256", "typ": "JWT" }
alg:签名算法(如 HS256、RS256)typ:令牌类型,固定为 JWT
2. Payload(载荷)— 存放用户信息的地方!
{ "sub":

