路由规则修改

This commit is contained in:
Wenchao Gong 2021-09-29 23:48:48 +08:00
parent 55ccb406e7
commit 98722a6b22
3 changed files with 60 additions and 9 deletions

View File

@ -15,6 +15,7 @@ import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.isc.domain.IscAppService; import com.ruoyi.isc.domain.IscAppService;
import com.ruoyi.isc.domain.IscAppServiceApply; import com.ruoyi.isc.domain.IscAppServiceApply;
import com.ruoyi.isc.domain.IscApplication;
import com.ruoyi.isc.domain.IscService; import com.ruoyi.isc.domain.IscService;
import com.ruoyi.isc.domain.bo.IscAppServiceApplyBo; import com.ruoyi.isc.domain.bo.IscAppServiceApplyBo;
import com.ruoyi.isc.domain.bo.IscAuditBo; import com.ruoyi.isc.domain.bo.IscAuditBo;
@ -173,7 +174,8 @@ public class IscAppServiceApplyServiceImpl extends ServicePlusImpl<IscAppService
result = appServiceService.updateById(updateData); result = appServiceService.updateById(updateData);
if(Objects.nonNull(service)) { if(Objects.nonNull(service)) {
IscAppService dbAppService = appServiceService.getById(apply.getAppServiceId()); IscAppService dbAppService = appServiceService.getById(apply.getAppServiceId());
route = RouteUtils.generateRoute(dbAppService, service.getServiceAddr()); IscApplication application = applicationService.getById(dbAppService.getApplicationId());
route = RouteUtils.generateRoute(dbAppService, service, application.getAccessKey());
RouteUtils.saveRoute(route); RouteUtils.saveRoute(route);
} }
} }

View File

@ -19,6 +19,7 @@ import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.isc.domain.IscAppService; import com.ruoyi.isc.domain.IscAppService;
import com.ruoyi.isc.domain.IscAppServiceApply; import com.ruoyi.isc.domain.IscAppServiceApply;
import com.ruoyi.isc.domain.IscApplication;
import com.ruoyi.isc.domain.IscService; import com.ruoyi.isc.domain.IscService;
import com.ruoyi.isc.domain.bo.IscAppServiceApplyBo; import com.ruoyi.isc.domain.bo.IscAppServiceApplyBo;
import com.ruoyi.isc.domain.bo.IscAppServiceBo; import com.ruoyi.isc.domain.bo.IscAppServiceBo;
@ -26,6 +27,7 @@ import com.ruoyi.isc.domain.vo.IscAppServiceVo;
import com.ruoyi.isc.mapper.IscAppServiceMapper; import com.ruoyi.isc.mapper.IscAppServiceMapper;
import com.ruoyi.isc.service.IIscAppServiceApplyService; import com.ruoyi.isc.service.IIscAppServiceApplyService;
import com.ruoyi.isc.service.IIscAppServiceService; import com.ruoyi.isc.service.IIscAppServiceService;
import com.ruoyi.isc.service.IIscApplicationService;
import com.ruoyi.isc.service.IIscServiceService; import com.ruoyi.isc.service.IIscServiceService;
import com.ruoyi.isc.utils.RouteUtils; import com.ruoyi.isc.utils.RouteUtils;
import com.ruoyi.isc.utils.beans.IscRouteDefinition; import com.ruoyi.isc.utils.beans.IscRouteDefinition;
@ -53,6 +55,8 @@ public class IscAppServiceServiceImpl extends ServicePlusImpl<IscAppServiceMappe
private IIscServiceService serviceService; private IIscServiceService serviceService;
@Resource @Resource
private IIscAppServiceApplyService applyService; private IIscAppServiceApplyService applyService;
@Resource
private IIscApplicationService applicationService;
@PostConstruct @PostConstruct
public void init() { public void init() {
@ -208,19 +212,29 @@ public class IscAppServiceServiceImpl extends ServicePlusImpl<IscAppServiceMappe
} }
Set<Long> serviceIds = list.stream().map(IscAppService::getServiceId).collect(Collectors.toSet()); Set<Long> serviceIds = list.stream().map(IscAppService::getServiceId).collect(Collectors.toSet());
Map<Long, IscService> serviceMap = serviceService.list(Wrappers.<IscService>lambdaQuery() Map<Long, IscService> serviceMap = serviceService.list(Wrappers.<IscService>lambdaQuery()
.select(IscService::getServiceId, IscService::getServiceAddr) .select(IscService::getServiceId, IscService::getServiceAddr, IscService::getHiddenParams, IscService::getRequestMethod)
.in(IscService::getServiceId, serviceIds)).stream() .in(IscService::getServiceId, serviceIds)).stream()
.collect(Collectors.toMap(IscService::getServiceId, Function.identity())); .collect(Collectors.toMap(IscService::getServiceId, Function.identity()));
Set<Long> applicationIds = list.stream().map(IscAppService::getApplicationId).collect(Collectors.toSet());
Map<Long, String> accessKeyMap = applicationService.list(Wrappers.<IscApplication>lambdaQuery()
.select(IscApplication::getApplicationId, IscApplication::getAccessKey)
.in(IscApplication::getApplicationId, applicationIds)).stream()
.collect(Collectors.toMap(IscApplication::getApplicationId, IscApplication::getAccessKey));
List<IscRouteDefinition> routes = new ArrayList<>(); List<IscRouteDefinition> routes = new ArrayList<>();
for (IscAppService appService : list) for (IscAppService appService : list)
{ {
IscService service = serviceMap.get(appService.getServiceId()); IscService service = serviceMap.get(appService.getServiceId());
if(Objects.isNull(service)) { if(Objects.isNull(service)) {
log.error("路由初始化失败: 服务[{}]信息不存在!", appService.getServiceId()); log.error("路由初始化失败: id:[{}],服务[{}]信息不存在!", appService.getAppServiceId(), appService.getServiceId());
continue; continue;
} }
routes.add(RouteUtils.generateRoute(appService, service.getServiceAddr())); String ak = accessKeyMap.get(appService.getApplicationId());
if(StringUtils.isBlank(ak)) {
log.error("路由初始化失败: id:[{}],ak[{}]信息不存在!", appService.getAppServiceId(), appService.getApplicationId());
continue;
}
routes.add(RouteUtils.generateRoute(appService, service, ak));
} }
RouteUtils.refreshRoute(routes); RouteUtils.refreshRoute(routes);
} }

