























你说的非常对:传统 Web 项目用 Session/Cookie,前后端分离的接口项目(RESTful API)必须用 JWT,核心原因是架构变了—— 传统是服务端渲染页面,现在是前端独立、接口无状态。
SessionID 存在Cookie里
所以:接口鉴权必须抛弃 “服务端存状态” 的方案 → JWT 应运而生
JWT = JSON Web Token
一句话:把用户身份信息加密成一串字符串,存在客户端,服务端不存任何登录状态。
| 对比维度 | Session / Cookie | JWT |
|---|---|---|
| 存储位置 | 服务端存储,客户端只存 ID | 全部存在客户端,服务端零存储 |
| 状态 | 有状态(服务端要查会话) | 无状态(Stateless,接口天然支持分布式) |
| 跨域 / 跨端 | 差(依赖 Cookie,跨域限制大) | 极强(支持 Web、小程序、App、第三方接口) |
| 分布式部署 | 麻烦(需要 Session 共享) | 极简单(多台服务器直接用同一密钥验证) |
| 请求方式 | 浏览器自动带 Cookie | 前端手动传(请求头 / 参数) |
| 安全特点 | 易受 CSRF 攻击 | 无 CSRF 风险 |
| 适用场景 | 传统网站、服务端渲染 | 前后端分离、RESTful API、微服务 |
你可以简单记:
网站用 Session,接口用 JWT;有状态用 Session,无状态用 JWT。
<!-- JWT 工具:jjwt,Spring5 兼容 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。