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()
这都是坑!