coze-dev / coze-dev/coze-java

coze 的jwt和若依冲突解决方案

Open
#103 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
214
Forks
98
PR merge metrics
No merged PRs in 30d

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:

![](https://cdn.nlark.com/yuque/0/2025/png/25461556/1749085094639-95780c26-c838-4908-9489-e76e52ae7bd8.png)

## 方案二

业务项目中移除依赖:

```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 分析了一波(可能是用命令清理了缓存还是什么,就可以了),删除了方案二的代码依旧可行,我的最终代码是保留了方案一

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.