mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-12 07:02:14 +08:00
Merge branch 'master' into develop
This commit is contained in:
@@ -12,7 +12,9 @@ import com.gitee.sop.gatewaycommon.gateway.route.ReadBodyRoutePredicateFactory;
|
||||
import com.gitee.sop.gatewaycommon.manager.AbstractConfiguration;
|
||||
import com.gitee.sop.gatewaycommon.manager.RouteManager;
|
||||
import com.gitee.sop.gatewaycommon.manager.RouteRepositoryContext;
|
||||
import com.gitee.sop.gatewaycommon.param.ParamBuilder;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
@@ -21,6 +23,7 @@ import org.springframework.core.annotation.Order;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.http.codec.ServerCodecConfigurer;
|
||||
import org.springframework.web.reactive.result.view.ViewResolver;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -54,6 +57,12 @@ public class BaseGatewayConfiguration extends AbstractConfiguration {
|
||||
return jsonExceptionHandler;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
ParamBuilder<ServerWebExchange> paramBuilder() {
|
||||
return ApiConfig.getInstance().getGatewayParamBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理返回结果
|
||||
*/
|
||||
|
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.gitee.sop.servercommon.bean.ServiceApiInfo;
|
||||
import com.gitee.sop.servercommon.bean.ZookeeperTool;
|
||||
import com.gitee.sop.servercommon.exception.ZookeeperPathNotExistException;
|
||||
import com.gitee.sop.servercommon.route.GatewayPredicateDefinition;
|
||||
import com.gitee.sop.servercommon.route.GatewayRouteDefinition;
|
||||
import com.gitee.sop.servercommon.route.ServiceRouteInfo;
|
||||
import lombok.Getter;
|
||||
@@ -17,6 +18,7 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -39,6 +41,15 @@ public class ServiceZookeeperApiMetaManager implements ApiMetaManager {
|
||||
|
||||
private static final String DEFAULT_CONTEXT_PATH = "/";
|
||||
|
||||
/**
|
||||
* NameVersion=alipay.story.get1.0
|
||||
* see com.gitee.sop.gatewaycommon.routeDefinition.NameVersionRoutePredicateFactory
|
||||
*/
|
||||
private static String QUERY_PREDICATE_DEFINITION_TPL = "NameVersion=%s";
|
||||
|
||||
private static ServiceApiInfo.ApiMeta FIRST_API_META = new ServiceApiInfo.ApiMeta("_first.route_", "/", "v_000");
|
||||
|
||||
|
||||
private Environment environment;
|
||||
|
||||
private ZookeeperTool zookeeperTool;
|
||||
@@ -94,6 +105,7 @@ public class ServiceZookeeperApiMetaManager implements ApiMetaManager {
|
||||
protected ServiceRouteInfo buildServiceGatewayInfo(ServiceApiInfo serviceApiInfo) {
|
||||
List<ServiceApiInfo.ApiMeta> apis = serviceApiInfo.getApis();
|
||||
List<GatewayRouteDefinition> routeDefinitionList = new ArrayList<>(apis.size());
|
||||
routeDefinitionList.add(this.buildReadBodyRouteDefinition(serviceApiInfo));
|
||||
for (ServiceApiInfo.ApiMeta apiMeta : apis) {
|
||||
GatewayRouteDefinition gatewayRouteDefinition = this.buildGatewayRouteDefinition(serviceApiInfo, apiMeta);
|
||||
routeDefinitionList.add(gatewayRouteDefinition);
|
||||
@@ -136,6 +148,7 @@ public class ServiceZookeeperApiMetaManager implements ApiMetaManager {
|
||||
BeanUtils.copyProperties(apiMeta, gatewayRouteDefinition);
|
||||
gatewayRouteDefinition.setId(routeId);
|
||||
gatewayRouteDefinition.setFilters(Collections.emptyList());
|
||||
gatewayRouteDefinition.setPredicates(this.buildPredicates(apiMeta));
|
||||
String uri = this.buildUri(serviceApiInfo, apiMeta);
|
||||
String path = this.buildServletPath(serviceApiInfo, apiMeta);
|
||||
gatewayRouteDefinition.setUri(uri);
|
||||
@@ -143,6 +156,30 @@ public class ServiceZookeeperApiMetaManager implements ApiMetaManager {
|
||||
return gatewayRouteDefinition;
|
||||
}
|
||||
|
||||
protected List<GatewayPredicateDefinition> buildPredicates(ServiceApiInfo.ApiMeta apiMeta) {
|
||||
GatewayPredicateDefinition gatewayPredicateDefinition = new GatewayPredicateDefinition();
|
||||
gatewayPredicateDefinition.setName("ReadBody");
|
||||
return Arrays.asList(gatewayPredicateDefinition, this.buildNameVersionPredicateDefinition(apiMeta));
|
||||
}
|
||||
|
||||
protected GatewayPredicateDefinition buildNameVersionPredicateDefinition(ServiceApiInfo.ApiMeta apiMeta) {
|
||||
return new GatewayPredicateDefinition(String.format(QUERY_PREDICATE_DEFINITION_TPL, apiMeta.fetchNameVersion()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加com.gitee.sop.gatewaycommon.routeDefinition.ReadBodyRoutePredicateFactory,解决form表单获取不到问题
|
||||
*
|
||||
* @return 返回路由定义
|
||||
*/
|
||||
protected GatewayRouteDefinition buildReadBodyRouteDefinition(ServiceApiInfo serviceApiInfo) {
|
||||
GatewayRouteDefinition readBodyRouteDefinition = this.buildGatewayRouteDefinition(serviceApiInfo, FIRST_API_META);
|
||||
readBodyRouteDefinition.setOrder(Integer.MIN_VALUE);
|
||||
|
||||
readBodyRouteDefinition.setPredicates(this.buildPredicates(FIRST_API_META));
|
||||
|
||||
return readBodyRouteDefinition;
|
||||
}
|
||||
|
||||
protected String buildUri(ServiceApiInfo serviceApiInfo, ServiceApiInfo.ApiMeta apiMeta) {
|
||||
return PROTOCOL_LOAD_BALANCE + serviceApiInfo.getServiceId();
|
||||
}
|
||||
|
Reference in New Issue
Block a user