diff --git a/RollCallServer/src/main/java/cc/aspark/utils/JwtUtil.java b/RollCallServer/src/main/java/cc/aspark/utils/JwtUtil.java new file mode 100644 index 0000000..5b30e9d --- /dev/null +++ b/RollCallServer/src/main/java/cc/aspark/utils/JwtUtil.java @@ -0,0 +1,54 @@ +package cc.aspark.utils; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtBuilder; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.Map; + +public class JwtUtil { + /** + * 生成jwt + * 使用Hs256算法, 私匙使用固定秘钥 + * + * @param secretKey jwt秘钥 + * @param ttlMillis jwt过期时间(毫秒) + * @param claims 设置的信息 + * @return + */ + + public static String createJWT(String secretKey, long ttlMillis, Map claims) { + // 指定签名的时候使用的签名算法,也就是header那部分 + SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; + + // 生成JWT的时间 + long expMillis = System.currentTimeMillis() + ttlMillis; + Date exp = new Date(expMillis); + + // 设置jwt的body + JwtBuilder builder = Jwts.builder() + .setClaims(claims) + .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8)) + .setExpiration(exp); + + return builder.compact(); + } + + /** + * Token解密 + * + * @param secretKey jwt秘钥 此秘钥一定要保留好在服务端, 不能暴露出去, 否则sign就可以被伪造, 如果对接多个客户端建议改造成多个 + * @param token 加密后的token + * @return + */ + public static Claims parseJWT(String secretKey, String token) { + // 得到DefaultJwtParser + return Jwts.parser() + .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8)) + .parseClaimsJws(token).getBody(); + } + +}