JWT 在 Spring Boot 3 中的作用

一、JWT 是什么?(生活类比)

JWT 就像是一个 "电子身份证" 或者 "入场手环"。想象一下:

  1. 去游乐园玩

    • 你在入口处买票后,工作人员给你一个 彩色手环
    • 这个手环上印着你的名字、入园时间、有效期
    • 手环是防水的,很难伪造
    • 你进入园内后,所有游乐设施都通过这个手环确认你的身份和权限
    • 你不需要每次都出示门票,也不需要重新排队验证身份
  2. 参加会议

    • 你注册会议后,收到一个 电子胸牌
    • 胸牌上有你的照片、姓名、公司、会议场次权限
    • 这个胸牌是加密的,别人无法复制
    • 你可以自由进入任何允许的会议室,保安只需要扫描胸牌就能验证
二、JWT 在 Spring Boot 中的具体作用
  1. 身份验证(登录后)

    • 用户登录后,服务器生成一个 JWT 令牌
    • 这个令牌包含用户的基本信息(用户名、ID、角色等)
    • 客户端(浏览器 / 手机)保存这个令牌
    • 后续每次请求都带上这个令牌,就像你戴着游乐园手环一样
  2. 授权(权限控制)

    • JWT 令牌中可以包含用户的角色信息(如管理员、普通用户)
    • 服务器收到请求后,检查令牌中的角色信息
    • 决定用户是否有权限访问特定资源(比如只有管理员能删除数据)
  3. 无状态性(最重要的特点)

    • 服务器不需要存储令牌信息(不像传统的 session 方式)
    • 就像游乐园的手环,工作人员不需要查电脑,直接看手环就能验证
    • 这使得系统更容易扩展到多个服务器(微服务架构)
三、为什么要用 JWT?(对比传统方式)

传统的 session/cookie 方式

  • 你去超市办了一张会员卡
  • 每次消费都要刷卡,店员要查数据库确认你的身份
  • 如果超市开了很多分店,数据同步会很麻烦
  • 如果会员卡丢了,别人可能冒用你的身份

JWT 方式

  • 你在银行办了一张电子支票
  • 支票上有你的信息、金额、有效期,而且是加密的
  • 任何银行都可以直接验证支票的真实性,不需要联网查数据库
  • 即使支票被别人捡到,没有密钥也无法修改信息
四、Spring Boot 3 中 JWT 的工作流程
  1. 用户登录

    • 用户提供用户名和密码
    • Spring Boot 验证后,生成一个 JWT 令牌
  2. 客户端保存

    • 浏览器把令牌保存在 localStorage 或 cookie 中
    • 移动应用把令牌保存在应用内存储中
  3. 请求资源

    • 客户端在每个请求的 Header 中添加 Authorization: Bearer
    • 就像你去餐厅吃饭,进门时出示你的会员卡
  4. 服务器验证

    • Spring Boot 检查令牌的签名和有效期
    • 提取用户信息,确定访问权限
    • 处理请求并返回结果
五、JWT 的优缺点

优点

  • 无状态,易于扩展(适合微服务)
  • 跨域支持好(不需要担心 cookie 跨域问题)
  • 性能高(不需要频繁查询数据库)
  • 可以在令牌中包含自定义信息

缺点

  • 令牌体积较大(相比简单的 session ID)
  • 一旦签发,很难立即撤销(除非实现黑名单机制)
  • 令牌过期后,用户需要重新登录
六、生活中的 JWT 例子总结
  • 登机牌:包含你的姓名、航班号、座位号、登机口,全球机场通用
  • 酒店房卡:包含你的姓名、房间号、有效期,所有酒店员工都能验证
  • 电子优惠券:包含优惠金额、有效期、使用条件,商家扫码就能验证

JWT 的核心思想就是:一次验证,到处通行,而且验证过程简单高效。这就是为什么它在现代 Web 应用中如此受欢迎。

编辑

分享

你可能感兴趣的:(spring,boot,github,git)