Browse Source

平台和mq标签修改

wangliang 5 năm trước cách đây
mục cha
commit
4d3b827e7f

+ 5 - 2
themis-backend/src/main/resources/application.properties

@@ -147,8 +147,11 @@ mq.config.sessionConsumerGroup=${mq.config.server}-group-session
 mq.config.sessionTopicWebTag=web
 mq.config.sessionConsumerWebGroup=${mq.config.sessionConsumerGroup}-${mq.config.sessionTopicWebTag}
 
-mq.config.sessionTopicWxappTag=wxapp
-mq.config.sessionConsumerWxappGroup=${mq.config.sessionConsumerGroup}-${mq.config.sessionTopicWxappTag}
+mq.config.sessionTopicWxappVideoTag=wxapp_video
+mq.config.sessionConsumerWxappVideoGroup=${mq.config.sessionConsumerGroup}-${mq.config.sessionTopicWxappVideoTag}
+
+mq.config.sessionTopicWxappAnswerTag=wxapp_answer
+mq.config.sessionConsumerWxappAnswerGroup=${mq.config.sessionConsumerGroup}-${mq.config.sessionTopicWxappAnswerTag}
 
 mq.config.sessionTopicPcTag=pc
 mq.config.sessionConsumerPcGroup=${mq.config.sessionConsumerGroup}-${mq.config.sessionTopicPcTag}

