From 4e796a114106ea4675d76543075de24263efc37a Mon Sep 17 00:00:00 2001
From: Fancy <Fancy.fx@outlook.com>
Date: 星期四, 26 十二月 2024 14:23:52 +0800
Subject: [PATCH] edit mp login

---
 pms-parent/pms-web-wechat/pom.xml                                                  |    5 +
 pms-parent/pms-web-wechat/src/main/resources/application.yml                       |    5 +
 pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/AuthController.java |    2 
 pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java  |   26 +++++---
 pms-parent/pom.xml                                                                 |   11 +++
 pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java         |   96 ++++++++++++++++++++------------
 6 files changed, 97 insertions(+), 48 deletions(-)

diff --git a/pms-parent/pms-web-wechat/pom.xml b/pms-parent/pms-web-wechat/pom.xml
index 28d1b52..fcd1a22 100644
--- a/pms-parent/pms-web-wechat/pom.xml
+++ b/pms-parent/pms-web-wechat/pom.xml
@@ -201,6 +201,11 @@
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>${jjwt.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/AuthController.java b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/AuthController.java
index 8bb9448..c6da1dd 100644
--- a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/AuthController.java
+++ b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/AuthController.java
@@ -21,7 +21,7 @@
     public BaseResponse<Boolean> login(@RequestBody QueryVo vo) {
         try {
             JSONObject wxResponse = weChatService.login(vo.code);
-            if (wxResponse.containsKey("openid")) {
+            if (wxResponse.containsKey("token")) {
                 // 鎴愬姛鑾峰彇鍒颁簡鐢ㄦ埛鐨刼penid,session_key鍜屽叾浠栦俊鎭�
                 // 杩欓噷鍙互杩涜鏇村涓氬姟閫昏緫鎿嶄綔锛屼緥濡傜敓鎴愯嚜瀹氫箟token杩斿洖缁欏鎴风
                 return BaseResponseUtils.buildSuccess(wxResponse);
diff --git a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java
index f912145..983e4d9 100644
--- a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java
+++ b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java
@@ -3,12 +3,14 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.pmsGlobal.daoMp.MpOpenIdMapper;
 import com.dy.pmsGlobal.pojoMp.MpOpenId;
+import com.dy.pmsWechat.util.JwtUtil;
 import com.dy.pmsWechat.util.RestTemplateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -23,6 +25,12 @@
 
     @Value("${wechat.loginUrl}")
     private String loginUrl;
+
+    @Value("${wechat.jwt.secret-key}")
+    private String secretKey;
+
+    @Value("${wechat.jwt.ttl}")
+    private  long  ttlMillis;
 
     private final RestTemplateUtil restTemplateUtil;
     private MpOpenIdMapper mpOpenIdDao;
@@ -44,21 +52,21 @@
         queryParams.put("grant_type", "authorization_code");
         Map<String, String> headerParams = new HashMap<>();
         JSONObject  wxMpUser = restTemplateUtil.get(loginUrl, queryParams, headerParams);
+        String openId = wxMpUser.get("openid").toString();
         //鑾峰彇寰俊淇℃伅娣诲姞鍒版暟鎹簱  //鍏堟牴鎹畂penid鏌ヨ鐢ㄦ埛淇℃伅
-        MpOpenId userInfo = mpOpenIdDao.getInfoByOpenId(wxMpUser.get("openid").toString());
+        MpOpenId userInfo = mpOpenIdDao.getInfoByOpenId(openId);
         if(userInfo == null){ //鏁版嵁搴撴病鏈夋椂娣诲姞鍒版暟鎹簱涓�
             userInfo = new MpOpenId();
-            userInfo.setOpenId(wxMpUser.get("openid").toString());
+            userInfo.setOpenId(openId);
+            userInfo.setCreateTime(new Date());
             mpOpenIdDao.insert(userInfo);
         }
         //鎺堟潈瀹屾垚涔嬪悗锛岃烦杞埌鍏蜂綋鐨勫姛鑳介〉闈�
         //鐢熸垚token,鎸夌収涓�瀹氳鍒欑敓鎴愬瓧绗︿覆锛屽彲浠ュ寘鍚敤鎴蜂俊鎭�
-        String token= JwtHelper.createToken(userInfo.getId(),userInfo.getNickName());
-        //localhost:8080/weixin?a=1&token=222
-        if(returnUrl.indexOf("?")==-1){//鑻eturnUrl涓病鏈夊弬鏁�
-            return "redirect:"+returnUrl+"?token="+token;
-        }else{
-            return "redirect:"+returnUrl+"&token="+token;
-        }
+        //鐧婚檰controller涓敓鎴愶紝杩斿洖缁欏鎴风
+        Map<String, Object> claims = new HashMap<>();
+        claims.put("openId",openId);
+        String token = JwtUtil.createJwt(secretKey,ttlMillis,claims);
+        return new JSONObject().fluentPut("token",token);
     }
 }
\ No newline at end of file
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;
     }
 }
+
+
+
+
diff --git a/pms-parent/pms-web-wechat/src/main/resources/application.yml b/pms-parent/pms-web-wechat/src/main/resources/application.yml
index c515b63..42da78d 100644
--- a/pms-parent/pms-web-wechat/src/main/resources/application.yml
+++ b/pms-parent/pms-web-wechat/src/main/resources/application.yml
@@ -16,4 +16,7 @@
 wechat:
     appId: wx2e6beb0eca7c3672
     appSecret: b8f8ce34e13d3ba2eeaeba89068d7fbe
-    loginUrl: https://api.weixin.qq.com/sns/jscode2session
\ No newline at end of file
+    loginUrl: https://api.weixin.qq.com/sns/jscode2session
+    jwt:
+        secret-key: dayuzhuisu123456789abcdefghigklmnopqrstuvwxyz
+        ttl: 7200000
\ No newline at end of file
diff --git a/pms-parent/pom.xml b/pms-parent/pom.xml
index cf9ccf4..9cc7dbb 100644
--- a/pms-parent/pom.xml
+++ b/pms-parent/pom.xml
@@ -52,6 +52,8 @@
         <mapstruct.version>1.5.5.Final</mapstruct.version>
         <dubbo.version>3.2.11</dubbo.version>
         <hutool-all.version>5.8.22</hutool-all.version>
+        <jjwt.version>0.12.6</jjwt.version>
+
         <jdom2.version>2.0.6.1</jdom2.version>
         <quartz.version>2.1.7</quartz.version>
         <junit.version>4.13.2</junit.version>
@@ -365,7 +367,14 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
-
+            <!--JWT浠ょ墝-->
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt</artifactId>
+                <version>${jjwt.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
             <!-- 娴嬭瘯 -->
             <dependency>
                 <groupId>junit</groupId>

--
Gitblit v1.8.0