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
相关产品推荐
相关产品推荐

