mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-20 02:08:15 +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.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user