Selaa lähdekoodia

添加防伪码

zhoutg 6 vuotta sitten
vanhempi
commit
37e329a944

+ 10 - 1
common/src/main/java/com/diagbot/exception/CommonErrorCode.java

@@ -23,7 +23,16 @@ public enum CommonErrorCode implements ErrorCode {
     NO_PERMISSION("00020008", "无权访问!"),
     NO_PERMISSION("00020008", "无权访问!"),
     IS_EXISTS("00020009", "已存在!"),
     IS_EXISTS("00020009", "已存在!"),
     ANALYZER_TOKEN_FAIL("10020010", "解析token失败"),
     ANALYZER_TOKEN_FAIL("10020010", "解析token失败"),
-    TOKEN_PAST("10020011", "token已失效,请重新登录");
+    TOKEN_PAST("10020011", "token已失效,请重新登录"),
+
+    SECURITYCODE_ERROR("20020001", "防伪码错误"),
+    APPKEY_ERROR("20020002", "appkey或secret错误"),
+    PRODUCT_STOP_ERROR("20020003", "该产品已停用"),
+    OVERDUE_ERROR("20020004", "访问权限已过期"),
+    NOPERMISSION_ERROR("20020005", "无权限访问"),
+    SERVICE_STOP_ERROR("20020006", "当前服务已停用"),
+    NOTVALID_ERROR("20020007", "该产品未在有效服务期内,无法使用"),
+    EXPIRE_ERROR("20020008", "该产品已超出有效服务期,无法使用");
 
 
     private String code;
     private String code;
     private String msg;
     private String msg;

+ 7 - 7
diagbotman-service/src/main/java/com/diagbot/facade/ServiceTokenFacade.java

@@ -66,16 +66,16 @@ public class ServiceTokenFacade extends ServiceTokenServiceImpl {
         List<ServiceTokenWrapper> serviceTokenWrapperList = this.getByAppkeyAndSecretAndProductId(paramMap);
         List<ServiceTokenWrapper> serviceTokenWrapperList = this.getByAppkeyAndSecretAndProductId(paramMap);
 
 
         if (ListUtil.isEmpty(serviceTokenWrapperList)) {
         if (ListUtil.isEmpty(serviceTokenWrapperList)) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "appkey或secret错误,appkey=【" + appkey + "】," + "secret=【" + secret + "】");
+            throw new CommonException(CommonErrorCode.APPKEY_ERROR);
         }
         }
         ServiceTokenWrapper st = serviceTokenWrapperList.get(0);
         ServiceTokenWrapper st = serviceTokenWrapperList.get(0);
         if (StatusEnum.Disable.getKey() == st.getServiceStatus()) {
         if (StatusEnum.Disable.getKey() == st.getServiceStatus()) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该产品已停用");
+            throw new CommonException(CommonErrorCode.PRODUCT_STOP_ERROR);
         }
         }
         if (TokenTypeEnum.Trial.getKey() == st.getType()) {
         if (TokenTypeEnum.Trial.getKey() == st.getType()) {
             Date date = new Date();
             Date date = new Date();
             if (st.getExpiringDate().getTime() < date.getTime()) {
             if (st.getExpiringDate().getTime() < date.getTime()) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "访问权限已过期");
+                throw new CommonException(CommonErrorCode.OVERDUE_ERROR);
             }
             }
         } else {
         } else {
             QueryWrapper<OpenedProducts> queryWrapper = new QueryWrapper<>();
             QueryWrapper<OpenedProducts> queryWrapper = new QueryWrapper<>();
@@ -84,17 +84,17 @@ public class ServiceTokenFacade extends ServiceTokenServiceImpl {
             queryWrapper.eq("product_id", st.getProductId());
             queryWrapper.eq("product_id", st.getProductId());
             OpenedProducts op = openedProductsFacade.getOne(queryWrapper);
             OpenedProducts op = openedProductsFacade.getOne(queryWrapper);
             if (op == null) {
             if (op == null) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无权限访问");
+                throw new CommonException(CommonErrorCode.NOPERMISSION_ERROR);
             }
             }
             Date date = new Date();
             Date date = new Date();
             if (!(StatusEnum.Enable.getKey() == op.getServiceStatus())) {
             if (!(StatusEnum.Enable.getKey() == op.getServiceStatus())) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前服务已停用");
+                throw new CommonException(CommonErrorCode.SERVICE_STOP_ERROR);
             }
             }
             if (op.getStartTime().getTime() > date.getTime()) {
             if (op.getStartTime().getTime() > date.getTime()) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该产品未在有效服务期内,无法使用");
+                throw new CommonException(CommonErrorCode.NOTVALID_ERROR);
             }
             }
             if (op.getEndTime().getTime() < date.getTime()) {
             if (op.getEndTime().getTime() < date.getTime()) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该产品已超出有效服务期,无法使用");
+                throw new CommonException(CommonErrorCode.EXPIRE_ERROR);
             }
             }
         }
         }
         hasPermissionDTO.setHasPermission(true);
         hasPermissionDTO.setHasPermission(true);

