记录一次jjwt-gson的配置问题,希望能帮到更多的人

岁酱吖の 提交于 2020-02-25 17:11:33

最近要搭设一个新项目,这次在选用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();

至此就能用了

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!