浏览代码

网关过滤

zhoutg 6 年之前
父节点
当前提交
1a09e17d94

+ 8 - 0
diagbotman-service/src/main/java/com/diagbot/facade/OpenedProductsFacade.java

@@ -1,8 +1,12 @@
 package com.diagbot.facade;
 
+import com.diagbot.entity.OpenedProducts;
 import com.diagbot.service.impl.OpenedProductsServiceImpl;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @Description:已开通产品业务层
  * @author: zhaops
@@ -10,4 +14,8 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class OpenedProductsFacade extends OpenedProductsServiceImpl {
+
+    public List<OpenedProducts> getByAppkeyAndSecretFac(Map map) {
+        return this.getByAppkeyAndSecret(map);
+    }
 }

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

@@ -1,16 +1,23 @@
 package com.diagbot.facade;
 
 import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.OpenedProducts;
 import com.diagbot.entity.ProductService;
 import com.diagbot.entity.ServiceToken;
+import com.diagbot.enums.StatusEnum;
+import com.diagbot.enums.TokenTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.ServiceTokenServiceImpl;
+import com.diagbot.util.ListUtil;
 import com.diagbot.vo.ServiceTokenVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 用户端token业务层
@@ -23,6 +30,8 @@ public class ServiceTokenFacade extends ServiceTokenServiceImpl {
 
     @Autowired
     ProductServiceFacade productServiceFacade;
+    @Autowired
+    OpenedProductsFacade openedProductsFacade;
 
     /**
      * @Description: 获取资源的url
@@ -32,20 +41,41 @@ public class ServiceTokenFacade extends ServiceTokenServiceImpl {
     public RespDTO<Boolean> hasPermission(ServiceTokenVo serviceTokenVo) {
         String appkey = serviceTokenVo.getAppkey();
         String secret = serviceTokenVo.getSecret();
-        ServiceToken st = this.getServiceToken(appkey, secret);
+        Map<String, Object> paramMap = new HashMap<>();
+        paramMap.put("appkey", appkey);
+        paramMap.put("secret", secret);
+        ServiceToken st = this.getServiceToken(paramMap);
         if(null == st) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "appkey或secret错误,appkey=【" + appkey + "】," + "secret=【" + secret + "】");
         }
-        ProductService ps = productServiceFacade.getById(st.getProductSeviceId());
-        if(ps == null) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无权限访问!");
-        }
-        if(!ps.getProductId().equals(serviceTokenVo.getProductId())) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无权限访问!");
-        }
-        Date date = new Date();
-        if(st.getExpiringDate().getTime() < date.getTime()) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "访问权限已过期!");
+        if(TokenTypeEnum.Trial.getKey() == st.getType()) {
+            ProductService ps = productServiceFacade.getById(st.getProductSeviceId());
+            if (ps == null) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无权限访问!");
+            }
+            if (!ps.getProductId().equals(serviceTokenVo.getProductId())) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无权限访问!");
+            }
+            Date date = new Date();
+            if (st.getExpiringDate().getTime() < date.getTime()) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "访问权限已过期!");
+            }
+        } else {
+            List<OpenedProducts> opList = openedProductsFacade.getByAppkeyAndSecret(paramMap);
+            if(ListUtil.isEmpty(opList)) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无权限访问!");
+            }
+            if(opList.size() != 1) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前appkey和secret对应多条数据!");
+            }
+            OpenedProducts op = opList.get(0);// 正常只有一条数据
+            Date date = new Date();
+            if(!(StatusEnum.Enable.getKey() == op.getServiceStatus())) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前服务已停用!");
+            }
+            if(op.getEndTime().getTime() < date.getTime()) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "访问权限已过期!");
+            }
         }
         return RespDTO.onSuc(true);
     }

+ 9 - 0
diagbotman-service/src/main/java/com/diagbot/mapper/OpenedProductsMapper.java

@@ -31,4 +31,13 @@ public interface OpenedProductsMapper extends BaseMapper<OpenedProducts> {
      * @return
      */
     List<OpenedProducts> selectOpenedProducts(Map<String,Object>map);
+
+
+    /**
+     * 查询已开通产品
+     * @param map 查询条件
+     * @return
+     */
+    List<OpenedProducts> getByAppkeyAndSecret(Map<String,Object> map);
+
 }

+ 9 - 0
diagbotman-service/src/main/java/com/diagbot/service/OpenedProductsService.java

