|
@@ -1,16 +1,23 @@
|
|
|
package com.diagbot.filter;
|
|
|
|
|
|
import com.diagbot.client.DiagbotmanServiceClient;
|
|
|
+import com.diagbot.client.TranServiceClient;
|
|
|
import com.diagbot.dto.RespDTO;
|
|
|
+import com.diagbot.dto.SysSetInfoDTO;
|
|
|
import com.diagbot.entity.HasPermissionDTO;
|
|
|
import com.diagbot.entity.ServiceFilter;
|
|
|
import com.diagbot.entity.ServiceToken;
|
|
|
import com.diagbot.entity.SysLog;
|
|
|
import com.diagbot.enums.SysTypeEnum;
|
|
|
import com.diagbot.exception.CommonErrorCode;
|
|
|
+import com.diagbot.exception.CommonException;
|
|
|
import com.diagbot.rabbit.MySender;
|
|
|
+import com.diagbot.util.DateUtil;
|
|
|
import com.diagbot.util.EnDecodeUtil;
|
|
|
import com.diagbot.util.GsonUtil;
|
|
|
+import com.diagbot.util.RSAEncrypt;
|
|
|
+import com.diagbot.util.StringUtil;
|
|
|
+import com.diagbot.vo.HospitalSetVO;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -32,6 +39,7 @@ import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.LinkedHashSet;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
@@ -45,8 +53,12 @@ import java.util.Map;
|
|
|
public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
|
|
|
private static final String GATE_WAY_PREFIX = "/api";
|
|
|
+ private static final String LICENCE = "licence_day";
|
|
|
private static Boolean IS_GENERATE = false;
|
|
|
private static Map<String, Long> SERVICE_FILTER = new HashMap<>();
|
|
|
+ private static Map<String, String> licenceMap = new HashMap<>(); // licence对象
|
|
|
+ private static boolean initLicence = false; // 是否初始化licence
|
|
|
+
|
|
|
|
|
|
@Value("${lantone.product}")
|
|
|
private String lantonePrduct;
|
|
@@ -55,6 +67,8 @@ public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
DiagbotmanServiceClient diagbotmanServiceClient;
|
|
|
@Autowired
|
|
|
private MySender mySender;
|
|
|
+ @Autowired
|
|
|
+ TranServiceClient tranServiceClient;
|
|
|
|
|
|
|
|
|
@Override
|
|
@@ -142,6 +156,10 @@ public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // 进行licence校验
|
|
|
+ String hospitalCode = request.getHeaders().getFirst("hospitalCode");
|
|
|
+ verifyLicence(hospitalCode, serviceName);
|
|
|
+
|
|
|
ServerHttpRequest.Builder builder = serverWebExchange.getRequest().mutate();
|
|
|
builder.header("Authorization", "Authorization Bearer token");
|
|
|
gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
|
|
@@ -176,4 +194,48 @@ public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
}
|
|
|
return serviceFilters;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验licence
|
|
|
+ *
|
|
|
+ * @param hospitalCode 医院编码
|
|
|
+ * @param serviceName 服务
|
|
|
+ */
|
|
|
+ public void verifyLicence(String hospitalCode, String serviceName) {
|
|
|
+ // 初始化licence
|
|
|
+ if (!initLicence) {
|
|
|
+ HospitalSetVO hospitalSetVO = new HospitalSetVO();
|
|
|
+ hospitalSetVO.setCode(LICENCE);
|
|
|
+ RespDTO<List<SysSetInfoDTO>> respDTO = tranServiceClient.getSysSetInfoDatas(hospitalSetVO);
|
|
|
+ if (respDTO != null) {
|
|
|
+ for (SysSetInfoDTO setInfoDTO : respDTO.data) {
|
|
|
+ String serName = SysTypeEnum.getName(setInfoDTO.getSysType());
|
|
|
+ licenceMap.put(setInfoDTO.getHospitalCode() + serName.substring(0, serName.indexOf("-")), setInfoDTO.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验
|
|
|
+ String value = licenceMap.get(hospitalCode + serviceName);
|
|
|
+ if (StringUtil.isNotEmpty(value)) {
|
|
|
+ String licence = "";
|
|
|
+ try {
|
|
|
+ licence = RSAEncrypt.decrypt(value);
|
|
|
+ } catch (Exception e) { // licence 被篡改
|
|
|
+ throw new CommonException(CommonErrorCode.LICENCE_ERROR);
|
|
|
+ }
|
|
|
+ String nowStr = DateUtil.format(new Date(), "YYYY-MM-dd HH:mm:ss");
|
|
|
+ System.out.println(nowStr);
|
|
|
+ System.out.println(licence);
|
|
|
+ if (licence.compareTo(nowStr) < 0) { // licence 已到期
|
|
|
+ throw new CommonException(CommonErrorCode.LICENCE_EXPIRE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void refreshLicence() {
|
|
|
+
|
|
|
+ }
|
|
|
}
|