Spring Boot 集成 JWT 实现无状态登录认证,核心为生成 Token→拦截校验→解析用户信息三步闭环;推荐使用 JJWT 依赖,封装线程安全 JwtUtil 管理密钥与过期策略,拦截器统一校验 Token 并透传用户信息,登录接口仅返回 Token 不暴露敏感数据。

Spring Boot 项目集成 JWT 实现登录认证,核心是“生成 Token → 拦截校验 → 解析用户信息”三步闭环。不需要存 Session,不依赖服务器状态,适合前后端分离和分布式部署。
引入可靠 JWT 工具依赖
推荐使用 JJWT(主流、活跃、Spring 生态兼容好),避免用已停止维护的旧版。在 pom.xml 中添加:
io.jsonwebtoken:jjwt-api:0.11.5io.jsonwebtoken:jjwt-impl:0.11.5-
io.jsonwebtoken:jjwt-jackson:0.11.5(支持 JSON 序列化)
注意:不要混用 com.auth0:java-jwt,它 API 风格不同,容易在签名校验、过期处理等细节上踩坑。
封装 JWT 工具类(关键一步)
写一个线程安全、可复用的 JwtUtil,集中管理密钥、过期时间、签名算法:
- 密钥(
secret)必须配置在application.yml中,禁止硬编码;建议用 32 字符以上随机字符串 - 生成 Token 时,只往 Payload 放必要字段(如
userId、username、role),**绝不放密码、手机号、身份证等敏感信息**(Payload 是 Base64 编码,非加密) - 设置合理过期时间(如 2 小时),并考虑刷新机制(如登录后 30 分钟内自动续期)
定义拦截器校验 Token
创建自定义 HandlerInterceptor,在 preHandle 方法中完成:
- 从请求头
Authorization: Bearer xxx提取 Token - 调用
JwtUtil验证签名是否有效、是否过期、是否被篡改 - 验证通过后,把解析出的用户 ID 或用户名存入
RequestContextHolder或ThreadLocal,供后续 Controller 使用 - 对登录接口(
/login)、静态资源、Swagger 接口等放行,其余路径统一拦截
别忘了在配置类中注册该拦截器,并指定拦截路径模式(如 /**)。
登录接口返回 Token 并规范响应
登录 Controller 只做三件事:
- 查库比对账号密码(建议密码用 BCrypt 加密存储)
- 比对成功后,调用
JwtUtil.genToken(...)生成 Token - 返回标准格式(如
{ "code":200, "msg":"登录成功", "data":{"token":"xxx"} }),**不返回密码、不返回完整用户对象**
前端拿到 Token 后存在 localStorage 或 httpOnly Cookie(若需防 XSS,优先选后者并配 Secure + SameSite)。


















