spring boot使用jsonwebtoken生成jwtToken返回null


背景:

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

        
        
            io.jsonwebtoken
            jjwt-api
            0.11.1
        
        
            io.jsonwebtoken
            jjwt-impl
            0.11.1
            runtime
        
        
            io.jsonwebtoken
            jjwt-jackson
            0.11.1
            runtime
        

生成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()

这都是坑!