java的JJWT 0.91在jdk21中报错的解决方法

时间:2024-11-13 08:41:21

参考了很多其他人的办法,只有这种方式可以解决问题

JSON Web Token(缩写 JWT) 目前最流行、最常见的跨域认证解决方案,前端后端都需要会使用的东西
如果根据黑马的视频,导入了阿里云OSS的相关依赖,自然不会报错,但由于阿里云OSS不是免费使用的,所有那部分内容我没有加入

报错类型

java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

	at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26)
	at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilder.java:99)
	at com.example.TliasWebManagementApplicationTests.testGenJwt(TliasWebManagementApplicationTests.java:29)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	... 6 more

在这里插入图片描述

原先会报错的 pom.xml

 <!--JWT令牌-->
<dependency>
	<groupId>io.jsonwebtoken</groupId>
	<artifactId>jjwt</artifactId>
	<version>0.9.1</version>
</dependency>

在前面加上 jaxb-api,即可正常生成令牌

jaxb-api 的依赖被包含在黑马程序员视频中的阿里云OSS依赖中,所以他不会报错,我们会报错

<dependency>
	<groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<!--JWT令牌-->
<dependency>
	<groupId>io.jsonwebtoken</groupId>
	<artifactId>jjwt</artifactId>
	<version>0.9.1</version>
</dependency>

在这里插入图片描述