diff --git a/sf-admin/src/main/resources/application.yml b/sf-admin/src/main/resources/application.yml
index 843f1c4..7ec7689 100644
--- a/sf-admin/src/main/resources/application.yml
+++ b/sf-admin/src/main/resources/application.yml
@@ -144,3 +144,11 @@ file:
bucket:
#name: ruoyi
name: sac
+
+sac:
+ gateway:
+ # host: 192.168.1.68
+ # port: 5566
+ host: 192.168.1.23
+ port: 1775
+
diff --git a/sf-service/pom.xml b/sf-service/pom.xml
index 14791db..0fed441 100644
--- a/sf-service/pom.xml
+++ b/sf-service/pom.xml
@@ -42,6 +42,11 @@
1.6.2
+
+ com.smarterFramework
+ sf-vertx-api
+
+
\ No newline at end of file
diff --git a/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayConfigController.java b/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayConfigController.java
index 5fc7d23..0198a8b 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayConfigController.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayConfigController.java
@@ -19,6 +19,7 @@ import com.sf.service.index.util.AppUtils;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -75,4 +76,17 @@ public class GatewayConfigController extends BaseController
return success();
}
+ /**
+ * 修改网关配置
+ */
+ @Log(title = "网关配置同步", businessType = BusinessType.UPDATE)
+ @PostMapping("/sync")
+ public AjaxResult synchronization()
+ {
+ String appCode = AppUtils.getAppCodeFromRequestHeader();
+ Assert.hasText(appCode,"应用信息错误");
+ gatewayConfigService.synchronization(appCode);
+ return success();
+ }
+
}
diff --git a/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayRouteController.java b/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayRouteController.java
index e23682f..376bb8f 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayRouteController.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayRouteController.java
@@ -57,22 +57,7 @@ public class GatewayRouteController extends BaseController
{
startPage();
List list = gatewayRouteService.selectGatewayRouteList(gatewayRoute);
- List voList = list.stream().map(item ->{
- GatewayRouteListVO vo = new GatewayRouteListVO();
- vo.setId(item.getId());
- vo.setRouteName(item.getRouteName());
- vo.setRequestProtocol(item.getRequestProtocol());
- vo.setRouteType(item.getRouteType());
- vo.setRouteContent(JSON.parseArray(item.getRouteContent(),GatewayRoute.RouteContent.class));
- vo.setRouteStatusActiveMonitoring(item.getRouteStatusActiveMonitoring());
- vo.setRouteActiveMonitoringPath(item.getRouteActiveMonitoringPath());
- vo.setRouteActiveMonitoringTimeout(item.getRouteActiveMonitoringTimeout());
- vo.setCreated(item.getCreated());
- vo.setCreateTime(item.getCreateTime());
- vo.setRouteActiveStatus(item.getRouteActiveStatus());
- return vo;
- }).collect(Collectors.toList());
-
+ List voList = list.stream().map(GatewayRouteListVO::convert).collect(Collectors.toList());
return getDataTable(voList);
}
diff --git a/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayServerController.java b/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayServerController.java
index 4f6db01..0fa589e 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayServerController.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/controller/GatewayServerController.java
@@ -74,23 +74,10 @@ public class GatewayServerController extends BaseController {
.map(GatewayServer::getRouteId)
.collect(Collectors.toSet());
List routeList = gatewayRouteService.selectGatewayRouteByIds(routeIds);
- Map routeIdAndNameMap = routeList.stream().collect(Collectors.toMap(GatewayRoute::getId, GatewayRoute::getRouteName));
- List voList = list.stream().map(item -> {
- GatewayServerListVO vo = new GatewayServerListVO();
- vo.setId(item.getId());
- vo.setServerName(item.getServerName());
- vo.setServerAddress(GatewayServiceModel.ROUTE.getCode().equals(item.getServiceModel()) ?
- routeIdAndNameMap.get(item.getRouteId()) : item.getServerAddress());
- vo.setRemark(item.getRemark());
- vo.setStatus(item.getStatus());
- vo.setCreated(item.getCreated());
- vo.setModified(item.getModified());
- vo.setServiceModel(item.getServiceModel());
- vo.setRouteId(item.getRouteId());
- vo.setCreateTime(item.getCreateTime());
- vo.setUpdateTime(item.getUpdateTime());
- return vo;
- }).collect(Collectors.toList());
+ Map routeMap = routeList.stream().collect(Collectors.toMap(GatewayRoute::getId, Function.identity()));
+ List voList = list.stream()
+ .map(item -> GatewayServerListVO.convert(item,GatewayServiceModel.ROUTE.getCode().equals(gatewayServer.getServiceModel()) ? routeMap.get(item.getRouteId()) : null))
+ .collect(Collectors.toList());
return getDataTable(voList);
}
@@ -227,17 +214,9 @@ public class GatewayServerController extends BaseController {
.map(GatewayServer::getRouteId)
.collect(Collectors.toSet());
List routeList = gatewayRouteService.selectGatewayRouteByIds(routeIds);
- Map routeIdAndNameMap = routeList.stream().collect(Collectors.toMap(GatewayRoute::getId, GatewayRoute::getRouteName));
- return list.stream().map(item -> {
- GatewayServerListVO vo = new GatewayServerListVO();
- vo.setId(item.getId());
- vo.setServerName(item.getServerName());
- vo.setServerAddress(GatewayServiceModel.ROUTE.getCode().equals(item.getServiceModel()) ?
- routeIdAndNameMap.get(item.getRouteId()) : item.getServerAddress());
- vo.setStatus(item.getStatus());
- vo.setServiceModel(item.getServiceModel());
- vo.setRouteId(item.getRouteId());
- return vo;
- }).collect(Collectors.toList());
+ Map routeMap = routeList.stream().collect(Collectors.toMap(GatewayRoute::getId, Function.identity()));
+ return list.stream()
+ .map(item -> GatewayServerListVO.convert(item,GatewayServiceModel.ROUTE.getCode().equals(gatewayServer.getServiceModel()) ? routeMap.get(item.getRouteId()) : null))
+ .collect(Collectors.toList());
}
}
diff --git a/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayRouteListVO.java b/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayRouteListVO.java
index e7dd8f8..8b4c76e 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayRouteListVO.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayRouteListVO.java
@@ -1,5 +1,6 @@
package com.sf.service.gateway.domain.vo;
+import com.alibaba.fastjson2.JSON;
import com.sf.common.annotation.Excel;
import com.sf.service.gateway.domain.GatewayRoute;
import com.sf.service.gateway.enums.GatewayRouteType;
@@ -62,4 +63,23 @@ public class GatewayRouteListVO {
@ApiModelProperty("路由活跃状态(0=探活未开启,1=状态获取中,2=正常,3=异常)")
private String routeActiveStatus;
+ public static GatewayRouteListVO convert(GatewayRoute gatewayRoute){
+ if (gatewayRoute == null) {
+ return null;
+ }
+ GatewayRouteListVO vo = new GatewayRouteListVO();
+ vo.setId(gatewayRoute.getId());
+ vo.setRouteName(gatewayRoute.getRouteName());
+ vo.setRequestProtocol(gatewayRoute.getRequestProtocol());
+ vo.setRouteType(gatewayRoute.getRouteType());
+ vo.setRouteContent(JSON.parseArray(gatewayRoute.getRouteContent(),GatewayRoute.RouteContent.class));
+ vo.setRouteStatusActiveMonitoring(gatewayRoute.getRouteStatusActiveMonitoring());
+ vo.setRouteActiveMonitoringPath(gatewayRoute.getRouteActiveMonitoringPath());
+ vo.setRouteActiveMonitoringTimeout(gatewayRoute.getRouteActiveMonitoringTimeout());
+ vo.setCreated(gatewayRoute.getCreated());
+ vo.setCreateTime(gatewayRoute.getCreateTime());
+ vo.setRouteActiveStatus(gatewayRoute.getRouteActiveStatus());
+ return vo;
+ }
+
}
diff --git a/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayServerListVO.java b/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayServerListVO.java
index 1254623..ea8959a 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayServerListVO.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/domain/vo/GatewayServerListVO.java
@@ -3,6 +3,9 @@ package com.sf.service.gateway.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sf.common.annotation.Excel;
import com.sf.common.core.domain.BaseEntity;
+import com.sf.service.gateway.domain.GatewayRoute;
+import com.sf.service.gateway.domain.GatewayServer;
+import com.sf.service.gateway.enums.GatewayServiceModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.URL;
@@ -13,7 +16,7 @@ import java.util.Date;
/**
* 服务列表
- *
+ *
* @author zoukun
* @date 2024-04-22
*/
@@ -47,12 +50,38 @@ public class GatewayServerListVO {
@ApiModelProperty("路由规则id")
private Long routeId;
- /** 创建时间 */
+ /**
+ * 创建时间
+ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
- /** 更新时间 */
+ /**
+ * 更新时间
+ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
+
+ public static GatewayServerListVO convert(GatewayServer gatewayServer, GatewayRoute linkRoute) {
+ if (gatewayServer == null) {
+ return null;
+ }
+ GatewayServerListVO vo = new GatewayServerListVO();
+
+ vo.setId(gatewayServer.getId());
+ vo.setServerName(gatewayServer.getServerName());
+ vo.setServerAddress(GatewayServiceModel.ROUTE.getCode().equals(gatewayServer.getServiceModel()) ?
+ linkRoute.getRouteName()
+ : gatewayServer.getServerAddress());
+ vo.setRemark(gatewayServer.getRemark());
+ vo.setStatus(gatewayServer.getStatus());
+ vo.setCreated(gatewayServer.getCreated());
+ vo.setModified(gatewayServer.getModified());
+ vo.setServiceModel(gatewayServer.getServiceModel());
+ vo.setRouteId(gatewayServer.getRouteId());
+ vo.setCreateTime(gatewayServer.getCreateTime());
+ vo.setUpdateTime(gatewayServer.getUpdateTime());
+ return vo;
+ }
}
diff --git a/sf-service/src/main/java/com/sf/service/gateway/service/IGatewayConfigService.java b/sf-service/src/main/java/com/sf/service/gateway/service/IGatewayConfigService.java
index 36de00d..fb80c8f 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/service/IGatewayConfigService.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/service/IGatewayConfigService.java
@@ -19,4 +19,11 @@ public interface IGatewayConfigService {
GatewayConfig selectGatewayConfigByAppCode(String appCode);
void updateGatewayConfig(GatewayConfig gatewayConfig);
+
+ /**
+ * 同步配置到网关
+ *
+ * @param appCode
+ */
+ void synchronization(String appCode);
}
diff --git a/sf-service/src/main/java/com/sf/service/gateway/service/impl/GatewayConfigServiceImpl.java b/sf-service/src/main/java/com/sf/service/gateway/service/impl/GatewayConfigServiceImpl.java
index 99845eb..e93de0a 100644
--- a/sf-service/src/main/java/com/sf/service/gateway/service/impl/GatewayConfigServiceImpl.java
+++ b/sf-service/src/main/java/com/sf/service/gateway/service/impl/GatewayConfigServiceImpl.java
@@ -1,20 +1,34 @@
package com.sf.service.gateway.service.impl;
-import apijson.JSON;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.sf.common.constant.HttpStatus;
+import com.sf.common.exception.ServiceException;
import com.sf.common.utils.DateUtils;
import com.sf.common.utils.SecurityUtils;
-import com.sf.service.gateway.domain.GatewayConfig;
+import com.sf.service.gateway.domain.*;
import com.sf.service.gateway.enums.EncryptionAlgorithm;
import com.sf.service.gateway.enums.GatewayDataStatus;
+import com.sf.service.gateway.enums.GatewayServiceModel;
+import com.sf.service.gateway.enums.GatewayStrategyType;
import com.sf.service.gateway.mapper.GatewayConfigMapper;
-import com.sf.service.gateway.service.IGatewayConfigService;
+import com.sf.service.gateway.service.*;
import com.sf.service.index.util.AppUtils;
+import com.sf.vertx.api.pojo.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
-import java.util.Date;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* 功能描述:
@@ -22,15 +36,37 @@ import java.util.Date;
* @author a_kun
* @date 2024/4/25 17:24
*/
+@Slf4j
@Service
public class GatewayConfigServiceImpl implements IGatewayConfigService {
+ @Value("${sac.gateway.host:}")
+ private String sacGatewayHost;
+
+ @Value("${sac.gateway.port:5566}")
+ private Integer sacGatewayPort;
+
+ private static final String SYNC_CONFIG_PATH = "/vertx/app/config";
+
+
@Resource
private GatewayConfigMapper gatewayConfigMapper;
+ @Resource
+ private IGatewayServerService gatewayServerService;
+
+ @Resource
+ private IGatewayRouteService gatewayRouteService;
+
+ @Resource
+ private IGatewayInterfaceInfoService gatewayInterfaceInfoService;
+
+ @Resource
+ private IGatewayStrategyService gatewayStrategyService;
+
@Override
public GatewayConfig selectGatewayConfigByAppCode(String appCode) {
- if (StringUtils.hasText(appCode)){
+ if (StringUtils.hasText(appCode)) {
return gatewayConfigMapper.selectByAppCode(appCode);
}
return null;
@@ -50,7 +86,7 @@ public class GatewayConfigServiceImpl implements IGatewayConfigService {
gatewayConfig.setCreateTime(nowDate);
gatewayConfig.setUpdateTime(nowDate);
gatewayConfigMapper.insert(gatewayConfig);
- }else {
+ } else {
gatewayConfig.setModified(username);
gatewayConfig.setCreateTime(nowDate);
gatewayConfig.setUpdateTime(nowDate);
@@ -58,36 +94,214 @@ public class GatewayConfigServiceImpl implements IGatewayConfigService {
}
}
- private void checkInsertOrUpdateGatewayConfig(GatewayConfig gatewayConfig) {
- if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getDataEncryptionStatus())){
- EncryptionAlgorithm encryptionAlgorithm = EncryptionAlgorithm.getByCode(gatewayConfig.getEncryptionAlgorithm());
- Assert.notNull(encryptionAlgorithm,"不支持的加密算法");
- Assert.hasText(gatewayConfig.getPrivateKey(),"密钥内容不能为空");
- if (EncryptionAlgorithm.RSA.equals(encryptionAlgorithm)){
- Assert.hasText(gatewayConfig.getPublicKey(),"公钥内容不能为空");
+ @Override
+ public void synchronization(String appCode) {
+ Assert.hasText(sacGatewayHost, "网关地址未配置");
+ Assert.notNull(sacGatewayPort, "网关端口未配置");
+ String urlStr = "http://" + sacGatewayHost + ":" + sacGatewayPort + SYNC_CONFIG_PATH;
+ AppConfig appConfig = new AppConfig();
+ appConfig.setAppCode(appCode);
+ GatewayConfig gatewayConfig = selectGatewayConfigByAppCode(appCode);
+ if (gatewayConfig != null) {
+ appConfig.setDataSecurity(initDataSecurity(gatewayConfig));
+ appConfig.setApiCurrentLimitingConfig(initApiCurrentLimitStrategy(gatewayConfig));
+ appConfig.setAppCurrentLimitingConfig(initAppCurrentLimitStrategy(gatewayConfig));
+ appConfig.setService(initService(appCode));
+ // appConfig.setAdvancedConfig();
+ }
+ try {
+ String response = HttpUtil.post(urlStr, JSON.toJSONString(appConfig));
+ log.info("sync gateway response : {}", response);
+ if (StringUtils.hasText(response)) {
+ JSONObject jsonObject = JSON.parseObject(response);
+ if (jsonObject.getIntValue("code") == HttpStatus.SUCCESS) {
+ return;
+ }
+ }
+ } catch (Exception e) {
+ log.error("网关配置同步失败:", e);
+ throw new ServiceException("网关配置同步失败,请稍后重试");
+ }
+ throw new ServiceException("网关配置同步失败,请稍后重试");
+ }
+
+ private List initService(String appCode) {
+ List service = Collections.emptyList();
+ GatewayServer queryServer = new GatewayServer();
+ queryServer.setAppCode(appCode);
+ queryServer.setStatus(GatewayDataStatus.ENABLE.getCode());
+ List serverList = gatewayServerService.selectGatewayServerList(queryServer);
+ if (CollUtil.isNotEmpty(serverList)) {
+ // 如果是路由模式的服务,查询对应的路由服务信息
+ Collection routeIds = serverList.stream().filter(item -> GatewayServiceModel.ROUTE.getCode().equals(item.getServiceModel()))
+ .map(GatewayServer::getRouteId)
+ .collect(Collectors.toSet());
+ List routeList = gatewayRouteService.selectGatewayRouteByIds(routeIds);
+ Map routeMap = routeList.stream().collect(Collectors.toMap(GatewayRoute::getId, Function.identity()));
+ // 查询接口
+ List interfaceInfoList = gatewayInterfaceInfoService.selectGatewayInterfaceInfoByServerIds(serverList.stream().map(GatewayServer::getId).collect(Collectors.toSet()));
+ // 启用的
+ interfaceInfoList = interfaceInfoList.stream().filter(api -> GatewayDataStatus.ENABLE.getCode().equals(api.getStatus())).collect(Collectors.toList());
+ Map> groupByServerInterfaceMap = interfaceInfoList.stream().collect(Collectors.groupingBy(GatewayInterfaceInfo::getServerId));
+ List linkList = gatewayInterfaceInfoService.selectGatewayInterfaceLinkStrategyByInterfaceIds(interfaceInfoList.stream().map(GatewayInterfaceInfo::getId).collect(Collectors.toSet()));
+ Map> groupByInterfaceLinkMap = linkList.stream().collect(Collectors.groupingBy(GatewayInterfaceLinkStrategy::getInterfaceId));
+ // 查询接口策略
+ List strategyList = gatewayStrategyService.selectGatewayStrategyByIds(linkList.stream().map(GatewayInterfaceLinkStrategy::getStrategyId).collect(Collectors.toSet()));
+ // 启用的
+ strategyList = strategyList.stream().filter(strategy -> GatewayDataStatus.ENABLE.getCode().equals(strategy.getStatus())).collect(Collectors.toList());
+ Map strategyMap = strategyList.stream().collect(Collectors.toMap(GatewayStrategy::getId, Function.identity()));
+ return serverList.stream().map(server -> {
+ SacService sacService = new SacService();
+ sacService.setServiceName(server.getServerName());
+ sacService.setServiceModel(server.getServiceModel());
+ sacService.setServerAddress(convertToServerAddress(server.getServerAddress()));
+ List currentServerApiList = groupByServerInterfaceMap.getOrDefault(server.getId(), Collections.emptyList());
+ List apiConfigList = currentServerApiList.stream().map(api -> {
+ List currentApiLinkStrategy = groupByInterfaceLinkMap.getOrDefault(api.getId(), Collections.emptyList());
+ List currentApiStrategyList = currentApiLinkStrategy.stream()
+ .map(link -> convertToStrategy(strategyMap.get(link.getStrategyId())))
+ .collect(Collectors.toList());
+ ApiConfig apiConfig = new ApiConfig();
+ apiConfig.setApiCode(api.getApiCode());
+ apiConfig.setUri(api.getInterfacePath());
+ apiConfig.setMethod(api.getRequestMethod());
+ apiConfig.setStrategy(currentApiStrategyList);
+ return apiConfig;
+ }).collect(Collectors.toList());
+ sacService.setApiConfig(apiConfigList);
+
+ // 设置路由
+ if (GatewayServiceModel.ROUTE.getCode().equals(server.getServiceModel())) {
+ GatewayRoute route = routeMap.get(server.getRouteId());
+ Router routeConfig = new Router();
+ routeConfig.setRouteType(route.getRouteType());
+ List routeContents = JSON.parseArray(route.getRouteContent(), GatewayRoute.RouteContent.class);
+ routeConfig.setRouteContent(routeContents.stream().map(content -> {
+ RouteContent routeContent = new RouteContent();
+ routeContent.setServerAddress(convertToServerAddress(content.getServerAddress()));
+ routeContent.setWeight(content.getWeight());
+ routeContent.setHeaderKey(content.getHeaderKey());
+ routeContent.setHeaderValues(content.getHeaderValues());
+ routeContent.setMatchType(content.getMatchType());
+ return routeContent;
+ }).collect(Collectors.toList()));
+ sacService.setRouteConfig(routeConfig);
+ }
+ return sacService;
+ }).collect(Collectors.toList());
+ }
+ return service;
+ }
+
+ private Strategy convertToStrategy(GatewayStrategy currentStrategy) {
+ Strategy strategy = new Strategy();
+ strategy.setType(currentStrategy.getStrategyType());
+ switch (GatewayStrategyType.getByCode(currentStrategy.getStrategyType())) {
+ case CURRENT_LIMITING:
+ strategy.setThreshold(currentStrategy.getCurrentLimitingThreshold());
+ strategy.setTimeWindow(currentStrategy.getCurrentLimitingTimeWindow());
+ strategy.setDefaultResponse(currentStrategy.getCurrentLimitingResponse());
+ case CIRCUIT_BREAKER:
+ strategy.setThreshold(currentStrategy.getCircuitBreakerThreshold());
+ strategy.setTimeWindow(currentStrategy.getCircuitBreakerTimeWindow());
+ strategy.setRecovery_interval(currentStrategy.getCircuitBreakerRecoveryInterval());
+ strategy.setDefaultResponse(currentStrategy.getCircuitBreakerResponse());
+ case AUTHENTICATION:
+ case PERMISSION:
+ default:
+ break;
+
+ }
+ return strategy;
+ }
+
+ private ServerAddress convertToServerAddress(String serverAddress) {
+ if (StringUtils.hasText(serverAddress)) {
+ try {
+ URL url = new URL(serverAddress);
+ ServerAddress address = new ServerAddress();
+ address.setAddress(serverAddress);
+ address.setProtocol(url.getProtocol());
+ address.setHost(url.getHost());
+ address.setPort(url.getPort() == -1 ? 80 : url.getPort());
+ address.setPath(url.getPath());
+ return address;
+ } catch (MalformedURLException ignored) {
}
}
- if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getApiCurrentLimitingStatus())){
- Assert.notNull(gatewayConfig.getApiCurrentLimitingThreshold(),"限流值不能为空");
- Assert.isTrue(gatewayConfig.getApiCurrentLimitingThreshold() >= 0,"限流值>=0");
+ return null;
+ }
+
+ private Strategy initAppCurrentLimitStrategy(GatewayConfig gatewayConfig) {
+ if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getAppCurrentLimitingStatus())) {
+ Strategy appCurrentLimitStrategy = new Strategy();
+ appCurrentLimitStrategy.setType(GatewayStrategyType.CURRENT_LIMITING.getCode());
+ appCurrentLimitStrategy.setThreshold(gatewayConfig.getAppCurrentLimitingThreshold());
+ appCurrentLimitStrategy.setTimeWindow(gatewayConfig.getAppCurrentLimitingTimeWindow());
+ appCurrentLimitStrategy.setDefaultResponse(gatewayConfig.getAppCurrentLimitingDefaultResponse());
+ return appCurrentLimitStrategy;
+ }
+ return null;
+ }
+
+ private Strategy initApiCurrentLimitStrategy(GatewayConfig gatewayConfig) {
+ if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getApiCurrentLimitingStatus())) {
+ Strategy apiCurrentLimitStrategy = new Strategy();
+ apiCurrentLimitStrategy.setType(GatewayStrategyType.CURRENT_LIMITING.getCode());
+ apiCurrentLimitStrategy.setThreshold(gatewayConfig.getApiCurrentLimitingThreshold());
+ apiCurrentLimitStrategy.setTimeWindow(gatewayConfig.getApiCurrentLimitingTimeWindow());
+ apiCurrentLimitStrategy.setDefaultResponse(gatewayConfig.getApiCurrentLimitingDefaultResponse());
+ return apiCurrentLimitStrategy;
+ }
+ return null;
+ }
+
+ /**
+ * 初始化数据加密配置
+ *
+ * @param gatewayConfig
+ */
+ private DataSecurity initDataSecurity(GatewayConfig gatewayConfig) {
+ if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getDataEncryptionStatus())) {
+ DataSecurity dataSecurity = new DataSecurity();
+ dataSecurity.setAlgorithm(gatewayConfig.getEncryptionAlgorithm());
+ dataSecurity.setPublicKey(gatewayConfig.getPublicKey());
+ dataSecurity.setPrivateKey(gatewayConfig.getPrivateKey());
+ return dataSecurity;
+ }
+ return null;
+ }
+
+ private void checkInsertOrUpdateGatewayConfig(GatewayConfig gatewayConfig) {
+ if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getDataEncryptionStatus())) {
+ EncryptionAlgorithm encryptionAlgorithm = EncryptionAlgorithm.getByCode(gatewayConfig.getEncryptionAlgorithm());
+ Assert.notNull(encryptionAlgorithm, "不支持的加密算法");
+ Assert.hasText(gatewayConfig.getPrivateKey(), "密钥内容不能为空");
+ if (EncryptionAlgorithm.RSA.equals(encryptionAlgorithm)) {
+ Assert.hasText(gatewayConfig.getPublicKey(), "公钥内容不能为空");
+ }
+ }
+ if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getApiCurrentLimitingStatus())) {
+ Assert.notNull(gatewayConfig.getApiCurrentLimitingThreshold(), "限流值不能为空");
+ Assert.isTrue(gatewayConfig.getApiCurrentLimitingThreshold() >= 0, "限流值>=0");
// 页面没有,这里给个默认值
if (gatewayConfig.getApiCurrentLimitingTimeWindow() == null) {
gatewayConfig.setApiCurrentLimitingTimeWindow(1);
- }else {
- Assert.isTrue(gatewayConfig.getApiCurrentLimitingTimeWindow() >= 0,"限流窗口值>=0");
+ } else {
+ Assert.isTrue(gatewayConfig.getApiCurrentLimitingTimeWindow() >= 0, "限流窗口值>=0");
}
- Assert.isTrue(JSON.isJSONObject(gatewayConfig.getApiCurrentLimitingDefaultResponse()),"请输入正确的JSON格式限流响应信息");
+ Assert.isTrue(apijson.JSON.isJSONObject(gatewayConfig.getApiCurrentLimitingDefaultResponse()), "请输入正确的JSON格式限流响应信息");
}
- if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getAppCurrentLimitingStatus())){
- Assert.notNull(gatewayConfig.getAppCurrentLimitingThreshold(),"限流值不能为空");
- Assert.isTrue(gatewayConfig.getAppCurrentLimitingThreshold() >= 0,"限流值>=0");
+ if (GatewayDataStatus.ENABLE.getCode().equals(gatewayConfig.getAppCurrentLimitingStatus())) {
+ Assert.notNull(gatewayConfig.getAppCurrentLimitingThreshold(), "限流值不能为空");
+ Assert.isTrue(gatewayConfig.getAppCurrentLimitingThreshold() >= 0, "限流值>=0");
// 页面没有,这里给个默认值
if (gatewayConfig.getAppCurrentLimitingTimeWindow() == null) {
gatewayConfig.setAppCurrentLimitingTimeWindow(1);
- }else {
- Assert.isTrue(gatewayConfig.getAppCurrentLimitingTimeWindow() >= 0,"限流窗口值>=0");
+ } else {
+ Assert.isTrue(gatewayConfig.getAppCurrentLimitingTimeWindow() >= 0, "限流窗口值>=0");
}
- Assert.isTrue(JSON.isJSONObject(gatewayConfig.getAppCurrentLimitingDefaultResponse()),"请输入正确的JSON格式限流响应信息");
+ Assert.isTrue(apijson.JSON.isJSONObject(gatewayConfig.getAppCurrentLimitingDefaultResponse()), "请输入正确的JSON格式限流响应信息");
}
}
}