From 1172bde3b4613ac039b13e19d30ded5b92e3d65f Mon Sep 17 00:00:00 2001
From: Fancy <Fancy.fx@outlook.com>
Date: 星期五, 27 十二月 2024 11:26:30 +0800
Subject: [PATCH] parse JWT

---
 pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java |   96 ++++++++++++++++++++++++++++++------------------
 1 files changed, 60 insertions(+), 36 deletions(-)

diff --git a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java
index 9d74256..b12f734 100644
--- a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java
+++ b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java
@@ -1,46 +1,70 @@
 package com.dy.pmsWechat.util;
 
-import cn.hutool.jwt.Claims;
-import com.alibaba.druid.util.StringUtils;
+import io.jsonwebtoken.*;
+import io.jsonwebtoken.security.Keys;
+
+import javax.crypto.SecretKey;
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.Map;
+
 
 public class JwtUtil {
-    //token瀛楃涓叉湁鏁堟椂闂�
-    private static long tokenExpiration = 24*60*60*1000;
-    //鍔犲瘑缂栫爜绉橀挜
-    private static String tokenSignKey = "123456";
 
-    //鏍规嵁userid  鍜�  username 鐢熸垚token瀛楃涓�
-    public static String createToken(Long userId, String userName) {
-        String token = Jwts.builder()
-                //璁剧疆token鍒嗙被
-                .setSubject("GGKT-USER")
-                //token瀛楃涓叉湁鏁堟椂闀�
-                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
-                //绉佹湁閮ㄥ垎锛堢敤鎴蜂俊鎭級
-                .claim("userId", userId)
-                .claim("userName", userName)
-                //鏍规嵁绉橀挜浣跨敤鍔犲瘑缂栫爜鏂瑰紡杩涜鍔犲瘑锛屽瀛楃涓插帇缂�
-                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
-                .compressWith(CompressionCodecs.GZIP)
-                .compact();
-        return token;
+    /**
+     * 鐢熸垚jwt
+     * 浣跨敤Hs256绠楁硶, 绉佸寵浣跨敤鍥哄畾绉橀挜
+     *
+     * @param secretKey jwt绉橀挜
+     * @param ttlMillis jwt杩囨湡鏃堕棿(姣)
+     * @param claims    璁剧疆鐨勪俊鎭�
+     * @return
+     */
+    public static String createJwt(String secretKey, long ttlMillis, Map<String, Object> claims) {
+        // 鎸囧畾绛惧悕鐨勬椂鍊欎娇鐢ㄧ殑绛惧悕绠楁硶锛屼篃灏辨槸header閭i儴鍒�
+      // SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+
+        // 鐢熸垚JWT鐨勬椂闂�
+        long expMillis = System.currentTimeMillis() + ttlMillis;
+        Date exp = new Date(expMillis);
+
+        //鐢熸垚 HMAC 瀵嗛挜锛屾牴鎹彁渚涚殑瀛楄妭鏁扮粍闀垮害閫夋嫨閫傚綋鐨� HMAC 绠楁硶锛屽苟杩斿洖鐩稿簲鐨� SecretKey 瀵硅薄銆�
+        SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8));
+
+        // 璁剧疆jwt鐨刡ody
+        JwtBuilder builder = Jwts.builder()
+                // 璁剧疆绛惧悕浣跨敤鐨勭鍚嶇畻娉曞拰绛惧悕浣跨敤鐨勭閽�
+                .signWith(key)
+                // 濡傛灉鏈夌鏈夊0鏄庯紝涓�瀹氳鍏堣缃繖涓嚜宸卞垱寤虹殑绉佹湁鐨勫0鏄庯紝杩欎釜鏄粰builder鐨刢laim璧嬪�硷紝涓�鏃﹀啓鍦ㄦ爣鍑嗙殑澹版槑璧嬪�间箣鍚庯紝灏辨槸瑕嗙洊浜嗛偅浜涙爣鍑嗙殑澹版槑鐨�
+                .claims(claims)
+                // 璁剧疆杩囨湡鏃堕棿
+                .expiration(exp);
+        return builder.compact();
     }
 
-    //浠巘oken瀛楃涓茶幏鍙杣serid
-    public static Long getUserId(String token) {
-        if(StringUtils.isEmpty(token)) return null;
-        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
-        Claims claims = claimsJws.getBody();
-        Integer userId = (Integer)claims.get("userId");
-        return userId.longValue();
-    }
+    /**
+     * Token瑙e瘑
+     *
+     * @param secretKey jwt绉橀挜 姝ょ閽ヤ竴瀹氳淇濈暀濂藉湪鏈嶅姟绔�, 涓嶈兘鏆撮湶鍑哄幓, 鍚﹀垯sign灏卞彲浠ヨ浼��, 濡傛灉瀵规帴澶氫釜瀹㈡埛绔缓璁敼閫犳垚澶氫釜
+     * @param token     鍔犲瘑鍚庣殑token
+     * @return
+     */
+    public static Claims parseJWT(String secretKey, String token) {
 
-    //浠巘oken瀛楃涓茶幏鍙杇etUserName
-    public static String getUserName(String token) {
-        if(StringUtils.isEmpty(token)) return "";
-        Jws<Claims> claimsJws
-                = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
-        Claims claims = claimsJws.getBody();
-        return (String)claims.get("userName");
+        //鐢熸垚 HMAC 瀵嗛挜锛屾牴鎹彁渚涚殑瀛楄妭鏁扮粍闀垮害閫夋嫨閫傚綋鐨� HMAC 绠楁硶锛屽苟杩斿洖鐩稿簲鐨� SecretKey 瀵硅薄銆�
+        SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8));
+
+        // 寰楀埌DefaultJwtParser
+        JwtParser jwtParser = Jwts.parser()
+                // 璁剧疆绛惧悕鐨勭閽�
+                .verifyWith(key)
+                .build();
+        Jws<Claims> jws = jwtParser.parseSignedClaims(token);
+        Claims claims = jws.getPayload();
+        return claims;
     }
 }
+
+
+
+

--
Gitblit v1.8.0