@@ -30,4 +30,13 @@ public interface OpenedProductsService extends IService<OpenedProducts> {
      * @return
      */
     List<OpenedProducts> selectOpenedProducts(Map<String,Object> map);
+
+
+    /**
+     * @Description: 根据appkey和secret查询开通产品
+     * @Author: ztg
+     * @Date: 2018/9/20 15:23
+     */
+    List<OpenedProducts> getByAppkeyAndSecret(Map<String,Object> map);
+
 }

+ 3 - 1
diagbotman-service/src/main/java/com/diagbot/service/ServiceTokenService.java

@@ -3,6 +3,8 @@ package com.diagbot.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.entity.ServiceToken;
 
+import java.util.Map;
+
 /**
  * <p>
  * 服务令牌表 服务类
@@ -18,7 +20,7 @@ public interface ServiceTokenService extends IService<ServiceToken> {
      * @Author: ztg
      * @Date: 2018/9/18 16:38
      */
-    ServiceToken getServiceToken(String appkey, String secret);
+    ServiceToken getServiceToken(Map<String, Object> paramMap);
 
     ServiceToken getByProductServiceId(Long productServiceId);
 

+ 10 - 0
diagbotman-service/src/main/java/com/diagbot/service/impl/OpenedProductsServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.entity.OpenedProducts;
 import com.diagbot.mapper.OpenedProductsMapper;
 import com.diagbot.service.OpenedProductsService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -21,6 +22,10 @@ import java.util.Map;
  */
 @Service
 public class OpenedProductsServiceImpl extends ServiceImpl<OpenedProductsMapper, OpenedProducts> implements OpenedProductsService {
+
+    @Autowired
+    OpenedProductsMapper openedProductsMapper;
+
     @Override
     public IPage<OpenedProducts> selectOpendInfoByUserId(Page<OpenedProducts> page, int userId) {
         return baseMapper.selectOpendInfoByUserId(page,userId);
@@ -34,4 +39,9 @@ public class OpenedProductsServiceImpl extends ServiceImpl<OpenedProductsMapper,
     public List<OpenedProducts> selectOpenedProducts(Map<String,Object> map){
         return baseMapper.selectOpenedProducts(map);
     }
+
+    @Override
+    public List<OpenedProducts> getByAppkeyAndSecret(Map<String, Object> map) {
+        return openedProductsMapper.getByAppkeyAndSecret(map);
+    }
 }

+ 1 - 7
diagbotman-service/src/main/java/com/diagbot/service/impl/ServiceTokenServiceImpl.java

@@ -2,14 +2,11 @@ package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.entity.ServiceToken;
-import com.diagbot.enums.IsDeleteEnum;
-import com.diagbot.enums.StatusEnum;
 import com.diagbot.mapper.ServiceTokenMapper;
 import com.diagbot.service.ServiceTokenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -27,10 +24,7 @@ public class ServiceTokenServiceImpl extends ServiceImpl<ServiceTokenMapper, Ser
     ServiceTokenMapper serviceTokenMapper;
 
     @Override
-    public ServiceToken getServiceToken(String appkey, String secret) {
-        Map<String, Object> paramMap = new HashMap<>();
-        paramMap.put("appkey", appkey);
-        paramMap.put("secret", secret);
+    public ServiceToken getServiceToken(Map<String, Object> paramMap) {
         return serviceTokenMapper.getServiceToken(paramMap);
     }
 

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

@@ -21,7 +21,7 @@
         SELECT opend.* FROM diag_opened_products opend WHERE user_id = #{userId}
     </select>
 
-    <select id="selectOpenedProducts" resultMap="BaseResultMap" parameterMap="java.util.Map">
+    <select id="selectOpenedProducts" resultMap="BaseResultMap" parameterType="java.util.Map">
         SELECT t.* FROM diag_opened_products t WHERE t.is_deleted='N'
         <if test="userId != null and userId != ''">
         and t.user_id = #{userId}
@@ -30,4 +30,12 @@
         and t.product_id=#{productId}
         </if>
     </select>
+
+
+    <select id="getByAppkeyAndSecret" resultMap="BaseResultMap" parameterType="java.util.Map">
+        select os.* from diag_service_token st, diag_product_service ps, diag_service_info si, diag_opened_products os
+        where st.product_sevice_id = ps.id and ps.product_id = os.product_id and ps.service_id = si.id and si.user_id = os.user_id
+        and st.is_deleted = 'N' and ps.is_deleted = 'N' and si.is_deleted = 'N' AND os.is_deleted = 'N'
+        and st.app_key_id = #{appkey} and st.app_key_secret = #{secret}
+    </select>
 </mapper>