+ 6 - 3
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -48,7 +48,8 @@ public class SystemConstant {
      */
     public static final int WEB_SESSION_EXPIRE = 1;//过期时间1天
     public static final int PC_SESSION_EXPIRE = 1;//过期时间1天
-    public static final int WXAPP_SESSION_EXPIRE = 30;//过期时间30天
+    public static final int WXAPP_VIDEO_SESSION_EXPIRE = 30;//过期时间30天
+    public static final int WXAPP_ANSWER_SESSION_EXPIRE = 30;//过期时间30天
     /**
      * redis过期时间
      */
@@ -91,8 +92,10 @@ public class SystemConstant {
         calendar.setTime(now);
         if (Objects.equals(platform.getSource(), Source.web.name())) {
             calendar.add(Calendar.DAY_OF_YEAR, SystemConstant.WEB_SESSION_EXPIRE);
-        } else if (Objects.equals(platform.getSource(), Source.wxapp.name())) {
-            calendar.add(Calendar.DAY_OF_YEAR, SystemConstant.WXAPP_SESSION_EXPIRE);
+        } else if (Objects.equals(platform.getSource(), Source.wxapp_answer.name())) {
+            calendar.add(Calendar.DAY_OF_YEAR, SystemConstant.WXAPP_ANSWER_SESSION_EXPIRE);
+        } else if (Objects.equals(platform.getSource(), Source.wxapp_video.name())) {
+            calendar.add(Calendar.DAY_OF_YEAR, SystemConstant.WXAPP_VIDEO_SESSION_EXPIRE);
         } else if (Objects.equals(platform.getSource(), Source.pc.name())) {
             calendar.add(Calendar.DAY_OF_YEAR, SystemConstant.PC_SESSION_EXPIRE);
         }

+ 36 - 17
themis-business/src/main/java/com/qmth/themis/business/domain/MqConfigDomain.java

@@ -15,10 +15,12 @@ public class MqConfigDomain {
     //    private String sessionConsumerGroupDlq;
 //    private String sessionTopicDlq;
     private String sessionTopicWebTag;
-    private String sessionTopicWxappTag;
+    private String sessionTopicWxappVideoTag;
+    private String sessionTopicWxappAnswerTag;
     private String sessionTopicPcTag;
     private String sessionConsumerWebGroup;
-    private String sessionConsumerWxappGroup;
+    private String sessionConsumerWxappVideoGroup;
+    private String sessionConsumerWxappAnswerGroup;
     private String sessionConsumerPcGroup;
 
     private String userLogTopic;
@@ -28,6 +30,38 @@ public class MqConfigDomain {
     private String userLogTopicStudentTag;
     private String userLogConsumerStudentGroup;
 
+    public String getSessionTopicWxappVideoTag() {
+        return sessionTopicWxappVideoTag;
+    }
+
+    public void setSessionTopicWxappVideoTag(String sessionTopicWxappVideoTag) {
+        this.sessionTopicWxappVideoTag = sessionTopicWxappVideoTag;
+    }
+
+    public String getSessionTopicWxappAnswerTag() {
+        return sessionTopicWxappAnswerTag;
+    }
+
+    public void setSessionTopicWxappAnswerTag(String sessionTopicWxappAnswerTag) {
+        this.sessionTopicWxappAnswerTag = sessionTopicWxappAnswerTag;
+    }
+
+    public String getSessionConsumerWxappVideoGroup() {
+        return sessionConsumerWxappVideoGroup;
+    }
+
+    public void setSessionConsumerWxappVideoGroup(String sessionConsumerWxappVideoGroup) {
+        this.sessionConsumerWxappVideoGroup = sessionConsumerWxappVideoGroup;
+    }
+
+    public String getSessionConsumerWxappAnswerGroup() {
+        return sessionConsumerWxappAnswerGroup;
+    }
+
+    public void setSessionConsumerWxappAnswerGroup(String sessionConsumerWxappAnswerGroup) {
+        this.sessionConsumerWxappAnswerGroup = sessionConsumerWxappAnswerGroup;
+    }
+
     public String getSessionTopic() {
         return sessionTopic;
     }
@@ -68,13 +102,6 @@ public class MqConfigDomain {
         this.sessionTopicWebTag = sessionTopicWebTag;
     }
 
-    public String getSessionTopicWxappTag() {
-        return sessionTopicWxappTag;
-    }
-
-    public void setSessionTopicWxappTag(String sessionTopicWxappTag) {
-        this.sessionTopicWxappTag = sessionTopicWxappTag;
-    }
 
     public String getSessionTopicPcTag() {
         return sessionTopicPcTag;
@@ -92,14 +119,6 @@ public class MqConfigDomain {
         this.sessionConsumerWebGroup = sessionConsumerWebGroup;
     }
 
-    public String getSessionConsumerWxappGroup() {
-        return sessionConsumerWxappGroup;
-    }
-
-    public void setSessionConsumerWxappGroup(String sessionConsumerWxappGroup) {
-        this.sessionConsumerWxappGroup = sessionConsumerWxappGroup;
-    }
-
     public String getSessionConsumerPcGroup() {
         return sessionConsumerPcGroup;
     }

+ 20 - 3
themis-business/src/main/java/com/qmth/themis/business/listener/RocketSessionConsumer.java

@@ -161,10 +161,27 @@ public class RocketSessionConsumer implements
         }
     }
 
-    //
     @Service
-    @RocketMQMessageListener(consumerGroup = "${mq.config.sessionConsumerWxappGroup}", topic = "${mq.config.sessionTopic}", selectorType = SelectorType.TAG, selectorExpression = "${mq.config.sessionTopicWxappTag}")
-    public class sessionConsumerWxapp implements RocketMQListener<Message>, RocketMQPushConsumerLifecycleListener {
+    @RocketMQMessageListener(consumerGroup = "${mq.config.sessionConsumerWxappVideoGroup}", topic = "${mq.config.sessionTopic}", selectorType = SelectorType.TAG, selectorExpression = "${mq.config.sessionTopicWxappVideoTag}")
+    public class sessionConsumerWxappVideo implements RocketMQListener<Message>, RocketMQPushConsumerLifecycleListener {
+
+        @Override
+        public void onMessage(Message message) {
+            //实现RocketMQPushConsumerLifecycleListener监听器之后,此方法不调用
+        }
+
+        @Override
+        public void prepareStart(DefaultMQPushConsumer defaultMQPushConsumer) {
+            defaultMQPushConsumer.setConsumeMessageBatchMaxSize(SystemConstant.CONSUME_MESSAGE_BATCH_MAX_SIZE);//每次拉取10条
+            defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
+            defaultMQPushConsumer.setMaxReconsumeTimes(SystemConstant.MAXRECONSUMETIMES);//最大重试次数
+            defaultMQPushConsumer.registerMessageListener(RocketSessionConsumer.this::consumeMessage);
+        }
+    }
+
+    @Service
+    @RocketMQMessageListener(consumerGroup = "${mq.config.sessionConsumerWxappAnswerGroup}", topic = "${mq.config.sessionTopic}", selectorType = SelectorType.TAG, selectorExpression = "${mq.config.sessionTopicWxappAnswerTag}")
+    public class sessionConsumerWxappAnswer implements RocketMQListener<Message>, RocketMQPushConsumerLifecycleListener {
 
         @Override
         public void onMessage(Message message) {

+ 2 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TBSessionServiceImpl.java

@@ -41,6 +41,8 @@ public class TBSessionServiceImpl extends ServiceImpl<TBSessionMapper, TBSession
             long dbtimestamp = tbSessionDb.getUpdateTime().getTime();
             if (mqTimestamp > dbtimestamp) {
                 log.info("mq时间大于db时间,可以更新");
+                tbSessionDb.setSource(tbSession.getSource());
+                tbSessionDb.setPlatform(tbSession.getPlatform());
                 tbSessionDb.setDeviceId(tbSession.getDeviceId());
                 tbSessionDb.setAccessToken(tbSession.getAccessToken());
                 tbSessionDb.setLastAccessIp(tbSession.getLastAccessIp());

+ 1 - 1
themis-business/src/main/java/com/qmth/themis/business/util/SessionUtil.java

@@ -23,7 +23,7 @@ public class SessionUtil {
         StringJoiner stringJoiner = new StringJoiner("");
         if (Objects.nonNull(o) && o.length > 0) {
             for (int i = 0; i < o.length; i++) {
-                stringJoiner.add(String.valueOf(o[i])).add("_");
+                stringJoiner.add(String.valueOf(o[i])).add("-");
             }
         }
         return stringJoiner.toString().substring(0, stringJoiner.length() - 1);

+ 1 - 1
themis-common/src/main/java/com/qmth/themis/common/enums/Platform.java

@@ -2,7 +2,7 @@ package com.qmth.themis.common.enums;
 
 public enum Platform {
 
-    web("web"), wap("web"), wxapp("wxapp"), win("pc");
+    web("web"), wap("web"), wxapp_video("wxapp_video"), wxapp_answer("wxapp_answer"), win("pc");
 
     public static Platform findByName(String name) {
         if (name == null) {

+ 1 - 1
themis-common/src/main/java/com/qmth/themis/common/enums/Source.java

@@ -2,7 +2,7 @@ package com.qmth.themis.common.enums;
 
 public enum Source {
 
-    web, wxapp, pc;
+    web, wxapp_video, wxapp_answer, pc;
 
     public static Source findByName(String name) {
         if (name == null) {

+ 96 - 36
themis-common/src/main/java/com/qmth/themis/common/signature/SignatureInfo.java

@@ -104,6 +104,19 @@ public class SignatureInfo {
         return Base64Utils.encode(ShaUtils.sha1(StringUtils.join(values, PARAM_JOINER)));
     }
 
+//    /**
+//     * 基于解析好的签名对象,使用传入的保密信息进行签名内容验证
+//     *
+//     * @param secret
+//     * @return
+//     */
+//    public boolean validate(String secret) {
+//        if (method != null && uri != null && timestamp >= 0 && secret != null && ciphertext != null) {
+//            return encrypt(method, uri, String.valueOf(timestamp), secret).equals(ciphertext);
+//        }
+//        return false;
+//    }
+
     /**
      * 基于解析好的签名对象,使用传入的保密信息进行签名内容验证
      *
@@ -111,42 +124,89 @@ public class SignatureInfo {
      * @return
      */
     public boolean validate(String secret) {
-        if (method != null && uri != null && timestamp >= 0 && secret != null && ciphertext != null) {
-            return encrypt(method, uri, String.valueOf(timestamp), secret).equals(ciphertext);
+        if (secret != null && ciphertext != null) {
+            return encrypt(secret).equals(ciphertext);
         }
         return false;
     }
 
+//    /**
+//     * 根据标准参数构造最终的签名字符串
+//     *
+//     * @param type
+//     * @param method
+//     * @param uri
+//     * @param timestamp
+//     * @param invoker
+//     * @param secret
+//     * @return
+//     */
+//    public static String build(SignatureType type, String method, String uri, long timestamp, String invoker, String secret) {
+//        if (type == null || method == null || uri == null || timestamp <= 0 || invoker == null || secret == null) {
+//            return "";
+//        }
+//        return MessageFormat.format(PATTERN, type.getName(), invoker, FIELD_JOINER,
+//                encrypt(method.toLowerCase(), uri, String.valueOf(timestamp), secret));
+//    }
+
     /**
      * 根据标准参数构造最终的签名字符串
      *
      * @param type
-     * @param method
-     * @param uri
-     * @param timestamp
      * @param invoker
      * @param secret
      * @return
      */
-    public static String build(SignatureType type, String method, String uri, long timestamp, String invoker, String secret) {
-        if (type == null || method == null || uri == null || timestamp <= 0 || invoker == null || secret == null) {
+    public static String build(SignatureType type, String invoker, String secret) {
+        if (type == null || invoker == null || secret == null) {
             return "";
         }
         return MessageFormat.format(PATTERN, type.getName(), invoker, FIELD_JOINER,
-                encrypt(method.toLowerCase(), uri, String.valueOf(timestamp), secret));
-    }
+                encrypt(secret));
+    }
+
+//    /**
+//     * 根据当前接口的的基本信息、header中的时间戳与签名字符串,尝试解析并构造签名数据对象
+//     *
+//     * @param method
+//     * @param uri
+//     * @param timestamp
+//     * @param signature
+//     * @return
+//     */
+//    public static SignatureInfo parse(String method, String uri, long timestamp, String signature) {
+//        if (method == null || uri == null || timestamp <= 0 || signature == null) {
+//            return null;
+//        }
+//        String[] values = StringUtils.split(signature);
+//        if (values != null && values.length == 2) {
+//            SignatureType type = typeMap.get(values[0]);
+//            if (type != null) {
+//                String[] array = StringUtils.split(values[1], FIELD_JOINER);
+//                if (array != null && array.length == 2) {
+//                    SignatureInfo info = new SignatureInfo();
+//                    info.setType(type);
+//                    info.setMethod(method.toLowerCase());
+//                    info.setUri(uri);
+//                    info.setTimestamp(timestamp);
+//                    info.setInvoker(array[0]);
+//                    info.setCiphertext(array[1]);
+//                    return info;
+//                }
+//            }
+//        }
+//        return null;
+//    }
 
     /**
      * 根据当前接口的的基本信息、header中的时间戳与签名字符串,尝试解析并构造签名数据对象
      *
-     * @param method
-     * @param uri
      * @param timestamp
      * @param signature
      * @return
      */
-    public static SignatureInfo parse(String method, String uri, long timestamp, String signature) {
-        if (method == null || uri == null || timestamp <= 0 || signature == null) {
+    public static SignatureInfo parse(String signature) {
+        if (signature == null) {
             return null;
         }
         String[] values = StringUtils.split(signature);
@@ -157,9 +217,9 @@ public class SignatureInfo {
                 if (array != null && array.length == 2) {
                     SignatureInfo info = new SignatureInfo();
                     info.setType(type);
-                    info.setMethod(method.toLowerCase());
-                    info.setUri(uri);
-                    info.setTimestamp(timestamp);
+//                    info.setMethod(method.toLowerCase());
+//                    info.setUri(uri);
+//                    info.setTimestamp(timestamp);
                     info.setInvoker(array[0]);
                     info.setCiphertext(array[1]);
                     return info;
@@ -170,26 +230,26 @@ public class SignatureInfo {
     }
 
     public static void main(String[] args) {
-        SignatureInfo source = new SignatureInfo();
-        source.setType(SignatureType.TOKEN);
-//        source.setMethod("POST");
-        source.setMethod("GET");
-        source.setUri("/api/admin/invigilate/list");
-        source.setTimestamp(System.currentTimeMillis());
-        source.setInvoker("3_STUDENT_pc");
-        source.setSecret("R4IYArPwnU9hbeBev6CDDNC0S126sdb3");
-        System.out.println(source.getTimestamp());
-        long start = System.currentTimeMillis();
-        String signature = SignatureInfo
-                .build(source.getType(), source.getMethod(), source.getUri(), source.getTimestamp(), source.getInvoker(),
-                        source.getSecret());
-        System.out.println("signature:" + signature + "\ntime cost=" + (System.currentTimeMillis() - start));
-
-        start = System.currentTimeMillis();
-        SignatureInfo parse = SignatureInfo.parse(source.getMethod(), source.getUri(), source.getTimestamp(), signature);
-        System.out.println(
-                "validate:" + (parse != null && parse.validate(source.getSecret())) + "\ntime cost=" + (System.currentTimeMillis()
-                        - start));
+//        SignatureInfo source = new SignatureInfo();
+//        source.setType(SignatureType.TOKEN);
+////        source.setMethod("POST");
+//        source.setMethod("GET");
+//        source.setUri("");
+//        source.setTimestamp(System.currentTimeMillis());
+//        source.setInvoker("3_STUDENT_pc");
+//        source.setSecret("R4IYArPwnU9hbeBev6CDDNC0S126sdb3");
+//        System.out.println(source.getTimestamp());
+//        long start = System.currentTimeMillis();
+//        String signature = SignatureInfo
+//                .build(source.getType(), source.getMethod(), source.getUri(), source.getTimestamp(), source.getInvoker(),
+//                        source.getSecret());
+//        System.out.println("signature:" + signature + "\ntime cost=" + (System.currentTimeMillis() - start));
+//
+//        start = System.currentTimeMillis();
+//        SignatureInfo parse = SignatureInfo.parse(source.getMethod(), source.getUri(), source.getTimestamp(), signature);
+//        System.out.println(
+//                "validate:" + (parse != null && parse.validate(source.getSecret())) + "\ntime cost=" + (System.currentTimeMillis()
+//                        - start));
     }
 
 }