引入依賴(lài)
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
獲取token
void test1() {
Map<String, Object> map = new HashMap<>();
Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND, 2000);
String token = JWT.create()
.withHeader(map) //header,可以不需要有默認(rèn)的
.withClaim("userId", 99)//payload,可以多個(gè)
.withClaim("username", "xpt")//payload
.withExpiresAt(instance.getTime())//指定令牌的過(guò)期時(shí)間
.sign(Algorithm.HMAC256("jsh#@JSH.z")) //簽名
;
System.out.println(token);
}
驗(yàn)證token
/**
* 令牌驗(yàn)證:根據(jù)令牌和簽名解析數(shù)據(jù)
* 常見(jiàn)異常:
* SignatureVerificationException 簽名不一致異常
* TokenExpiredException 令牌過(guò)期異常
* AlgorithmMismatchException 算法不匹配異常
* InvalidClaimException 失效的payload異常
*/
void test2() {
String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTg4MzQ5NjksInVzZXJJZCI6OTksInVzZXJuYW1lIjoieHB0In0.TWGVQZZP4t3iB2G3PIHIUt1NFWQ80LVBc1cYNWI42aM";
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("jsh#@JSH.z")).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);
System.out.println("用戶(hù)Id:" + decodedJWT.getClaim("userId").asInt());
System.out.println("用戶(hù)名:" + decodedJWT.getClaim("username"));
System.out.println("過(guò)期時(shí)間:" + decodedJWT.getExpiresAt());
}
封裝成工具類(lèi)
public class JWTUtils {
private static String TOKEN = "token!Q@W3e4r";
/**
* 生成token
* @param map //傳入payload
* @return 返回token
*/
public static String getToken(Map<String,Object> map){
JWTCreator.Builder builder = JWT.create();
map.forEach((k,v)->{
builder.withClaim(k,v);
});
Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND,7);
builder.withExpiresAt(instance.getTime());
return builder.sign(Algorithm.HMAC256(TOKEN));
}
/**
* 驗(yàn)證token
* @param token
* @return
*/
public static void verify(String token){
JWT.require(Algorithm.HMAC256(TOKEN)).build().verify(token); // 如果驗(yàn)證通過(guò),則不會(huì)把報(bào)錯(cuò),否則會(huì)報(bào)錯(cuò)
}
/**
* 獲取token中payload
* @param token
* @return
*/
public static DecodedJWT getToken(String token){
return JWT.require(Algorithm.HMAC256(TOKEN)).build().verify(token);
}
}