coze 的jwt和若依冲突解决方案
- Ngôn ngữ chính
- Java
- Star
- 214
- Fork
- 98
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
# 问题现象
在使用 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 分析了一波(可能是用命令清理了缓存还是什么,就可以了),删除了方案二的代码依旧可行,我的最终代码是保留了方案一
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với các mục trong stack trace của DefaultJWTBuilder.generateJWT và JWTOAuthClient.doGetAccessToken, sau đó kiểm tra cây dependency liên quan trong pom.xml để tìm các phiên bản jjwt ở ruoyi-tax, ruoyi-common và coze-api. Xác nhận phiên bản JWT đã được resolve và xác minh rằng ví dụ OAuth không còn phát sinh NoSuchMethodError sau một Maven build sạch.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- api, authentication, backend
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 38/100