在pom.xml文件引入jwt的Maven依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
生成jwt令牌
// 测试生成jwt
@Test
public void getJWT() {
HashMap<String, Object> claims = new HashMap<>(); // 自定义数据 键值对集合
claims.put("id", 1);
claims.put("username", "admin");
String jwt = Jwts.builder()
.signWith(SignatureAlgorithm.HS256, "hello")// 密钥 使用HS256算法,hello为自定义密钥
.setClaims(claims)// 存放自定义数据
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)) // 设置过期时间 获取当前时间并加1小时 3600 *1000是一小时的毫秒
.compact();// 通过compact()方法生成jwt令牌
System.out.println(jwt);
}
解析jwt令牌
// 解析jwt令牌
@Test
public void parseJWT() {
String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNzI2MDY1NjQ3LCJ1c2VybmFtZSI6ImFkbWluIn0.Wj6nxUS_PTv14DQjU4ugndFAgWxwt1pSwF5TIenzqOI"; //生成的jwt令牌
Claims claims = Jwts.parser()
.setSigningKey("hello")// 设置密钥对应的就是自定义的密钥
.parseClaimsJws(token)// 解析token
.getBody();// 获取自定义数据 就是生成令牌时存的HashMap的键值对集合
System.out.println(claims);
}
可以将生成JWT和解析JWT封装一个工具类JwtUtils中
package com.itheima.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
public class JwtUtils {
private static String signKey = "hello";
private static Long expire = 43200000L; // 设置过期时间12个小时
// 生成JWT令牌
public static String createJWT(Map<String, Object> claims) {
String token = Jwts.builder()
.signWith(SignatureAlgorithm.HS256, signKey)
.setClaims(claims)
.setExpiration(new Date(System.currentTimeMillis() + expire))
.compact();
return token;
}
// 解析JWT令牌
public static Claims parseJWT(String token) {
Claims claims = Jwts.parser()
.setSigningKey(signKey)
.parseClaimsJws(token)
.getBody();
return claims;
}
}