**
解决jjwt生成报错**
最近在学习springboot+jwt+vue,在生成jwt 时发生错误,错误代码如下:
2022-01-07 11:17:32.335 ERROR 9856 --- [nio-8083-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root cause java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] 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.okwind.utils.JwtUtils.generateToken(JwtUtils.java:31) ~[classes/:na] at com.okwind.security.LoginSuccessHandler.onAuthenticationSuccess(LoginSuccessHandler.java:32) ~[classes/:na]
分析错误代码:at com.okwind.utils.JwtUtils.generateToken(JwtUtils.java:31) ~[classes/:na]得知错误发生在JwtUtils.generateToken(JwtUtils.java:31)工具类的第31行上。
26 return Jwts.builder()
27 .setHeaderParam("typ", "JWT")
28 .setSubject(username)
29 .setIssuedAt(nowDate)
30 .setExpiration(expireDate)// 1天過期
31 .signWith(SignatureAlgorithm.HS256, app_secret)
32 .compact();
说明在generateToken()发生了异常和SignatureAlgorithm.HS256有关。
经分析是引用的:
io.jsonwebtoken jjwt 0.9.1
jjwt 0.91 版对新的JDK版本不支持。有两种解决方案。
第一种方案:jdk 降到 11 以下。 第二种方案:jdk 版本保持高版本不变,在pom.xml 引入:io.jsonwebtoken jjwt 0.9.1 javax.xml.bind jaxb-api 2.4.0-b180830.0359 com.sun.xml.bind jaxb-impl 3.0.0-M4 com.sun.xml.bind jaxb-core 3.0.0-M4 javax.activation activation 1.1.1
至此问题解决。


![jjwt报错 ERROR 9856 --- [nio-8083-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] jjwt报错 ERROR 9856 --- [nio-8083-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]](http://www.mshxw.com/aiimages/31/698194.png)
