首先导入jwt的依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.0.0</version>
</dependency>
创建工具类对象JwtUtil
package com.lbmb.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.Map;
/**
* @author 林文塨
* @date 2022-07-08 13:23
* description
*/
public class JwtUtil {
/**
* 自定义签名
*/
private static final String SING = "^TJ@NGKOPSFM*Y@QG";
public static String getToken(Map<String,String> map) {
/*
* 传入自定义的负荷字段,返回一个token
* @author 林文塨
* @date 2022/7/8 13:26
* @param [map] 传入参数为自定义负荷字段
* @return java.lang.String
*/
//设置token过期时间,默认为3天
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,3);
JWTCreator.Builder builder = JWT.create();
//自定义负荷字段
map.forEach(builder::withClaim);
return builder.withExpiresAt(calendar.getTime())
.sign(Algorithm.HMAC256(SING));
}
public static DecodedJWT verify(String token) {
/*
* 验证token,返回DecodedJWT对象
* @author 林文塨
* @date 2022/7/17 9:53
* @param [token]
* @return com.auth0.jwt.interfaces.DecodedJWT
*/
return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
}
}
写个测试类
package com.lbmb;
import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.lbmb.utils.JwtUtil;
import java.util.HashMap;
import java.util.Map;
/**
* @author 林文塨
* @date 2022-07-17 9:57
* description
*/
public class JwtUtilTest {
public static void main(String[] args) {
//自定义负荷字段
Map<String, String> map = new HashMap<>();
map.put("userName", "张三");
//获得token
String token = JwtUtil.getToken(map);
System.out.println(token);
try {
//验证token
DecodedJWT verify = JwtUtil.verify(token);
System.out.println("验证成功");
System.out.println(verify.getClaim("userName").asString());
} catch (SignatureVerificationException e) {
System.out.println("无效token");
} catch (TokenExpiredException e) {
System.out.println("token过期");
} catch (AlgorithmMismatchException e) {
System.out.println("token算法不一致");
}
}
}