You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot升级JJWT至0.12.6后,JWT解析相关弃用API的修复方法咨询

Spring Boot升级JJWT至0.12.6后,JWT解析相关弃用API的修复方法咨询

嗨,我来帮你搞定JJWT版本升级后的这些弃用API问题~

JJWT从0.11.x升级到0.12.x确实做了不少API重构,原来的链式调用方式几乎全变了,我给你直接上修复后的代码,再逐个解释变化点:

修复后的完整代码示例

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.SecretKey;

// 假设你的encryptionKey()方法返回的是SecretKey类型,如果不是需要先转换
Claims claims = Jwts.parser()
    .verifyWith((SecretKey) encryptionKey()) // 替代弃用的setSigningKey
    .build()
    .parseSignedClaims(token) // 替代弃用的parseClaimsJws
    .getPayload(); // 替代弃用的getBody

每个弃用API的替换说明

  • setSigningKey 弃用:现在需要使用 verifyWith() 方法,它要求传入标准的 SecretKeyPublicKey 类型。如果你的 encryptionKey() 返回的是字节数组或字符串,需要先转换成 SecretKey,比如:
    // 示例:字符串密钥转SecretKey(HS256算法为例)
    String secret = "你的32字节以上的密钥字符串";
    SecretKey secretKey = Jwts.SIG.HS256.key().build(); // 或者用Keys.hmacShaKeyFor(secret.getBytes())
    
  • parseClaimsJws 弃用:替换为 parseSignedClaims(),这个方法是专门为解析带签名的JWT payload设计的,语义更清晰。
  • getBody 弃用:替换为 getPayload(),这个命名更贴合JWT的标准术语(JWT的三个核心部分是Header、Payload、Signature),功能和原来的getBody()完全一致。

额外注意点

JJWT 0.12.x对密钥的安全性要求更严格了,比如使用HS256算法时,密钥长度不能小于256位(也就是32字节),如果你的密钥长度不够,会直接抛出异常,记得检查这一点哦~

备注:内容来源于stack exchange,提问作者Ramy Mohamed

火山引擎 最新活动