You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目中JWT过期(ExpiredJwtException)问题求解

解决JWT过期异常(io.jsonwebtoken.ExpiredJwtException)的方案

1. 重新获取有效JWT令牌

  • 若项目实现了刷新令牌(Refresh Token)机制,前端捕获到过期异常后,调用刷新接口用有效的refresh token换取新的access token,无需用户重新登录。
  • 若无刷新机制,引导用户重新登录,后端生成新的JWT令牌,示例代码(基于JJWT框架):
String generateNewToken(String username, String secretKey) {
    return Jwts.builder()
            .setSubject(username)
            .setIssuedAt(new Date())
            .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 设置1小时有效期
            .signWith(SignatureAlgorithm.HS256, secretKey.getBytes())
            .compact();
}

2. 优化JWT过期策略

  • 根据业务场景调整access token的过期时长:敏感操作(如支付)设15-30分钟,普通操作设1-2小时,平衡安全性和用户体验。
  • 推荐搭配刷新令牌机制:refresh token有效期设为7-14天,存储在HttpOnly Cookie中,用于在access token过期时静默获取新令牌。

3. 配置允许的时钟偏差

如果是服务器与客户端时间不同步导致的误判,可以在JWT验证时设置允许的时钟偏差,示例代码:

Claims validateToken(String token, String secretKey) {
    return Jwts.parser()
            .setSigningKey(secretKey.getBytes())
            .setAllowedClockSkewSeconds(300) // 允许5分钟的时间偏差
            .parseClaimsJws(token)
            .getBody();
}

注意:偏差值不宜过大,避免引入安全风险。

4. 检查系统时间一致性

确认后端服务器、前端客户端的系统时间是否同步到标准UTC时间,避免因时区偏差或本地时间错误导致的令牌过期判断异常。

内容的提问来源于stack exchange,提问作者Srilatha Nandamuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:47:42