如何用Jwts类提取Token的Claims?遇parserBuilder方法缺失问题
问题根源
你的项目中同时引入了两个版本的JJWT库:jjwt:0.9.1 和 jjwt-api/jjwt-impl/jjwt-jackson:0.11.5。这两个版本存在依赖冲突,Maven可能优先加载了旧版本的类文件,而parserBuilder()方法是JJWT 0.11.x版本才新增的API,旧版本0.9.1中并没有这个方法,所以你找不到它。
解决方法
- 删除POM中旧版本的JJWT依赖:
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> - 保留0.11.5版本的拆分依赖(这是JJWT官方推荐的最新用法),并为运行时依赖添加
scope标签:<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> - 执行Maven清理和重新安装:
mvn clean install
修正后的JwtService代码示例
你的extractClaims方法代码不完整,这里给出完整实现(需替换为你的实际签名密钥):
@Service public class JwtService { // 建议从配置文件读取签名密钥,避免硬编码 private final String SECRET_KEY = "your-actual-secret-key"; public String extractUserName(String jwt) { Claims claims = extractClaims(jwt); return claims.getSubject(); // 假设用户名存储在JWT的subject字段中 } private Claims extractClaims(String jwt) { return Jwts.parserBuilder() .setSigningKey(Keys.hmacShaKeyFor(SECRET_KEY.getBytes())) .build() .parseClaimsJws(jwt) .getBody(); } }
注意:如果你的签名密钥是Base64编码格式,需要使用Keys.hmacShaKeyFor(Base64.getDecoder().decode(SECRET_KEY))来解析。
内容的提问来源于stack exchange,提问作者Azzedine Bk
相关产品推荐
相关产品推荐

