|
@@ -4,6 +4,7 @@ package com.diagbot.filter;
|
|
|
|
|
|
import com.diagbot.biz.log.entity.SysLog;
|
|
|
import com.diagbot.dto.RespDTO;
|
|
|
+import com.diagbot.dto.ServiceFilterDTO;
|
|
|
import com.diagbot.entity.ServiceFilter;
|
|
|
import com.diagbot.entity.ServiceToken;
|
|
|
import com.diagbot.enums.SysTypeEnum;
|
|
@@ -12,8 +13,10 @@ import com.diagbot.facade.ServiceFilterFacade;
|
|
|
import com.diagbot.rabbit.MySender;
|
|
|
import com.diagbot.util.EnDecodeUtil;
|
|
|
import com.diagbot.util.GsonUtil;
|
|
|
+import com.diagbot.util.StringUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
|
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
|
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
|
@@ -52,8 +55,8 @@ public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
private static Boolean IS_GENERATE = false;
|
|
|
private static Map<String, Long> SERVICE_FILTER = new HashMap<>();
|
|
|
|
|
|
- // @Value("${lantone.product}")
|
|
|
- // private String lantonePrduct;
|
|
|
+ @Value("${lantone.valid}")
|
|
|
+ private Boolean lantoneValid;
|
|
|
|
|
|
// @Autowired
|
|
|
// DiagbotmanServiceClient diagbotmanServiceClient;
|
|
@@ -66,6 +69,7 @@ public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
|
|
|
|
|
|
@Override
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
public Mono<Void> filter(ServerWebExchange serverWebExchange, GatewayFilterChain gatewayFilterChain) {
|
|
|
log.info("check token and url permission....");
|
|
|
LinkedHashSet requiredAttribute
|
|
@@ -85,61 +89,80 @@ public class GlobalGatewayFilter implements GlobalFilter {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // Map<String, Long> serviceFilters = this.dealServiceFilter();
|
|
|
- RespDTO<Map<String, Long>> resFilter = serviceFilterFacade.getServiceFilterRpc();
|
|
|
- if (resFilter == null || !RespDTO.TRUE_CODE.equals(resFilter.code)) {
|
|
|
- return getVoidMono(serverWebExchange, resFilter);
|
|
|
- }
|
|
|
- Map<String, Long> serviceFilters = resFilter.data;
|
|
|
- if (serviceFilters.get(serviceName) != null) {
|
|
|
- String appkey = request.getHeaders().getFirst("appKeyId");
|
|
|
- String secret = request.getHeaders().getFirst("appKeySecret");
|
|
|
- String securityCode = request.getHeaders().getFirst("securityCode"); //防伪码
|
|
|
+ //网关验证产品线接口权限
|
|
|
+ if (lantoneValid) {
|
|
|
+ ServiceFilterDTO serviceFilterDTO = new ServiceFilterDTO();
|
|
|
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) {
|
|
|
+ serviceFilterDTO = serviceFilterFacade.getServiceFilter();
|
|
|
+ } catch (Exception e) {
|
|
|
+ RespDTO respDTO = new RespDTO();
|
|
|
+ respDTO.code = CommonErrorCode.RPC_ERROR.getCode();
|
|
|
+ respDTO.msg = CommonErrorCode.RPC_ERROR.getMsg();
|
|
|
+ return getVoidMono(serverWebExchange, respDTO);
|
|
|
+ }
|
|
|
+ if (serviceFilterDTO.getApiMap().contains(serviceName)) {
|
|
|
+ String productIdStr = request.getHeaders().getFirst("productId");
|
|
|
+ if (StringUtil.isNotBlank(productIdStr)) {
|
|
|
+ RespDTO respDTO = new RespDTO();
|
|
|
+ respDTO.code = CommonErrorCode.PARAM_IS_NULL.getCode();
|
|
|
+ respDTO.msg = "请传入产品ID";
|
|
|
+ return getVoidMono(serverWebExchange, respDTO);
|
|
|
+ }
|
|
|
+ Long productId = Long.valueOf(productIdStr);
|
|
|
+ if (!serviceName.equals(serviceFilterDTO.getProductMap().get(productId))) {
|
|
|
+ RespDTO respDTO = new RespDTO();
|
|
|
+ respDTO.code = CommonErrorCode.NOPERMISSION_ERROR.getCode();
|
|
|
+ respDTO.msg = CommonErrorCode.NOPERMISSION_ERROR.getMsg();
|
|
|
+ return getVoidMono(serverWebExchange, respDTO);
|
|
|
+ }
|
|
|
+ String appkey = request.getHeaders().getFirst("appKeyId");
|
|
|
+ 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);
|
|
|
}
|
|
|
- } 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);
|
|
|
- //获取appkey,secret对应的权限信息
|
|
|
- ServiceToken st = new ServiceToken();
|
|
|
- st.setAppkey(appkey);
|
|
|
- st.setSecret(secret);
|
|
|
- st.setProductId(productId);
|
|
|
- //权限验证
|
|
|
- RespDTO<LinkedHashMap> res = hasPermission(st);
|
|
|
- if (res == null || !RespDTO.TRUE_CODE.equals(res.code)) {
|
|
|
- return getVoidMono(serverWebExchange, res);
|
|
|
- }
|
|
|
+ //获取appkey,secret对应的权限信息
|
|
|
+ ServiceToken st = new ServiceToken();
|
|
|
+ st.setAppkey(appkey);
|
|
|
+ st.setSecret(secret);
|
|
|
+ st.setProductId(productId);
|
|
|
+ //权限验证
|
|
|
+ RespDTO<LinkedHashMap> res = hasPermission(st);
|
|
|
+ if (res == null || !RespDTO.TRUE_CODE.equals(res.code)) {
|
|
|
+ return getVoidMono(serverWebExchange, res);
|
|
|
+ }
|
|
|
|
|
|
- //记录日志
|
|
|
- SysLog sysLog = new SysLog();
|
|
|
- sysLog.setGmtCreate(new Date());
|
|
|
- sysLog.setIp(request.getRemoteAddress().toString());
|
|
|
- sysLog.setMethod(requestUri);
|
|
|
- ServiceFilter serviceFilter = new ServiceFilter();
|
|
|
- serviceFilter.setServiceName(serviceName);
|
|
|
- serviceFilter.setProductId(productId);
|
|
|
- sysLog.setOperation(GsonUtil.toJson(serviceFilter));
|
|
|
- sysLog.setParams(requestUri);
|
|
|
- sysLog.setSysType(SysTypeEnum.APPKEY.getKey());
|
|
|
- LinkedHashMap<String, String> map = res.data;
|
|
|
- sysLog.setUsername(map.get("userId"));
|
|
|
- mySender.outputLogSend(sysLog);
|
|
|
+ //记录日志
|
|
|
+ SysLog sysLog = new SysLog();
|
|
|
+ sysLog.setGmtCreate(new Date());
|
|
|
+ sysLog.setIp(request.getRemoteAddress().toString());
|
|
|
+ sysLog.setMethod(requestUri);
|
|
|
+ ServiceFilter serviceFilter = new ServiceFilter();
|
|
|
+ serviceFilter.setServiceName(serviceName);
|
|
|
+ serviceFilter.setProductId(productId);
|
|
|
+ sysLog.setOperation(GsonUtil.toJson(serviceFilter));
|
|
|
+ sysLog.setParams(requestUri);
|
|
|
+ sysLog.setSysType(SysTypeEnum.APPKEY.getKey());
|
|
|
+ LinkedHashMap<String, String> map = res.data;
|
|
|
+ sysLog.setUsername(map.get("userId"));
|
|
|
+ mySender.outputLogSend(sysLog);
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
ServerHttpRequest.Builder builder = serverWebExchange.getRequest().mutate();
|