您的位置:首页 > 健康 > 美食 > 门户网站建设工作情况总结_亚马逊跨境电商开店赚钱吗_北京网站建设公司大全_搜索引擎优化是指什么

门户网站建设工作情况总结_亚马逊跨境电商开店赚钱吗_北京网站建设公司大全_搜索引擎优化是指什么

2025/2/26 7:11:22 来源:https://blog.csdn.net/weixin_46739493/article/details/144972616  浏览:    关键词:门户网站建设工作情况总结_亚马逊跨境电商开店赚钱吗_北京网站建设公司大全_搜索引擎优化是指什么
门户网站建设工作情况总结_亚马逊跨境电商开店赚钱吗_北京网站建设公司大全_搜索引擎优化是指什么

今天在朋友机子上运行代码,在生成token的时候,遇到了这样一个问题:

Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26) ~[jjwt-0.9.1.jar:0.9.1] at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilder.java:99) ~[jjwt-0.9.1.jar:0.9.1] at com.zs.base.util.framework.JwtUtil.createToken(JwtUtil.java:48) ~[classes/:na]

这个问题是因为 javax.xml.bind.DatatypeConverter 在 Java 9 及更高版本中被移除了。当前使用的 jjwt-0.9.1 版本依赖于这个类进行 Base64 编码和解码,但在 Java 9 及之后的版本中,这个类不再存在。我本机用的是8,朋友电脑用的是17。所以会有这个问题。

有几种解决方法:

1. 添加 javax.xml.bind 依赖

你用的是Java 9 或更高版本,可以手动添加 javax.xml.bind 依赖来解决这个问题。你可以在 pom.xml 中添加以下依赖(适用于 Maven):

<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>

如果是 Gradle 项目,添加如下依赖:

implementation 'javax.xml.bind:jaxb-api:2.3.1'

2. 升级 JJWT 版本(推荐)

考虑升级 JJWT 到一个较新的版本,JJWT 目前已经支持 Java 9+,并且新的版本不会依赖 javax.xml.bind.DatatypeConverter。你可以在 pom.xml 中将 jjwt 的版本升级到较新的版本(例如 0.11.5 或更高)。

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.11.5</version>
</dependency>

3. 使用替代库

如果你不想使用 javax.xml.bind,可以考虑使用其他 Base64 编码解码库,如 Apache Commons Codec,来替换 JJWT 中的 Base64 解码功能。你需要自定义 JwtBuilder 的签名方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com