coze 的jwt和若依冲突解决方案
- 主要言語
- Java
- スター
- 214
- フォーク
- 98
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
# 问题现象
在使用 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 分析了一波(可能是用命令清理了缓存还是什么,就可以了),删除了方案二的代码依旧可行,我的最终代码是保留了方案一
コントリビューションガイド
調査の方向性
DefaultJWTBuilder.generateJWT と JWTOAuthClient.doGetAccessToken のスタックトレースエントリから始め、続いて ruoyi-tax、ruoyi-common、coze-api における jjwt のバージョンについて、関連する pom.xml の依存関係ツリーを調査します。解決された JWT バージョンを確認し、クリーンな Maven ビルド後に OAuth の例で NoSuchMethodError が発生しなくなったことを検証します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java
- 領域
- api, authentication, backend
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100