使用Jwt令牌需要在pom.xml文件中添加依赖
<!-- JWT令牌-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
构建Jwt令牌 (注意:算法签名signKey的长度要大于4个字符,否则后面的过滤器获取请求头会是null)
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class SpringbootWedDeom1ApplicationTests {
@Test
void contextLoads() {
}
@Test
public void testGenJwt(){
Map<String, Object> claims = new HashMap<>();
claims.put("id",1);
claims.put("name","tom ");
//构建JWT令牌
String jwt = Jwts.builder()
//指定数字签名的算法
.signWith(SignatureAlgorithm.HS256, "BigLuna")
//Jwt令牌存储的数据(载荷)
.setClaims(claims)
//设置Jwt有效期
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))
//返回字符串形式的令牌
.compact();
System.out.println(jwt);
}
}
使用JDK17时报错DatatypeConverter,则需要添加jaxb-api的依赖。
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.1</version>
</dependency>
解析(校验)JWT令牌(注意:解析的Jwt令牌必须与对应生成的密钥一致,如果报错,则为被篡改、过期、密钥签名不正确)
/**
* 解析JWT令牌
*/
@Test
public void testParseJwt(){
Claims claims = Jwts.parser()
.setSigningKey("BigLuan")
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTcxNTgzMTY3MX0.E41FYHUb9QqLGl6xCl9fvHZ4-ebAVlYFUN7vHUnadBI")
.getBody();
System.out.println(claims);
}