coze 的jwt和若依冲突解决方案
- Langage dominant
- Java
- Étoiles
- 214
- Forks
- 98
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
# 问题现象
在使用 coze-api 进行JWT OAuth认证时遇到运行时错误:
```java
Exception in thread "main" java.lang.NoSuchMethodError: io.jsonwebtoken.JwtBuilder.signWith(Ljava/security/Key;Lio/jsonwebtoken/SignatureAlgorithm;)Lio/jsonwebtoken/JwtBuilder;
at com.coze.openapi.service.auth.DefaultJWTBuilder.generateJWT(DefaultJWTBuilder.java:25)
at com.coze.openapi.service.auth.JWTOAuthClient.doGetAccessToken(JWTOAuthClient.java:114)
at com.coze.openapi.service.auth.JWTOAuthClient.getAccessToken(JWTOAuthClient.java:52)
at com.ruoyi.coze.controller.JWTOAuthExample.main(JWTOAuthExample.java:95)
```
# 根本原因分析
核心问题:JWT库版本冲突
项目中同时存在多套JWT相关依赖:
项目原有依赖 (ruoyi-common):
io.jsonwebtoken:jjwt-api:0.9
io.jsonwebtoken:jjwt-impl:0.9
io.jsonwebtoken:jjwt-jackson:0.9
coze-api自带依赖:
com.auth0:java-jwt:3.18.2
io.jsonwebtoken:jjwt-api:0.11.5
io.jsonwebtoken:jjwt-impl:0.11.5
io.jsonwebtoken:jjwt-jackson:0.11.5
冲突机制:
不同版本的JWT库API签名不兼容
类加载器无法确定使用哪个版本的方法实现
运行时调用到错误版本的方法签名
# 问题诊断过程
1. 依赖树分析
```java
mvn dependency:tree -pl ruoyi-tax | grep -E "(jwt|coze)"
```
发现多个JWT库同时存在:
```java
[INFO] \- com.coze:coze-api:jar:0.3.2:compile
[INFO] +- com.auth0:java-jwt:jar:3.18.2:compile
[INFO] +- io.jsonwebtoken:jjwt-api:jar:0.11.5:compile
[INFO] +- io.jsonwebtoken:jjwt-impl:jar:0.11.5:runtime
[INFO] +- io.jsonwebtoken:jjwt-jackson:jar:0.11.5:runtime
```
# 解决方案
## 方案一
升级父项目依赖,使依赖保持一致:
pom.xml中改为:
```java
0.11.5
```
然后清理 maven:

## 方案二
业务项目中移除依赖:
```java
com.coze
coze-api
0.3.2
com.ruoyi
ruoyi-common
io.jsonwebtoken
jjwt
io.jsonwebtoken
jjwt-api
io.jsonwebtoken
jjwt-impl
io.jsonwebtoken
jjwt-jackson
```
补充:两种方案可以同时使用,在我的测试中,方案一执行后清理 maven 后依然不行,方案二也不行,第二天起来丢给 ai 分析了一波(可能是用命令清理了缓存还是什么,就可以了),删除了方案二的代码依旧可行,我的最终代码是保留了方案一
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par les entrées de la trace de la pile de DefaultJWTBuilder.generateJWT et JWTOAuthClient.doGetAccessToken, puis examinez l’arbre des dépendances pertinent de pom.xml pour les versions de jjwt dans ruoyi-tax, ruoyi-common et coze-api. Confirmez la version de JWT résolue et vérifiez que l’exemple OAuth ne lève plus NoSuchMethodError après une compilation Maven propre.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- api, authentication, backend
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100