+ 1 - 1
diagbotman-service/src/main/resources/mapper/ServiceTokenMapper.xml

@@ -49,7 +49,7 @@
 
 
     <select id="getByAppkeyAndSecretAndProduct" parameterType="java.util.Map" resultType="com.diagbot.entity.wrapper.ServiceTokenWrapper">
     <select id="getByAppkeyAndSecretAndProduct" parameterType="java.util.Map" resultType="com.diagbot.entity.wrapper.ServiceTokenWrapper">
         SELECT
         SELECT
-            st.*, ps.product_id, lp.service_status
+            st.*, ps.product_id, lp.service_status, si.user_id
         FROM
         FROM
             diag_service_token st,
             diag_service_token st,
             diag_product_service ps,
             diag_product_service ps,

+ 21 - 0
gateway-service/src/main/java/com/diagbot/filter/GlobalGatewayFilter.java

@@ -7,7 +7,9 @@ import com.diagbot.entity.ServiceFilter;
 import com.diagbot.entity.ServiceToken;
 import com.diagbot.entity.ServiceToken;
 import com.diagbot.entity.SysLog;
 import com.diagbot.entity.SysLog;
 import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.enums.SysTypeEnum;
+import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.rabbit.MySender;
 import com.diagbot.rabbit.MySender;
+import com.diagbot.util.EnDecodeUtil;
 import com.diagbot.util.GsonUtil;
 import com.diagbot.util.GsonUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,6 +97,25 @@ public class GlobalGatewayFilter implements GlobalFilter {
         if (serviceFilters.get(serviceName) != null) {
         if (serviceFilters.get(serviceName) != null) {
             String appkey = request.getHeaders().getFirst("appKeyId");
             String appkey = request.getHeaders().getFirst("appKeyId");
             String secret = request.getHeaders().getFirst("appKeySecret");
             String secret = request.getHeaders().getFirst("appKeySecret");
+            String securityCode = request.getHeaders().getFirst("securityCode"); //防伪码
+            try {
+                String encodeTime = EnDecodeUtil.decode(securityCode);
+                Long time = Long.parseLong(encodeTime);
+                Long curTime = new Date().getTime();
+                // 防伪码主要是为了防止别人窃取url地址后直接长期使用,这边设了失效,目前暂定为24小时
+                // 前端实时获取当前时间跟系统时间作比较,如果时差超出24小时将会抛异常
+                if((curTime - time) > 1000 * 3600 * 24) {
+                    RespDTO respDTO = new RespDTO();
+                    respDTO.code = CommonErrorCode.SECURITYCODE_ERROR.getCode();
+                    respDTO.msg = CommonErrorCode.SECURITYCODE_ERROR.getMsg();
+                    return getVoidMono(serverWebExchange, respDTO);
+                }
+            } catch (Exception e) {
+                RespDTO respDTO = new RespDTO();
+                respDTO.code = CommonErrorCode.SECURITYCODE_ERROR.getCode();
+                respDTO.msg = CommonErrorCode.SECURITYCODE_ERROR.getMsg();
+                return getVoidMono(serverWebExchange, respDTO);
+            }
             Long productId = serviceFilters.get(serviceName);
             Long productId = serviceFilters.get(serviceName);
             //获取appkey,secret对应的权限信息
             //获取appkey,secret对应的权限信息
             ServiceToken st = new ServiceToken();
             ServiceToken st = new ServiceToken();