package org.oak;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.*;
public class JwtUtil {
private static String jwtKey = "zg19491001dfdlhksl";
private static Integer expiredTimeIn = 24 * 60 * 60;
public void setJwtKey(String jwtKey) {
JwtUtil.jwtKey = jwtKey;
}
public void setExpiredTimeIn(Integer expiredTimeIn) {
JwtUtil.expiredTimeIn = expiredTimeIn;
}
public static String makeToken(Long uid) {
return JwtUtil.getToken(uid);
}
public static String makeToken(Map<String, String> map) {
return JwtUtil.getToken(map);
}
private static String getToken(Long uid) {
Algorithm algorithm = Algorithm.HMAC256(JwtUtil.jwtKey);
Map<String, Date> dateMap = JwtUtil.calculateExpiredIssues();
JWTCreator.Builder builder = JWT.create();
return JWT.create()
.withClaim("uid", uid)
.withExpiresAt(dateMap.get("expiredTime"))
.withIssuedAt(dateMap.get("now"))
.sign(algorithm);
}
private static String getToken(Map<String, String> map) {
Algorithm algorithm = Algorithm.HMAC256(JwtUtil.jwtKey);
Map<String, Date> dateMap = JwtUtil.calculateExpiredIssues();
JWTCreator.Builder builder = JWT.create();
map.forEach((k, v) -> {
builder.withClaim(k, v);
});
return builder.withExpiresAt(dateMap.get("expiredTime"))
.withIssuedAt(dateMap.get("now"))
.sign(algorithm);
}
public static Optional<Map<String, Claim>> getClaims(String token) {
DecodedJWT decodedJWT;
Algorithm algorithm = Algorithm.HMAC256(JwtUtil.jwtKey);
JWTVerifier jwtVerifier = JWT.require(algorithm).build();
try {
decodedJWT = jwtVerifier.verify(token);
} catch (JWTVerificationException e) {
return Optional.empty();
}
return Optional.of(decodedJWT.getClaims());
}
public static boolean verifyToken(String token) {
try {
Algorithm algorithm = Algorithm.HMAC256(JwtUtil.jwtKey);
JWTVerifier jwtVerifier = JWT.require(algorithm).build();
jwtVerifier.verify(token);
} catch (JWTVerificationException e) {
return false;
}
return true;
}
private static Map<String, Date> calculateExpiredIssues() {
Map<String, Date> map = new HashMap<>();
Calendar calendar = Calendar.getInstance();
Date now = calendar.getTime();
calendar.add(Calendar.SECOND, JwtUtil.expiredTimeIn);
map.put("now", now);
map.put("expiredTime", calendar.getTime());
return map;
}
public static void main(String[] args) {
String token = makeToken(1L);
System.out.println(token);
System.out.println(verifyToken(token));
Optional<Map<String, Claim>> claims = getClaims(token);
Map<String, Claim> stringClaimMap = claims.get();
System.out.println(stringClaimMap);
Map<String, String> paramMap = new HashMap<>();
paramMap.put("uid", "1");
paramMap.put("name", "zr");
paramMap.put("age", "zr");
String makeToken = makeToken(paramMap);
verifyToken(makeToken);
Optional<Map<String, Claim>> claims1 = getClaims(makeToken);
Map<String, Claim> stringClaimMap1 = claims1.get();
System.out.println(stringClaimMap1);
}
}