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

Java Spring中Jwts.signWith()废弃方法的替代方案是什么?

解决JWT中.signWith()方法废弃的问题

你的问题根源在于JJWT库从0.11.0版本开始废弃了旧的signWith(SignatureAlgorithm, Key)方法,原因是该方法允许手动指定的签名算法与密钥类型不匹配,存在安全风险。直接给整个方法标记@Deprecated不是合理做法,应该升级到新的签名API。

正确的替换方案

修改generateToken方法,使用JJWT推荐的新签名方式:

  • 如果使用的是0.11.0+版本,直接调用signWith(KEY)即可,库会根据密钥的类型自动推断合适的签名算法(比如HS256对应HMAC密钥)
  • 若需要显式指定算法,也可以使用signWith(KEY, SignatureAlgorithm.HS256),但推荐自动推断的方式,避免算法与密钥不匹配的问题

修改后的代码示例

public String generateToken(UserDetails userDetails) {
    return Jwts.builder()
            .setSubject(userDetails.getUsername())
            .setIssuedAt(new Date())
            .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10))
            .signWith(KEY) // 替换为新的签名方法
            .compact();
}

额外说明

  • 如果你还在使用低于0.11.0的JJWT版本,建议尽快升级到最新稳定版,旧版本存在一些安全漏洞和已废弃的API
  • 不要保留@Deprecated注解在新方法上,这个注解应该用来标记即将被移除的旧实现,而非修正后的新方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:51:34