spring boot使用jsonwebtoken生成jwtToken返回null

背景:

父模块的pom.xml引入jwt的依赖,如下:

        <!-- jwt -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.1</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.1</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.1</version>
            <scope>runtime</scope>
        </dependency>

生成jwt token的代码如下:

        String secret = "asdfSFS34wfsdfsdfSDSD32dfsddDDerQSNCK34SOWEK5354fdgdf4";

        Key hmacKey = new SecretKeySpec(Base64.getDecoder().decode(secret),
                SignatureAlgorithm.HS256.getJcaName());

        Instant now = Instant.now();

        String jwtToken = Jwts.builder()
                .claim("name", "Jane Doe")
                .claim("email", "jane@example.com")
                .setSubject("jane")
                .setId(UUID.randomUUID().toString())
                .setIssuedAt(Date.from(now))
                .setExpiration(Date.from(now.plus(5l, ChronoUnit.MINUTES)))
                .signWith(hmacKey)
                .compact();
map.put("jwtToken", jwtToken);

log.info("正在生成jwtToken,now = {}, map", now, map); -- 这里一直打印不出jwtToken

 

问题出在log.info的阶段,在控制台一直打印不出jwtToken,使用postman请求接口,可以看到返回的jwtToken,debug调试也确实生成了jwtToken,为什么控制台打印的时候变成了空呢?

仔细检查了下代码,在标红色的地方,少写了一个{}占位符,这是一个很低级的错误,希望引以为戒!

 

需要补充的是:

log::debug虽然不会报错,也不要用,使用log::debug同样不会在控制台输出日志信息。

初始化log,最好使用下面的方法

private final Logger log = LoggerFactory.getLogger(Str.class);

注意,写的是 Str.class,而不是this.getClass()

这都是坑!

posted @ 2022-04-28 13:33  jamstack  阅读(336)  评论(0编辑  收藏  举报