最近要搭设一个新项目,这次在选用jwt的时候没有再直接用下面这个版本,
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
而jjwt-gson是一直有在更新的,因此博主这次想试试他,配置gson的话需要两个文件,不然会少包
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-gson</artifactId>
<version>0.11.0</version>
<!--<scope>runtime</scope>因为gson还要用,所以此处注释了-->
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>
其他按照网上教程走,走完发现控制台报错,一脸懵逼
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
//用上面这句用这句配完后会发现下面错误
io.jsonwebtoken.security.InvalidKeyException : the signing key's algorithm ' AES' does not equal a valid HmacSHA* algorithm name and cannot be used with HS256
网上清一色AES也没有报错的情况,只能自己找问题
通过找源码发现它其实比对的就是个“jcaName”,那么我们在声明密钥的时候用这个名字就好了
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//如果这里用的是HS256,那么下面就写HmacSHA256
SecretKey secretKey = SecretKeySpec(encodeDkey, 0, SECRET.length(), "HmacSHA256");
至此上一个问题解决,接下来又报了一个错
Unable to find an implementation for interface io.jsonwebtoken.io.Serializer
经过一番排查原来是用了gson版之后jjwt变笨了
手动告诉他就好了
Jwts.builder()
.serializeToJsonWith(new GsonSerializer<>(new Gson()))
//中间省略
.compact();
Jwts.parserBuilder()
.deserializeJsonWith(new GsonDeserializer<>(new Gson()))
//中间省略
.getBody();
至此就能用了
来源:oschina
链接:https://my.oschina.net/u/3054153/blog/3167691