一、JWT 是什么?(生活类比)
JWT 就像是一个 "电子身份证" 或者 "入场手环"。想象一下:
-
去游乐园玩:
- 你在入口处买票后,工作人员给你一个 彩色手环
- 这个手环上印着你的名字、入园时间、有效期
- 手环是防水的,很难伪造
- 你进入园内后,所有游乐设施都通过这个手环确认你的身份和权限
- 你不需要每次都出示门票,也不需要重新排队验证身份
-
参加会议:
- 你注册会议后,收到一个 电子胸牌
- 胸牌上有你的照片、姓名、公司、会议场次权限
- 这个胸牌是加密的,别人无法复制
- 你可以自由进入任何允许的会议室,保安只需要扫描胸牌就能验证
二、JWT 在 Spring Boot 中的具体作用
-
身份验证(登录后)
- 用户登录后,服务器生成一个 JWT 令牌
- 这个令牌包含用户的基本信息(用户名、ID、角色等)
- 客户端(浏览器 / 手机)保存这个令牌
- 后续每次请求都带上这个令牌,就像你戴着游乐园手环一样
-
授权(权限控制)
- JWT 令牌中可以包含用户的角色信息(如管理员、普通用户)
- 服务器收到请求后,检查令牌中的角色信息
- 决定用户是否有权限访问特定资源(比如只有管理员能删除数据)
-
无状态性(最重要的特点)
- 服务器不需要存储令牌信息(不像传统的 session 方式)
- 就像游乐园的手环,工作人员不需要查电脑,直接看手环就能验证
- 这使得系统更容易扩展到多个服务器(微服务架构)
三、为什么要用 JWT?(对比传统方式)
传统的 session/cookie 方式:
- 你去超市办了一张会员卡
- 每次消费都要刷卡,店员要查数据库确认你的身份
- 如果超市开了很多分店,数据同步会很麻烦
- 如果会员卡丢了,别人可能冒用你的身份
JWT 方式:
- 你在银行办了一张电子支票
- 支票上有你的信息、金额、有效期,而且是加密的
- 任何银行都可以直接验证支票的真实性,不需要联网查数据库
- 即使支票被别人捡到,没有密钥也无法修改信息
四、Spring Boot 3 中 JWT 的工作流程
-
用户登录:
- 用户提供用户名和密码
- Spring Boot 验证后,生成一个 JWT 令牌
-
客户端保存:
- 浏览器把令牌保存在 localStorage 或 cookie 中
- 移动应用把令牌保存在应用内存储中
-
请求资源:
- 客户端在每个请求的 Header 中添加
Authorization: Bearer <token> - 就像你去餐厅吃饭,进门时出示你的会员卡
- 客户端在每个请求的 Header 中添加
-
服务器验证:
- Spring Boot 检查令牌的签名和有效期
- 提取用户信息,确定访问权限
- 处理请求并返回结果
五、JWT 的优缺点
优点:
- 无状态,易于扩展(适合微服务)
- 跨域支持好(不需要担心 cookie 跨域问题)
- 性能高(不需要频繁查询数据库)
- 可以在令牌中包含自定义信息
缺点:
- 令牌体积较大(相比简单的 session ID)
- 一旦签发,很难立即撤销(除非实现黑名单机制)
- 令牌过期后,用户需要重新登录
六、生活中的 JWT 例子总结
- 登机牌:包含你的姓名、航班号、座位号、登机口,全球机场通用
- 酒店房卡:包含你的姓名、房间号、有效期,所有酒店员工都能验证
- 电子优惠券:包含优惠金额、有效期、使用条件,商家扫码就能验证
JWT 的核心思想就是:一次验证,到处通行,而且验证过程简单高效。这就是为什么它在现代 Web 应用中如此受欢迎。
编辑
分享
1786

被折叠的 条评论
为什么被折叠?



