一、引入依赖
<!--JWT-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
二、JWT工具类
package com.party.util;
import com.alibaba.fastjson.util.IOUtils;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
/**
* author: Dragon Wu
* date: 2022-07-10 14:05
*/
public class JwtUtils {
private static final Long EXPIRE= (long) 24 * 60 * 60 * 1000;
private static final String JWT_ID= UUID.randomUUID().toString();
//私钥
private static final String KEY=getSecretKey();
/**
* 将Map对象放入JWT的payload里,生成JWT
* @param body 非敏感数据
* @return String JWT
*/
public static String createJWT(Map<String,Object> body){
JwtBuilder jwtBuilder= Jwts.builder()
.setId(JWT_ID)//JWT的唯一身份标识
.signWith(SignatureAlgorithm.HS256,KEY)
.setClaims(body)//放置body数据
.setIssuedAt(new Date())//签发时间
.setExpiration(new Date(System.currentTimeMillis()+EXPIRE));//过期时间
return jwtBuilder.compact();
}
/**
* 解析JWT
* @param jwt JWT字符串
* @return Map 返回Claims里的内容
*/
public static Map<String, Object> parseJwt(String jwt) throws Exception{
return Jwts.parser().setSigningKey(KEY).parseClaimsJws(jwt).getBody();
}
private static String getSecretKey(){
ClassPathResource classPathResource=new ClassPathResource("app_private_key.pem");
try {
InputStreamReader inputStreamReader = new InputStreamReader(classPathResource.getInputStream());
return IOUtils.readAll(inputStreamReader);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
调用createJWT生成JWT,调用parseJWT解析jwt。