From 98722a6b222f163830cd6c3b4d240418b21f5397 Mon Sep 17 00:00:00 2001 From: Wenchao Gong Date: Wed, 29 Sep 2021 23:48:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E8=A7=84=E5=88=99=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/IscAppServiceApplyServiceImpl.java | 4 +- .../impl/IscAppServiceServiceImpl.java | 20 +++++++-- .../java/com/ruoyi/isc/utils/RouteUtils.java | 45 ++++++++++++++++--- 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/ruoyi-isc/src/main/java/com/ruoyi/isc/service/impl/IscAppServiceApplyServiceImpl.java b/ruoyi-isc/src/main/java/com/ruoyi/isc/service/impl/IscAppServiceApplyServiceImpl.java index 256b18b85..483a39469 100644 --- a/ruoyi-isc/src/main/java/com/ruoyi/isc/service/impl/IscAppServiceApplyServiceImpl.java +++ b/ruoyi-isc/src/main/java/com/ruoyi/isc/service/impl/IscAppServiceApplyServiceImpl.java @@ -15,6 +15,7 @@ import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.isc.domain.IscAppService; import com.ruoyi.isc.domain.IscAppServiceApply; +import com.ruoyi.isc.domain.IscApplication; import com.ruoyi.isc.domain.IscService; import com.ruoyi.isc.domain.bo.IscAppServiceApplyBo; import com.ruoyi.isc.domain.bo.IscAuditBo; @@ -173,7 +174,8 @@ public class IscAppServiceApplyServiceImpl extends ServicePlusImpl serviceIds = list.stream().map(IscAppService::getServiceId).collect(Collectors.toSet()); Map serviceMap = serviceService.list(Wrappers.lambdaQuery() - .select(IscService::getServiceId, IscService::getServiceAddr) + .select(IscService::getServiceId, IscService::getServiceAddr, IscService::getHiddenParams, IscService::getRequestMethod) .in(IscService::getServiceId, serviceIds)).stream() .collect(Collectors.toMap(IscService::getServiceId, Function.identity())); + Set applicationIds = list.stream().map(IscAppService::getApplicationId).collect(Collectors.toSet()); + Map accessKeyMap = applicationService.list(Wrappers.lambdaQuery() + .select(IscApplication::getApplicationId, IscApplication::getAccessKey) + .in(IscApplication::getApplicationId, applicationIds)).stream() + .collect(Collectors.toMap(IscApplication::getApplicationId, IscApplication::getAccessKey)); List routes = new ArrayList<>(); for (IscAppService appService : list) { IscService service = serviceMap.get(appService.getServiceId()); if(Objects.isNull(service)) { - log.error("路由初始化失败: 服务[{}]信息不存在!", appService.getServiceId()); + log.error("路由初始化失败: id:[{}],服务[{}]信息不存在!", appService.getAppServiceId(), appService.getServiceId()); 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); } diff --git a/ruoyi-isc/src/main/java/com/ruoyi/isc/utils/RouteUtils.java b/ruoyi-isc/src/main/java/com/ruoyi/isc/utils/RouteUtils.java index 69eb59eec..90f7af214 100644 --- a/ruoyi-isc/src/main/java/com/ruoyi/isc/utils/RouteUtils.java +++ b/ruoyi-isc/src/main/java/com/ruoyi/isc/utils/RouteUtils.java @@ -3,9 +3,11 @@ package com.ruoyi.isc.utils; import com.ruoyi.common.constant.IscConstants; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; 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.IscPredicateDefinition; import com.ruoyi.isc.utils.beans.IscRouteDefinition; @@ -130,31 +132,64 @@ public class RouteUtils { /** * 生成 路由信息 * - * @param appService 应用服务信息 - * @param serviceAddr 服务地址 + * @param appService 应用服务信息 + * @param service 服务信息 + * @param ak AK * @return 路由信息 */ - public static IscRouteDefinition generateRoute(IscAppService appService, String serviceAddr) + public static IscRouteDefinition generateRoute(IscAppService appService, IscService service, String ak) { IscRouteDefinition route = new IscRouteDefinition(); route.setId(String.valueOf(appService.getAppServiceId())); + final String serviceAddr = service.getServiceAddr(); 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(); pathPredicate.setName("Path"); pathPredicate.getArgs().put("pattern", appService.getVirtualAddr()); - route.setPredicates(Arrays.asList(pathPredicate)); + route.setPredicates(Arrays.asList(methodPredicate, queryPredicate, pathPredicate)); //过滤器 + List filters = new ArrayList<>(); IscFilterDefinition stripPrefixFilter = new IscFilterDefinition(); stripPrefixFilter.setName("StripPrefix"); 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 paramsMap = JsonUtils.parseMap(hiddenParams); + Iterator> it = paramsMap.entrySet().iterator(); + while (it.hasNext()) { + IscFilterDefinition addRequestParameterFilter = new IscFilterDefinition(); + Map args = addRequestParameterFilter.getArgs(); + addRequestParameterFilter.setName("AddRequestParameter"); + Map.Entry param = it.next(); + args.put("name", param.getKey()); + args.put("value", String.valueOf(param.getValue())); + filters.add(addRequestParameterFilter); + } + } IscFilterDefinition retryFilter = new IscFilterDefinition(); retryFilter.setName("Retry"); retryFilter.getArgs().put("retries", "1"); - route.setFilters(Arrays.asList(stripPrefixFilter, retryFilter)); + filters.add(retryFilter); + route.setFilters(filters); //其他信息 Map metadata = route.getMetadata();