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