Pārlūkot izejas kodu

重新优化redis token缓存

jk-GitHub-coder 4 gadi atpakaļ
vecāks
revīzija
4e51b9c57b

+ 5 - 9
YijiaRestful/src/main/java/com/platform/yijia/controller/AppUserInfoController.java

@@ -41,6 +41,8 @@ public class AppUserInfoController {
     private CustomerPointsService customerPointsService;
     @Resource
     private RedisCacheUtil redisCacheUtil;
+    @Resource
+    private WeiXinUserUtil weiXinUserUtil;
 
 //    String appId = "wxe1135cd390b38a54";        //微信小程序appID
 //    String appSecret = "0532c7d9ae876c4ad636df0b1e3b9ddb";      //微信小程序密钥
@@ -63,7 +65,7 @@ public class AppUserInfoController {
             appSecret = map.get("appSecret");      //微信小程序密钥
         }
         //获取session_key 和 openid
-        return WeiXinUserUtil.getUserSessionKeyAndOpenID(appId, appSecret, code);
+        return weiXinUserUtil.getUserSessionKeyAndOpenID(appId, appSecret, code);
     }
 
     /*
@@ -96,14 +98,8 @@ public class AppUserInfoController {
             if(m !=null && m.containsKey("gzhAppId") && m.containsKey("gzhAppSecret")){
                 gzhAppId = m.get("gzhAppId");
                 gzhAppSecret = m.get("gzhAppSecret");
-                if(!redisCacheUtil.hasKey(gzhAppId)){
-                    accessToken = WeiXinUserUtil.getToken(gzhAppId, gzhAppSecret).getAccessToken();
-                    redisCacheUtil.setCacheObject(gzhAppId, accessToken);
-                    redisCacheUtil.expire(gzhAppId, 7200);
-                }else {
-                    accessToken  = redisCacheUtil.getCacheObject(gzhAppId);
-                }
-                net.sf.json.JSONObject unionIdInfo = WeiXinUserUtil.getUnionIdInfo(accessToken, openId);
+                accessToken  = weiXinUserUtil.getTokenByRedisCache(gzhAppId, gzhAppSecret);
+                net.sf.json.JSONObject unionIdInfo = weiXinUserUtil.getUnionIdInfo(accessToken, openId);
                 if(unionIdInfo !=null && unionIdInfo.containsKey("nickname")){
                     map.put("nickName", unionIdInfo.get("nickname").toString());
                 }

+ 34 - 3
YijiaRestful/src/main/java/com/platform/yijia/utils/weixinapp/WeiXinUserUtil.java

@@ -1,13 +1,18 @@
 package com.platform.yijia.utils.weixinapp;
 
 
+import com.platform.yijia.utils.redis.RedisCacheUtil;
 import net.sf.json.JSONException;
 import net.sf.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.data.redis.cache.RedisCache;
+import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * <Title>工具类: WeiXinUtil</Title>
@@ -15,6 +20,7 @@ import java.util.Map;
  * @author JK
  * @date 2019年11月10日
  */
+@Component
 public class WeiXinUserUtil {
 
     //微信小程序获取用户信息 https://api.weixin.qq.com/sns/userinfo
@@ -32,6 +38,9 @@ public class WeiXinUserUtil {
     //日志
     private static final Logger logger = LoggerFactory.getLogger(WeiXinUserUtil.class);
 
+    @Resource
+    private RedisCacheUtil redisCacheUtil;
+
 
     /*
      * 获取UnionId信息
@@ -39,7 +48,7 @@ public class WeiXinUserUtil {
      * @param openId
      * @return
      */
-    public static JSONObject getUnionIdInfo(String accessToken, String openId){
+    public  JSONObject getUnionIdInfo(String accessToken, String openId){
         String requestUrl = unionId_Url.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);
         JSONObject jsonObject = HttpRequestUtil.getHttpsRequestData(requestUrl, "GET", null);
         logger.info("获取UnionId信息:" + jsonObject.toString());
@@ -55,7 +64,7 @@ public class WeiXinUserUtil {
      * @param code
      * @return
      */
-    public static Map<String, Object> getUserSessionKeyAndOpenID(String appId, String appSecret, String code){
+    public  Map<String, Object> getUserSessionKeyAndOpenID(String appId, String appSecret, String code){
         String requestUrl = openID_url.replace("APPID", appId).replace("APPSECRET", appSecret).replace("CODE", code);
         Map<String, Object> resultMap = new HashMap<>();
         //发起GET请求
@@ -75,7 +84,7 @@ public class WeiXinUserUtil {
      * @param appSecret     //密钥
      * @return
      */
-    public static Token getToken(String appId, String appSecret){
+    public  Token getToken(String appId, String appSecret){
         Token token = null;
         String requestUrl = token_url.replace("APPID", appId).replace("APPSECRET", appSecret);
         //发起GET请求获取凭证
@@ -92,4 +101,26 @@ public class WeiXinUserUtil {
         }
         return token;
     }
+
+    /*
+     * 从redis获取token
+     * @param appId
+     * @param appSecret
+     * @return
+     */
+    public String getTokenByRedisCache(String appId, String appSecret){
+        logger.info("appId参数: "+ appId+" ;appSecret参数: " +appSecret);
+        String tokenCache ="";
+        if(!redisCacheUtil.hasKey(appId)){
+            String token = this.getToken(appId, appSecret).getAccessToken();
+            redisCacheUtil.setCacheObject(appId, token);
+            redisCacheUtil.expire(appId, 7200, TimeUnit.SECONDS);
+            logger.info("Redis缓存中token信息: " + tokenCache);
+        }else {
+            tokenCache = redisCacheUtil.getCacheObject(appId);
+        }
+        return tokenCache;
+    }
+
+
 }

+ 3 - 9
YijiaRestful/src/main/java/com/platform/yijia/utils/weixinapp/WxPushUtil.java

@@ -26,6 +26,8 @@ import java.util.concurrent.TimeUnit;
 public class WxPushUtil {
     @Resource
     private RedisCacheUtil redisCacheUtil;
+    @Resource
+    private WeiXinUserUtil weiXinUserUtil;
 
     private static Logger logger =(Logger) LoggerFactory.getLogger(WxPushUtil.class);
 
@@ -44,15 +46,7 @@ public class WxPushUtil {
         wxMpInMemoryConfigStorage.setAppId(appId);
         wxMpInMemoryConfigStorage.setSecret(appSecret);
         //公众号token缓存处理
-        String tokenCache = "";
-        if(!redisCacheUtil.hasKey(appId)){
-            tokenCache = WeiXinUserUtil.getToken(appId, appSecret).getAccessToken();
-            redisCacheUtil.setCacheObject(appId, tokenCache);
-            redisCacheUtil.expire(appId, 7200, TimeUnit.SECONDS);
-            logger.info("Redis缓存中token信息: " + tokenCache);
-        }else {
-            tokenCache = redisCacheUtil.getCacheObject(appId);
-        }
+        String tokenCache = weiXinUserUtil.getTokenByRedisCache(appId, appSecret);
         logger.info("token信息: " + tokenCache);
         wxMpInMemoryConfigStorage.setAccessToken(tokenCache);