杨斌
发布于 2026-04-09 / 8 阅读
0
0

JWT技术原理

在 Java 项目(比如 Spring Boot + Vue)中使用 JWT(JSON Web Token),本质是用一种“无状态的身份认证机制”来替代传统的 Session 登录。


一、JWT 的好处(为什么越来越多人用)

1️⃣ 无状态(核心优势)

传统登录:

  • 用户登录 → 服务端存 Session → Redis / 内存保存

  • 每次请求都要查 Session

JWT:

  • 登录成功 → 服务端直接返回一个 token

  • 后续请求 → 客户端带 token,服务端不存任何登录状态

👉 好处:

  • 不用 Redis 存 Session

  • 服务可以随便扩容(天然支持分布式)


2️⃣ 天然适合前后端分离(你现在用 Vue3 就很适合)

流程非常简单:

前端(Vue)
   ↓ 登录
后端(SpringBoot)→ 返回 JWT
   ↓
前端存 token(localStorage)
   ↓
每次请求带 token(Authorization)

👉 好处:

  • 不依赖 Cookie(避免跨域问题)

  • 前端控制更灵活


3️⃣ 跨服务 / 微服务支持很好

在微服务架构中:

  • A 服务发 token

  • B / C / D 服务都能验证

👉 不需要共享 Session


4️⃣ 性能更高(减少 IO)

传统:

  • 每次请求查 Redis / DB

JWT:

  • 只做一次 签名校验(内存计算)

👉 CPU 换 IO,通常更快


5️⃣ 安全性可控(可扩展)

JWT 可以:

  • 设置过期时间(exp)

  • 加自定义信息(用户ID、角色)


二、JWT 的原理(重点)

JWT 本质就是一个字符串:

xxxxx.yyyyy.zzzzz

分为三部分:


1️⃣ Header(头部)

说明:

  • 类型(JWT)

  • 签名算法(如 HS256)

示例:

{
  "alg": "HS256",
  "typ": "JWT"
}

2️⃣ Payload(载荷)

存放用户信息(但不是加密的!只是 Base64 编码)

{
  "userId": 1001,
  "username": "yang",
  "exp": 1710000000
}

👉 注意:

  • 不要放密码!

  • 任何人都能解码看到


3️⃣ Signature(签名)

核心安全点:

签名 = HMACSHA256(
    base64(header) + "." + base64(payload),
    secret
)

👉 用服务端的 secret密钥生成


三、完整认证流程(你要重点理解)

登录时:

1. 用户输入账号密码
2. 后端校验成功
3. 生成 JWT(包含 userId)
4. 返回给前端

请求时:

前端请求:
Authorization: Bearer xxx.jwt.token

后端处理:

1. 拿到 token
2. 校验签名(防篡改)
3. 校验过期时间
4. 解析 userId
5. 放行请求

四、JWT vs Session

对比项

Session

JWT

是否存储

服务端存

客户端存

扩展性

差(要共享)

强

性能

需要查缓存

本地校验

跨域

麻烦

简单

安全

可控

易被盗用


五、JWT 的缺点

❗1. 无法主动失效(最大问题)

  • token 一旦发出去

  • 服务端没法“立刻让它失效”

👉 解决:

  • 短有效期 + 刷新 token

  • 或维护黑名单(Redis)


❗2. token 被盗 = 直接登录

👉 所以必须:

  • HTTPS

  • 不存敏感信息

  • 设置过期时间


❗3. token 体积较大

比 sessionId 大很多


❗4. 登录状态下失效

token如果过期,即使在已登录状态下,也有可能失效,业内做法是双token,1个短期token(30分钟),1个长期刷新token(7天)。

流程如下:

登录

↓

accessToken + refreshToken

↓

请求接口

↓

accessToken过期 ❗

↓

用refreshToken换新token

↓

继续访问

六、总结一句话(你可以记住这个)

👉 JWT 本质是:

用“签名”替代“存储”,实现无状态登录


七、结合你当前技术栈(重点建议)

你是:

  • Java(SpringBoot 2.7.6)

  • Vue3

👉 最推荐方案:

JWT + Spring Security + Redis(可选)

结构:

  • JWT:认证

  • Redis:黑名单 / 刷新token

  • Spring Security:拦截器


评论