This commit is contained in:
tanghc
2020-01-17 11:24:57 +08:00
parent 935bb2a454
commit 820909036b
12 changed files with 133 additions and 13 deletions

View File

@@ -31,3 +31,19 @@
- 运行WebsiteServerApplication.java
- 访问http://localhost:8083
## 基本配置
`sop-gateway`下的application-dev.properties配置各项配置说明如下
```properties
# 忽略验证设置true则所有接口不会进行签名校验默认false
sop.api-config.ignore-validate=false
# 是否对结果进行合并默认true
sop.api-config.merge-result=true
# 显示返回sign默认true
sop.api-config.show-return-sign=true
# 是否开启限流功能默认true
sop.api-config.open-limit=true
# 请求超时时间默认5分钟即允许在5分钟内重复请求默认300
sop.api-config.timeout-seconds=300
```

View File

@@ -119,6 +119,12 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- provided -->
<dependency>
<groupId>org.projectlombok</groupId>

View File

@@ -1,5 +1,6 @@
package com.gitee.sop.bridge;
import com.gitee.sop.gatewaycommon.config.BaseGatewayAutoConfiguration;
import com.gitee.sop.gatewaycommon.gateway.configuration.AlipayGatewayConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
@@ -13,5 +14,5 @@ import org.springframework.context.annotation.Import;
@Configuration
@Import(AlipayGatewayConfiguration.class)
@AutoConfigureBefore(RibbonAutoConfiguration.class)
public class SopGatewayAutoConfiguration {
public class SopGatewayAutoConfiguration extends BaseGatewayAutoConfiguration {
}

View File

@@ -1,5 +1,6 @@
package com.gitee.sop.bridge;
import com.gitee.sop.gatewaycommon.config.BaseGatewayAutoConfiguration;
import com.gitee.sop.gatewaycommon.zuul.configuration.AlipayZuulConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
@@ -18,6 +19,6 @@ import org.springframework.context.annotation.Import;
// 如果不加会出现basicErrorController和zuulErrorController冲突
// zuulErrorController是SOP中的提前加载后basicErrorController就不会加载
@AutoConfigureBefore({ErrorMvcAutoConfiguration.class})
public class SopGatewayAutoConfiguration {
public class SopGatewayAutoConfiguration extends BaseGatewayAutoConfiguration {
}

View File

@@ -18,12 +18,12 @@ import com.gitee.sop.gatewaycommon.manager.IsvRoutePermissionManager;
import com.gitee.sop.gatewaycommon.manager.LimitConfigManager;
import com.gitee.sop.gatewaycommon.manager.RouteConfigManager;
import com.gitee.sop.gatewaycommon.manager.ServiceErrorManager;
import com.gitee.sop.gatewaycommon.param.ParamBuilder;
import com.gitee.sop.gatewaycommon.param.ParameterFormatter;
import com.gitee.sop.gatewaycommon.result.DataNameBuilder;
import com.gitee.sop.gatewaycommon.result.DefaultDataNameBuilder;
import com.gitee.sop.gatewaycommon.result.ResultAppender;
import com.gitee.sop.gatewaycommon.result.ResultExecutor;
import com.gitee.sop.gatewaycommon.result.ResultExecutorForGateway;
import com.gitee.sop.gatewaycommon.result.ResultExecutorForZuul;
import com.gitee.sop.gatewaycommon.secret.CacheIsvManager;
import com.gitee.sop.gatewaycommon.secret.IsvManager;
import com.gitee.sop.gatewaycommon.session.ApiSessionManager;
@@ -38,10 +38,8 @@ import com.gitee.sop.gatewaycommon.validate.Validator;
import com.gitee.sop.gatewaycommon.zuul.controller.ZuulErrorController;
import com.gitee.sop.gatewaycommon.zuul.param.ZuulParamBuilder;
import com.gitee.sop.gatewaycommon.zuul.result.ZuulResultExecutor;
import com.netflix.zuul.context.RequestContext;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import java.util.ArrayList;
import java.util.Comparator;
@@ -65,12 +63,12 @@ public class ApiConfig {
/**
* gateway合并结果处理
*/
private ResultExecutor<ServerWebExchange, String> gatewayResultExecutor = new GatewayResultExecutor();
private ResultExecutorForGateway gatewayResultExecutor = new GatewayResultExecutor();
/**
* zuul合并结果处理
*/
private ResultExecutor<RequestContext, String> zuulResultExecutor = new ZuulResultExecutor();
private ResultExecutorForZuul zuulResultExecutor = new ZuulResultExecutor();
/**
* isv管理
@@ -90,7 +88,7 @@ public class ApiConfig {
/**
* 参数解析zuul
*/
private ParamBuilder<RequestContext> zuulParamBuilder = new ZuulParamBuilder();
private ZuulParamBuilder zuulParamBuilder = new ZuulParamBuilder();
/**
* 验证

View File

@@ -0,0 +1,48 @@
package com.gitee.sop.gatewaycommon.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.ArrayList;
import java.util.List;
/**
* @author tanghc
*/
@Data
@ConfigurationProperties(prefix = "sop.api-config")
public class ApiConfigProperties {
private List<String> i18nModules = new ArrayList<>();
/**
* 忽略验证设置true则所有接口不会进行签名校验
*/
private boolean ignoreValidate;
/**
* 是否对结果进行合并。<br>
* 默认情况下是否合并结果由微服务端决定,一旦指定该值,则由该值决定,不管微服务端如何设置。
*/
private Boolean mergeResult;
/**
* 请求超时时间默认5分钟即允许在5分钟内重复请求
*/
private int timeoutSeconds = 300;
/**
* 是否开启限流功能
*/
private boolean openLimit = true;
/**
* 显示返回sign
*/
private boolean showReturnSign = true;
/**
* 保存错误信息容器的容量
*/
private int storeErrorCapacity = 20;
}

View File

@@ -0,0 +1,29 @@
package com.gitee.sop.gatewaycommon.config;
import com.alibaba.fastjson.JSON;
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import javax.annotation.PostConstruct;
/**
* @author tanghc
*/
@Slf4j
@EnableConfigurationProperties(ApiConfigProperties.class)
public class BaseGatewayAutoConfiguration {
@Autowired
private ApiConfigProperties apiConfigProperties;
@PostConstruct
public void after() {
log.info("网关基本配置:{}", JSON.toJSONString(apiConfigProperties));
ApiConfig apiConfig = ApiConfig.getInstance();
BeanUtils.copyProperties(apiConfigProperties, apiConfig);
}
}

View File

@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gitee.sop.gatewaycommon.message.Error;
import com.gitee.sop.gatewaycommon.result.ApiResult;
import com.gitee.sop.gatewaycommon.result.ResultExecutor;
import com.gitee.sop.gatewaycommon.result.ResultExecutorForZuul;
import com.gitee.sop.gatewaycommon.zuul.result.ZuulResultExecutor;
import com.netflix.zuul.context.RequestContext;
@@ -13,7 +13,7 @@ import java.util.Optional;
/**
* @author tanghc
*/
public class EasyopenResultExecutor implements ResultExecutor<RequestContext, String> {
public class EasyopenResultExecutor implements ResultExecutorForZuul {
boolean onlyReturnData;

View File

@@ -9,6 +9,7 @@ import com.gitee.sop.gatewaycommon.message.Error;
import com.gitee.sop.gatewaycommon.message.ErrorEnum;
import com.gitee.sop.gatewaycommon.param.ApiParam;
import com.gitee.sop.gatewaycommon.result.BaseExecutorAdapter;
import com.gitee.sop.gatewaycommon.result.ResultExecutorForGateway;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.util.CollectionUtils;
@@ -22,7 +23,8 @@ import java.util.Map;
* @author tanghc
*/
@Slf4j
public class GatewayResultExecutor extends BaseExecutorAdapter<ServerWebExchange, String> {
public class GatewayResultExecutor extends BaseExecutorAdapter<ServerWebExchange, String>
implements ResultExecutorForGateway {
@Override
public int getResponseStatus(ServerWebExchange exchange) {

View File

@@ -0,0 +1,9 @@
package com.gitee.sop.gatewaycommon.result;
import org.springframework.web.server.ServerWebExchange;
/**
* @author tanghc
*/
public interface ResultExecutorForGateway extends ResultExecutor<ServerWebExchange, String> {
}

View File

@@ -0,0 +1,9 @@
package com.gitee.sop.gatewaycommon.result;
import com.netflix.zuul.context.RequestContext;
/**
* @author tanghc
*/
public interface ResultExecutorForZuul extends ResultExecutor<RequestContext, String> {
}

View File

@@ -8,6 +8,7 @@ import com.gitee.sop.gatewaycommon.message.Error;
import com.gitee.sop.gatewaycommon.message.ErrorEnum;
import com.gitee.sop.gatewaycommon.param.ApiParam;
import com.gitee.sop.gatewaycommon.result.BaseExecutorAdapter;
import com.gitee.sop.gatewaycommon.result.ResultExecutorForZuul;
import com.gitee.sop.gatewaycommon.zuul.ZuulContext;
import com.netflix.util.Pair;
import com.netflix.zuul.context.RequestContext;
@@ -20,7 +21,7 @@ import java.util.List;
* @author tanghc
*/
@Slf4j
public class ZuulResultExecutor extends BaseExecutorAdapter<RequestContext, String> {
public class ZuulResultExecutor extends BaseExecutorAdapter<RequestContext, String> implements ResultExecutorForZuul {
@Override
protected boolean isMergeResult(RequestContext request) {