View File

@ -3,9 +3,11 @@ package com.ruoyi.isc.utils;
import com.ruoyi.common.constant.IscConstants; import com.ruoyi.common.constant.IscConstants;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.isc.domain.IscAppService; import com.ruoyi.isc.domain.IscAppService;
import com.ruoyi.isc.domain.IscService;
import com.ruoyi.isc.utils.beans.IscFilterDefinition; import com.ruoyi.isc.utils.beans.IscFilterDefinition;
import com.ruoyi.isc.utils.beans.IscPredicateDefinition; import com.ruoyi.isc.utils.beans.IscPredicateDefinition;
import com.ruoyi.isc.utils.beans.IscRouteDefinition; import com.ruoyi.isc.utils.beans.IscRouteDefinition;
@ -130,31 +132,64 @@ public class RouteUtils {
/** /**
* 生成 路由信息 * 生成 路由信息
* *
* @param appService 应用服务信息 * @param appService 应用服务信息
* @param serviceAddr 服务地址 * @param service 服务信息
* @param ak AK
* @return 路由信息 * @return 路由信息
*/ */
public static IscRouteDefinition generateRoute(IscAppService appService, String serviceAddr) public static IscRouteDefinition generateRoute(IscAppService appService, IscService service, String ak)
{ {
IscRouteDefinition route = new IscRouteDefinition(); IscRouteDefinition route = new IscRouteDefinition();
route.setId(String.valueOf(appService.getAppServiceId())); route.setId(String.valueOf(appService.getAppServiceId()));
final String serviceAddr = service.getServiceAddr();
route.setUri(getURI(serviceAddr.substring(0, serviceAddr.length() - getPathUri(serviceAddr).length()))); route.setUri(getURI(serviceAddr.substring(0, serviceAddr.length() - getPathUri(serviceAddr).length())));
//断言 //断言
IscPredicateDefinition methodPredicate = new IscPredicateDefinition();
methodPredicate.setName("Method");
methodPredicate.getArgs().put("methods", service.getRequestMethod());
IscPredicateDefinition queryPredicate = new IscPredicateDefinition();
queryPredicate.setName("Query");
queryPredicate.getArgs().put("param", "ak");
IscPredicateDefinition pathPredicate = new IscPredicateDefinition(); IscPredicateDefinition pathPredicate = new IscPredicateDefinition();
pathPredicate.setName("Path"); pathPredicate.setName("Path");
pathPredicate.getArgs().put("pattern", appService.getVirtualAddr()); pathPredicate.getArgs().put("pattern", appService.getVirtualAddr());
route.setPredicates(Arrays.asList(pathPredicate)); route.setPredicates(Arrays.asList(methodPredicate, queryPredicate, pathPredicate));
//过滤器 //过滤器
List<IscFilterDefinition> filters = new ArrayList<>();
IscFilterDefinition stripPrefixFilter = new IscFilterDefinition(); IscFilterDefinition stripPrefixFilter = new IscFilterDefinition();
stripPrefixFilter.setName("StripPrefix"); stripPrefixFilter.setName("StripPrefix");
stripPrefixFilter.getArgs().put("parts", "1"); stripPrefixFilter.getArgs().put("parts", "1");
filters.add(stripPrefixFilter);
IscFilterDefinition removeRequestParameterFilter = new IscFilterDefinition();
removeRequestParameterFilter.setName("RemoveRequestParameter");
removeRequestParameterFilter.getArgs().put("name", "ak");
filters.add(removeRequestParameterFilter);
String hiddenParams = service.getHiddenParams();
if(StringUtils.isNotBlank(hiddenParams)) {
Map<String, Object> paramsMap = JsonUtils.parseMap(hiddenParams);
Iterator<Map.Entry<String, Object>> it = paramsMap.entrySet().iterator();
while (it.hasNext()) {
IscFilterDefinition addRequestParameterFilter = new IscFilterDefinition();
Map<String, String> args = addRequestParameterFilter.getArgs();
addRequestParameterFilter.setName("AddRequestParameter");
Map.Entry<String, Object> param = it.next();
args.put("name", param.getKey());
args.put("value", String.valueOf(param.getValue()));
filters.add(addRequestParameterFilter);
}
}
IscFilterDefinition retryFilter = new IscFilterDefinition(); IscFilterDefinition retryFilter = new IscFilterDefinition();
retryFilter.setName("Retry"); retryFilter.setName("Retry");
retryFilter.getArgs().put("retries", "1"); retryFilter.getArgs().put("retries", "1");
route.setFilters(Arrays.asList(stripPrefixFilter, retryFilter)); filters.add(retryFilter);
route.setFilters(filters);
//其他信息 //其他信息
Map<String, Object> metadata = route.getMetadata(); Map<String, Object> metadata = route.getMetadata();