mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-19 17:58:17 +08:00
路由规则修改
This commit is contained in:
parent
55ccb406e7
commit
98722a6b22
@ -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<IscAppService
|
||||
result = appServiceService.updateById(updateData);
|
||||
if(Objects.nonNull(service)) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,7 @@ import com.ruoyi.common.utils.SecurityUtils;
|
||||
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.IscAppServiceBo;
|
||||
@ -26,6 +27,7 @@ import com.ruoyi.isc.domain.vo.IscAppServiceVo;
|
||||
import com.ruoyi.isc.mapper.IscAppServiceMapper;
|
||||
import com.ruoyi.isc.service.IIscAppServiceApplyService;
|
||||
import com.ruoyi.isc.service.IIscAppServiceService;
|
||||
import com.ruoyi.isc.service.IIscApplicationService;
|
||||
import com.ruoyi.isc.service.IIscServiceService;
|
||||
import com.ruoyi.isc.utils.RouteUtils;
|
||||
import com.ruoyi.isc.utils.beans.IscRouteDefinition;
|
||||
@ -53,6 +55,8 @@ public class IscAppServiceServiceImpl extends ServicePlusImpl<IscAppServiceMappe
|
||||
private IIscServiceService serviceService;
|
||||
@Resource
|
||||
private IIscAppServiceApplyService applyService;
|
||||
@Resource
|
||||
private IIscApplicationService applicationService;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
@ -208,19 +212,29 @@ public class IscAppServiceServiceImpl extends ServicePlusImpl<IscAppServiceMappe
|
||||
}
|
||||
Set<Long> serviceIds = list.stream().map(IscAppService::getServiceId).collect(Collectors.toSet());
|
||||
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()
|
||||
.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<>();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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<IscFilterDefinition> 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<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();
|
||||
retryFilter.setName("Retry");
|
||||
retryFilter.getArgs().put("retries", "1");
|
||||
route.setFilters(Arrays.asList(stripPrefixFilter, retryFilter));
|
||||
filters.add(retryFilter);
|
||||
route.setFilters(filters);
|
||||
|
||||
//其他信息
|
||||
Map<String, Object> metadata = route.getMetadata();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user