import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class TestJwt {
/**
* 生成token信息的方法
*
* @return
*/
public static String encodeToken() {
//头部信息
// Map<String, String> map = Map.of("alg", "HS256", "typ", "jwt");
HashMap<String, Object> header = new HashMap<>();
header.put("alg", "HS256");
header.put("typ", "jwt");
//载荷信息
Date isLoadTime = new Date();
//失效时间
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, 2);
//生成token
String token = JWT.create()
.withHeader(header)//头部信息
.withClaim("username", "yl")//自定义载荷
.withClaim("address", "北京")
.withSubject("test")//官方载荷
.withIssuedAt(isLoadTime)//官方载荷 指签发时间
.withExpiresAt(calendar.getTime())//官方载荷 指失效时间
.sign(Algorithm.HMAC256("yl-20"));//密钥
return token;
}
/**
* 对token方法进行校验,并取得载荷方法
*
* @param token
* @return
*/
public static Map<String, Claim> decodeToken(String token) {
//token校验器
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("yl-20")).build();
//对token进行校验
DecodedJWT decodeJWT = jwtVerifier.verify(token);
//取得载荷信息
Map<String, Claim> claims = decodeJWT.getClaims();
return claims;
}
public static void main(String[] args) {
String token = encodeToken();
//计时
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(i + 1);
}
//TimeUnit.SECONDS.sleep(3);
//校验取得载荷
Map<String, Claim> claimMap = decodeToken(token);
for (Map.Entry<String, Claim> entry : claimMap.entrySet()) {
String key = entry.getKey();
Claim value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value.asString());
}
}
}
Java-JWT生成Token信息工具类
于 2023-10-12 11:45:50 首次发布