coze 的jwt和若依冲突解决方案
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 38/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- java
- Ambito
- api, authentication, backend
Direzione di ricerca
Inizia dalle voci dello stack trace di DefaultJWTBuilder.generateJWT e JWTOAuthClient.doGetAccessToken, quindi esamina l’albero delle dipendenze pertinente di pom.xml per le versioni di jjwt in ruoyi-tax, ruoyi-common e coze-api. Conferma la versione di JWT risolta e verifica che l’esempio OAuth non generi più NoSuchMethodError dopo una build Maven pulita.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
问题现象
在使用 coze-api 进行JWT OAuth认证时遇到运行时错误:
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签名不兼容
类加载器无法确定使用哪个版本的方法实现
运行时调用到错误版本的方法签名
问题诊断过程
- 依赖树分析
mvn dependency:tree -pl ruoyi-tax | grep -E "(jwt|coze)"
发现多个JWT库同时存在:
[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中改为:
<jwt.version>0.11.5</jwt.version>
然后清理 maven:

方案二
业务项目中移除依赖:
<!-- 移除coze-api的所有exclusions -->
<dependency>
<groupId>com.coze</groupId>
<artifactId>coze-api</artifactId>
<version>0.3.2</version>
<!-- 不添加任何exclusions,让其使用完整的JWT依赖 -->
</dependency>
<!-- 从ruoyi-common中排除JWT依赖,避免冲突 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<exclusions>
<exclusion>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</exclusion>
<exclusion>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
</exclusion>
<exclusion>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
</exclusion>
<exclusion>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
</exclusion>
</exclusions>
</dependency>
补充:两种方案可以同时使用,在我的测试中,方案一执行后清理 maven 后依然不行,方案二也不行,第二天起来丢给 ai 分析了一波(可能是用命令清理了缓存还是什么,就可以了),删除了方案二的代码依旧可行,我的最终代码是保留了方案一
- Lingua principale
- Java
- Stelle
- 214
- Fork
- 97
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di coze-dev/coze-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
PCMConfig类中缺少关键属性 Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
-
sdk 和官方文档不一致 Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
Tutte le issue di coze-dev/coze-java
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
checkstyle/test-configs#263 ·
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
apache/cloudstack#14222 ·
-
[BUG]茶杯方块在取茶时会引发崩溃 Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
Cannot differ own consent and managed consents in My Consents view and detailed consent view. Aperta1.0.0-alpha2 Type/Improvement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
wso2/dpdp-accelerator#272 ·