diff --git a/changelog.md b/changelog.md
index 56aefef7..82ccf6eb 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
# changelog
+## 1.7.1
+
+- 支持接口名版本号放在url后面
+
## 1.7.0
- 可自定义数据节点名称
diff --git a/doc/docs/_sidebar.md b/doc/docs/_sidebar.md
index 24cfe175..3ffa6033 100644
--- a/doc/docs/_sidebar.md
+++ b/doc/docs/_sidebar.md
@@ -1,25 +1,25 @@
-* [首页](/?t=1557111672942)
+* [首页](/?t=1557125401034)
* 开发文档
- * [快速体验](files/10010_快速体验.md?t=1557111672945)
- * [项目接入到SOP](files/10011_项目接入到SOP.md?t=1557111672960)
- * [新增接口](files/10020_新增接口.md?t=1557111672961)
- * [业务参数校验](files/10030_业务参数校验.md?t=1557111672961)
- * [错误处理](files/10040_错误处理.md?t=1557111672961)
- * [编写文档](files/10041_编写文档.md?t=1557111672961)
- * [接口交互详解](files/10050_接口交互详解.md?t=1557111672961)
- * [easyopen支持](files/10070_easyopen支持.md?t=1557111672961)
- * [使用签名校验工具](files/10080_使用签名校验工具.md?t=1557111672961)
- * [ISV管理](files/10085_ISV管理.md?t=1557111672961)
- * [路由授权](files/10090_路由授权.md?t=1557111672961)
- * [接口限流](files/10092_接口限流.md?t=1557111672961)
- * [SDK开发](files/10095_SDK开发.md?t=1557111672962)
- * [使用SpringCloudGateway](files/10096_使用SpringCloudGateway.md?t=1557111672962)
- * [应用授权](files/10097_应用授权.md?t=1557111672962)
- * [更改数据节点名称](files/10099_更改数据节点名称.md?t=1557111672962)
- * [对接前端](files/10100_对接前端.md?t=1557111672962)
+ * [快速体验](files/10010_快速体验.md?t=1557125401037)
+ * [项目接入到SOP](files/10011_项目接入到SOP.md?t=1557125401053)
+ * [新增接口](files/10020_新增接口.md?t=1557125401053)
+ * [业务参数校验](files/10030_业务参数校验.md?t=1557125401053)
+ * [错误处理](files/10040_错误处理.md?t=1557125401053)
+ * [编写文档](files/10041_编写文档.md?t=1557125401053)
+ * [接口交互详解](files/10050_接口交互详解.md?t=1557125401053)
+ * [easyopen支持](files/10070_easyopen支持.md?t=1557125401053)
+ * [使用签名校验工具](files/10080_使用签名校验工具.md?t=1557125401053)
+ * [ISV管理](files/10085_ISV管理.md?t=1557125401053)
+ * [路由授权](files/10090_路由授权.md?t=1557125401054)
+ * [接口限流](files/10092_接口限流.md?t=1557125401054)
+ * [SDK开发](files/10095_SDK开发.md?t=1557125401054)
+ * [使用SpringCloudGateway](files/10096_使用SpringCloudGateway.md?t=1557125401054)
+ * [应用授权](files/10097_应用授权.md?t=1557125401054)
+ * [更改数据节点名称](files/10099_更改数据节点名称.md?t=1557125401054)
+ * [对接前端](files/10100_对接前端.md?t=1557125401054)
* 原理分析
- * [原理分析之@ApiMapping](files/90010_原理分析之@ApiMapping.md?t=1557111672962)
- * [原理分析之路由存储](files/90011_原理分析之路由存储.md?t=1557111672962)
- * [原理分析之如何路由](files/90012_原理分析之如何路由.md?t=1557111672962)
- * [原理分析之文档归纳](files/90013_原理分析之文档归纳.md?t=1557111672963)
- * [常见问题](files/90100_常见问题.md?t=1557111672963)
+ * [原理分析之@ApiMapping](files/90010_原理分析之@ApiMapping.md?t=1557125401054)
+ * [原理分析之路由存储](files/90011_原理分析之路由存储.md?t=1557125401054)
+ * [原理分析之如何路由](files/90012_原理分析之如何路由.md?t=1557125401054)
+ * [原理分析之文档归纳](files/90013_原理分析之文档归纳.md?t=1557125401055)
+ * [常见问题](files/90100_常见问题.md?t=1557125401055)
diff --git a/doc/docs/files/10097_应用授权.md b/doc/docs/files/10097_应用授权.md
index 3c15ecfa..b6e447a9 100644
--- a/doc/docs/files/10097_应用授权.md
+++ b/doc/docs/files/10097_应用授权.md
@@ -24,8 +24,16 @@ http://openauth.yourdomain.com/oauth2/appToAppAuth?app_id=2019032617262200001&re
| app_id | 开发者应用的AppId | String | 是 | 开发者应用的AppId | 2015101400446982 |
| redirect_uri | 回调页面 | String | 是 | 参数需要UrlEncode | http%3A%2F%2Fexample.com |
+
- 第二步:获取code
+授权成功后,会跳转至开发者定义的回调页面(即redirect_uri参数对应的url),在回调页面请求中会带上当次授权的授权码code和开发者的app_id,示例如下:
+
+http://www.xxx.com/oauth2callback?app_id=2015101400446982&code=ca34ea491e7146cc87d25fca24c4cD11
+
+
+- 第三步:使用code换取app_auth_token
+
接口名称:open.auth.token.app
开发者通过code可以换取app_auth_token、授权用户的userId。
diff --git a/doc/docs/files/10100_对接前端.md b/doc/docs/files/10100_对接前端.md
index 1d348614..8d39a37b 100644
--- a/doc/docs/files/10100_对接前端.md
+++ b/doc/docs/files/10100_对接前端.md
@@ -144,4 +144,7 @@ $(function () {
})
```
+1.7.1开始支持接口名版本号放在url后面,规则:`http://host:port/{method}/{version}/`(最后的`/`不能少),如:`http://localhost:8081/story.demo.get/1.0/`
+等同于:`http://localhost:8081/api?method=story.demo.get&version=1.0`。
+把接口名版本号放在url后面的好处是调用接口一目了然,在浏览器F12调试的时候特别有用,可以一眼看到调用了哪些接口,否则将会看到全部都是api请求,需要点开查看request header才能知道到底调用了哪个接口
diff --git a/sop-common/pom.xml b/sop-common/pom.xml
index 612e6488..139b55fe 100644
--- a/sop-common/pom.xml
+++ b/sop-common/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.gitee.sop
sop-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
pom
diff --git a/sop-common/sop-gateway-common/pom.xml b/sop-common/sop-gateway-common/pom.xml
index 42c4e3f2..38079f2c 100644
--- a/sop-common/sop-gateway-common/pom.xml
+++ b/sop-common/sop-gateway-common/pom.xml
@@ -5,11 +5,11 @@
com.gitee.sop
sop-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
../pom.xml
sop-gateway-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
jar
sop-gateway-common
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java
index 4c4b61a8..3ce20984 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java
@@ -15,6 +15,10 @@ public class SopConstants {
public static final String DEFAULT_SIGN_METHOD = "md5";
public static final String EMPTY_JSON = "{}";
+ public static final String REDIRECT_METHOD_KEY = "r-method";
+
+ public static final String REDIRECT_VERSION_KEY = "r-version";
+
/**
* 在拦截器中调用获取参数:
* String cachedBody = (String)exchange.getAttribute(SopConstants.CACHE_REQUEST_BODY_OBJECT_KEY);
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/filter/ValidateFilter.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/filter/ValidateFilter.java
index 7004ef83..8e574678 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/filter/ValidateFilter.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/filter/ValidateFilter.java
@@ -2,11 +2,8 @@ package com.gitee.sop.gatewaycommon.gateway.filter;
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
import com.gitee.sop.gatewaycommon.bean.ApiContext;
-import com.gitee.sop.gatewaycommon.bean.RouteConfig;
import com.gitee.sop.gatewaycommon.bean.SopConstants;
import com.gitee.sop.gatewaycommon.exception.ApiException;
-import com.gitee.sop.gatewaycommon.manager.RouteConfigManager;
-import com.gitee.sop.gatewaycommon.message.ErrorEnum;
import com.gitee.sop.gatewaycommon.param.ApiParam;
import com.gitee.sop.gatewaycommon.util.RouteUtil;
import com.gitee.sop.gatewaycommon.validate.Validator;
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/param/GatewayParamBuilder.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/param/GatewayParamBuilder.java
index a0954a2d..19b17100 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/param/GatewayParamBuilder.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/gateway/param/GatewayParamBuilder.java
@@ -1,9 +1,7 @@
package com.gitee.sop.gatewaycommon.gateway.param;
import com.gitee.sop.gatewaycommon.bean.SopConstants;
-import com.gitee.sop.gatewaycommon.param.ApiParam;
-import com.gitee.sop.gatewaycommon.param.ApiParamFactory;
-import com.gitee.sop.gatewaycommon.param.ParamBuilder;
+import com.gitee.sop.gatewaycommon.param.BaseParamBuilder;
import org.springframework.web.server.ServerWebExchange;
import java.util.Map;
@@ -11,12 +9,10 @@ import java.util.Map;
/**
* @author tanghc
*/
-public class GatewayParamBuilder implements ParamBuilder {
+public class GatewayParamBuilder extends BaseParamBuilder {
+
@Override
- public ApiParam build(ServerWebExchange exchange) {
- Map params = exchange.getAttribute(SopConstants.CACHE_REQUEST_BODY_FOR_MAP);
- return ApiParamFactory.build(params);
+ public Map buildRequestParams(ServerWebExchange request) {
+ return request.getAttribute(SopConstants.CACHE_REQUEST_BODY_FOR_MAP);
}
-
-
}
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParam.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParam.java
index b62eabb4..0ccd165c 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParam.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParam.java
@@ -208,4 +208,12 @@ public class ApiParam extends JSONObject implements Param {
public int hashCode() {
return super.hashCode();
}
+
+ public void setRestName(String restName) {
+ this.restName = restName;
+ }
+
+ public void setRestVersion(String restVersion) {
+ this.restVersion = restVersion;
+ }
}
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParamFactory.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/BaseParamBuilder.java
similarity index 69%
rename from sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParamFactory.java
rename to sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/BaseParamBuilder.java
index c82e4b66..68da9b72 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/ApiParamFactory.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/param/BaseParamBuilder.java
@@ -14,16 +14,26 @@ import java.util.Map;
* @author tanghc
*/
@Slf4j
-public class ApiParamFactory {
+public abstract class BaseParamBuilder implements ParamBuilder {
- private ApiParamFactory(){}
+ public abstract Map buildRequestParams(T ctx);
- public static ApiParam build(Map params) {
- ApiParam apiParam = new ApiParam();
- for (Map.Entry entry : params.entrySet()) {
+ @Override
+ public ApiParam build(T ctx) {
+ ApiParam apiParam = this.newApiParam(ctx);
+ Map requestParams = this.buildRequestParams(ctx);
+ for (Map.Entry entry : requestParams.entrySet()) {
apiParam.put(entry.getKey(), entry.getValue());
}
+ this.initOtherProperty(apiParam);
+ return apiParam;
+ }
+ protected ApiParam newApiParam(T ctx) {
+ return new ApiParam();
+ }
+
+ protected void initOtherProperty(ApiParam apiParam) {
RouteRepository extends TargetRoute> routeRepository = RouteRepositoryContext.getRouteRepository();
if (routeRepository == null) {
log.error("RouteRepositoryContext.setRouteRepository()方法未使用");
@@ -35,6 +45,6 @@ public class ApiParamFactory {
throw ErrorEnum.ISV_INVALID_METHOD.getErrorMeta().getException();
}
apiParam.setIgnoreValidate(BooleanUtils.toBoolean(routeDefinition.getIgnoreValidate()));
- return apiParam;
}
+
}
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java
index 67c2d793..894f5411 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java
@@ -91,9 +91,8 @@ public abstract class BaseExecutorAdapter implements ResultExecutor
}
Object name = params.get(ParamNames.API_NAME);
Object version = params.get(ParamNames.VERSION_NAME);
- if(name == null) {
- // 随便生成一个name
- name = System.currentTimeMillis();
+ if(name == null || version == null) {
+ return true;
}
TargetRoute targetRoute = RouteRepositoryContext.getRouteRepository().get(String.valueOf(name) + version);
if (targetRoute == null) {
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/util/RequestUtil.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/util/RequestUtil.java
index 28a60acc..6c44e6b6 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/util/RequestUtil.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/util/RequestUtil.java
@@ -55,27 +55,24 @@ public class RequestUtil {
* @param request request对象
* @return 返回参数键值对
*/
- public static Map convertRequestParamsToMap(HttpServletRequest request) {
+ public static Map convertRequestParamsToMap(HttpServletRequest request) {
Map paramMap = request.getParameterMap();
if(paramMap == null || paramMap.isEmpty()) {
return Collections.emptyMap();
}
- Map retMap = new HashMap<>(paramMap.size());
+ Map retMap = new HashMap<>(paramMap.size());
Set> entrySet = paramMap.entrySet();
for (Map.Entry entry : entrySet) {
String name = entry.getKey();
String[] values = entry.getValue();
- if (values.length == 1) {
+ if (values.length >= 1) {
retMap.put(name, values[0]);
- } else if (values.length > 1) {
- retMap.put(name, values);
} else {
retMap.put(name, "");
}
}
-
return retMap;
}
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/filter/PreValidateFilter.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/filter/PreValidateFilter.java
index 228a1478..02040d68 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/filter/PreValidateFilter.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/filter/PreValidateFilter.java
@@ -1,18 +1,14 @@
package com.gitee.sop.gatewaycommon.zuul.filter;
-import com.gitee.sop.gatewaycommon.bean.ApiContext;
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
-import com.gitee.sop.gatewaycommon.bean.RouteConfig;
+import com.gitee.sop.gatewaycommon.bean.ApiContext;
import com.gitee.sop.gatewaycommon.exception.ApiException;
-import com.gitee.sop.gatewaycommon.manager.RouteConfigManager;
-import com.gitee.sop.gatewaycommon.message.ErrorEnum;
import com.gitee.sop.gatewaycommon.param.ApiParam;
import com.gitee.sop.gatewaycommon.util.RouteUtil;
import com.gitee.sop.gatewaycommon.validate.Validator;
import com.gitee.sop.gatewaycommon.zuul.ZuulContext;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
/**
* 前置校验
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/param/ZuulParamBuilder.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/param/ZuulParamBuilder.java
index 05a0f92c..b2e60b5a 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/param/ZuulParamBuilder.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/param/ZuulParamBuilder.java
@@ -1,23 +1,16 @@
package com.gitee.sop.gatewaycommon.zuul.param;
+import com.gitee.sop.gatewaycommon.bean.SopConstants;
import com.gitee.sop.gatewaycommon.message.ErrorEnum;
import com.gitee.sop.gatewaycommon.param.ApiParam;
-import com.gitee.sop.gatewaycommon.param.ApiParamFactory;
-import com.gitee.sop.gatewaycommon.param.ApiUploadContext;
-import com.gitee.sop.gatewaycommon.param.ParamBuilder;
+import com.gitee.sop.gatewaycommon.param.BaseParamBuilder;
import com.gitee.sop.gatewaycommon.util.RequestUtil;
import com.netflix.zuul.context.RequestContext;
-import com.netflix.zuul.http.HttpServletRequestWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
import java.util.Map;
-import java.util.Set;
/**
* 参数解析默认实现
@@ -25,30 +18,17 @@ import java.util.Set;
* @author tanghc
*/
@Slf4j
-public class ZuulParamBuilder implements ParamBuilder {
+public class ZuulParamBuilder extends BaseParamBuilder {
- private static final String CONTENT_TYPE_MULTIPART = MediaType.MULTIPART_FORM_DATA_VALUE;
private static final String CONTENT_TYPE_JSON = MediaType.APPLICATION_JSON_VALUE;
private static final String CONTENT_TYPE_TEXT = MediaType.TEXT_PLAIN_VALUE;
private static final String GET = "get";
- @Override
- public ApiParam build(RequestContext ctx) {
- HttpServletRequest request = ctx.getRequest();
- // zuul会做一层包装
- if (request instanceof HttpServletRequestWrapper) {
- HttpServletRequestWrapper req = (HttpServletRequestWrapper) request;
- request = req.getRequest();
- }
- Map params = this.getParams(request);
- ApiParam apiParams = ApiParamFactory.build(params);
- ApiUploadContext apiUploadContext = this.buildApiUploadContext(request);
- apiParams.setApiUploadContext(apiUploadContext);
- return apiParams;
- }
- public Map getParams(HttpServletRequest request) {
- Map params = null;
+ @Override
+ public Map buildRequestParams(RequestContext ctx) {
+ HttpServletRequest request = ctx.getRequest();
+ Map params = null;
if (GET.equalsIgnoreCase(request.getMethod())) {
params = RequestUtil.convertRequestParamsToMap(request);
@@ -72,32 +52,15 @@ public class ZuulParamBuilder implements ParamBuilder {
return params;
}
- protected ApiUploadContext buildApiUploadContext(HttpServletRequest request) {
- ApiUploadContext apiUploadContext = null;
- String contectType = request.getContentType();
- if (contectType.contains(CONTENT_TYPE_MULTIPART)) {
- CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
- request.getSession().getServletContext());
- // 检查form中是否有enctype="multipart/form-data"
- if (multipartResolver.isMultipart(request)) {
- MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
- Map fileMap = multiRequest.getFileMap();
- Map finalMap = new HashMap<>(fileMap.size());
-
- Set keys = fileMap.keySet();
- for (String name : keys) {
- MultipartFile file = fileMap.get(name);
- if (file.getSize() > 0) {
- finalMap.put(name, file);
- }
- }
- if (finalMap.size() > 0) {
- // 保存上传文件
- apiUploadContext = new ApiUploadContext(finalMap);
- }
- }
- }
- return apiUploadContext;
+ @Override
+ protected ApiParam newApiParam(RequestContext ctx) {
+ ApiParam apiParam = super.newApiParam(ctx);
+ HttpServletRequest request = ctx.getRequest();
+ String method = (String) request.getAttribute(SopConstants.REDIRECT_METHOD_KEY);
+ String version = (String) request.getAttribute(SopConstants.REDIRECT_VERSION_KEY);
+ apiParam.setRestName(method);
+ apiParam.setRestVersion(version);
+ return apiParam;
}
}
diff --git a/sop-common/sop-service-common/pom.xml b/sop-common/sop-service-common/pom.xml
index 6959d5fa..3102d4ec 100644
--- a/sop-common/sop-service-common/pom.xml
+++ b/sop-common/sop-service-common/pom.xml
@@ -6,11 +6,11 @@
com.gitee.sop
sop-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
../pom.xml
sop-service-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
jar
sop-service-common
diff --git a/sop-example/sop-auth/pom.xml b/sop-example/sop-auth/pom.xml
index 563702de..cedb3e74 100644
--- a/sop-example/sop-auth/pom.xml
+++ b/sop-example/sop-auth/pom.xml
@@ -26,7 +26,7 @@
com.gitee.sop
sop-service-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
org.springframework.cloud
diff --git a/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/auth/impl/OAuth2ServiceImpl.java b/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/auth/impl/OAuth2ServiceImpl.java
index e09cb220..f7de6af1 100644
--- a/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/auth/impl/OAuth2ServiceImpl.java
+++ b/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/auth/impl/OAuth2ServiceImpl.java
@@ -43,6 +43,7 @@ public class OAuth2ServiceImpl implements OAuth2Service {
private static final String TOKEN_TYPE = "Bearer";
+ public static final String APP_ID_NAME = "app_id";
private OAuthIssuer oauthIssuer = new OAuthIssuerImpl(new MD5Generator());
@@ -96,6 +97,7 @@ public class OAuth2ServiceImpl implements OAuth2Service {
HttpServletResponse.SC_FOUND);
// 设置授权码
builder.setCode(authorizationCode);
+ builder.setParam(APP_ID_NAME, clientId);
// 得到到客户端重定向地址
String redirectURI = oauthRequest.getParam(OAuth.OAUTH_REDIRECT_URI);
diff --git a/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/controller/CallbackController.java b/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/controller/CallbackController.java
index 3c4d519e..dcf8b0ae 100644
--- a/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/controller/CallbackController.java
+++ b/sop-example/sop-auth/src/main/java/com/gitee/sop/sopauth/controller/CallbackController.java
@@ -31,9 +31,10 @@ public class CallbackController {
*/
@GetMapping("oauth2callback")
@ResponseBody
- public String callback(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
+ public OpenAuthTokenAppResponse callback(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
String app_id = servletRequest.getParameter("app_id");
String code = servletRequest.getParameter("code");
+ log.info("app_id:{}, code:{}", app_id, code);
OpenAuthTokenAppRequest request = new OpenAuthTokenAppRequest();
OpenAuthTokenAppModel model = new OpenAuthTokenAppModel();
@@ -48,7 +49,6 @@ public class CallbackController {
// 后续使用token进行接口访问
log.info("授权成功,body:{}", response.getBody());
}
- System.out.println(response.getBody());
- return response.getBody();
+ return response;
}
}
diff --git a/sop-example/sop-book/sop-book-web/pom.xml b/sop-example/sop-book/sop-book-web/pom.xml
index 57258f92..092c9d86 100644
--- a/sop-example/sop-book/sop-book-web/pom.xml
+++ b/sop-example/sop-book/sop-book-web/pom.xml
@@ -23,7 +23,7 @@
com.gitee.sop
sop-service-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
com.gitee.sop
diff --git a/sop-example/sop-easyopen/pom.xml b/sop-example/sop-easyopen/pom.xml
index ef05df56..6c2ab7d7 100644
--- a/sop-example/sop-easyopen/pom.xml
+++ b/sop-example/sop-easyopen/pom.xml
@@ -29,7 +29,7 @@
com.gitee.sop
sop-service-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
org.springframework.cloud
diff --git a/sop-example/sop-springmvc/pom.xml b/sop-example/sop-springmvc/pom.xml
index d2398508..4d51b8d7 100644
--- a/sop-example/sop-springmvc/pom.xml
+++ b/sop-example/sop-springmvc/pom.xml
@@ -20,7 +20,7 @@
com.gitee.sop
sop-service-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
diff --git a/sop-example/sop-story/sop-story-web/pom.xml b/sop-example/sop-story/sop-story-web/pom.xml
index 234ea3e2..e060d820 100644
--- a/sop-example/sop-story/sop-story-web/pom.xml
+++ b/sop-example/sop-story/sop-story-web/pom.xml
@@ -23,7 +23,7 @@
com.gitee.sop
sop-service-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
com.gitee.sop
diff --git a/sop-gateway/pom.xml b/sop-gateway/pom.xml
index 5c42d5e0..c0ca7573 100644
--- a/sop-gateway/pom.xml
+++ b/sop-gateway/pom.xml
@@ -23,7 +23,7 @@
com.gitee.sop
sop-gateway-common
- 1.7.0-SNAPSHOT
+ 1.7.1-SNAPSHOT
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/RedirectController.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/RedirectController.java
new file mode 100644
index 00000000..2c8c26c0
--- /dev/null
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/RedirectController.java
@@ -0,0 +1,31 @@
+package com.gitee.sop.gateway;
+
+import com.gitee.sop.gatewaycommon.bean.SopConstants;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author tanghc
+ */
+@Controller
+public class RedirectController {
+
+ @Value("${zuul.servlet-path}")
+ private String path;
+
+ @RequestMapping("/{method}/{version}/")
+ public String redirect(
+ @PathVariable("method") String method
+ , @PathVariable("version") String version
+ , HttpServletRequest request
+ ) {
+ request.setAttribute(SopConstants.REDIRECT_METHOD_KEY, method);
+ request.setAttribute(SopConstants.REDIRECT_VERSION_KEY, version);
+ return "forward:" + path;
+ }
+
+}
diff --git a/sop-test/src/test/java/com/gitee/sop/RestUrlTest.java b/sop-test/src/test/java/com/gitee/sop/RestUrlTest.java
new file mode 100644
index 00000000..e04cb6f5
--- /dev/null
+++ b/sop-test/src/test/java/com/gitee/sop/RestUrlTest.java
@@ -0,0 +1,61 @@
+package com.gitee.sop;
+
+import com.alibaba.fastjson.JSON;
+import com.gitee.sop.alipay.AlipaySignature;
+import org.junit.Test;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author tanghc
+ */
+public class RestUrlTest extends TestBase {
+
+ String appId = "2019032617262200001";
+ // 支付宝私钥
+ String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXJv1pQFqWNA/++OYEV7WYXwexZK/J8LY1OWlP9X0T6wHFOvxNKRvMkJ5544SbgsJpVcvRDPrcxmhPbi/sAhdO4x2PiPKIz9Yni2OtYCCeaiE056B+e1O2jXoLeXbfi9fPivJZkxH/tb4xfLkH3bA8ZAQnQsoXA0SguykMRZntF0TndUfvDrLqwhlR8r5iRdZLB6F8o8qXH6UPDfNEnf/K8wX5T4EB1b8x8QJ7Ua4GcIUqeUxGHdQpzNbJdaQvoi06lgccmL+PHzminkFYON7alj1CjDN833j7QMHdPtS9l7B67fOU/p2LAAkPMtoVBfxQt9aFj7B8rEhGCz02iJIBAgMBAAECggEARqOuIpY0v6WtJBfmR3lGIOOokLrhfJrGTLF8CiZMQha+SRJ7/wOLPlsH9SbjPlopyViTXCuYwbzn2tdABigkBHYXxpDV6CJZjzmRZ+FY3S/0POlTFElGojYUJ3CooWiVfyUMhdg5vSuOq0oCny53woFrf32zPHYGiKdvU5Djku1onbDU0Lw8w+5tguuEZ76kZ/lUcccGy5978FFmYpzY/65RHCpvLiLqYyWTtaNT1aQ/9pw4jX9HO9NfdJ9gYFK8r/2f36ZE4hxluAfeOXQfRC/WhPmiw/ReUhxPznG/WgKaa/OaRtAx3inbQ+JuCND7uuKeRe4osP2jLPHPP6AUwQKBgQDUNu3BkLoKaimjGOjCTAwtp71g1oo+k5/uEInAo7lyEwpV0EuUMwLA/HCqUgR4K9pyYV+Oyb8d6f0+Hz0BMD92I2pqlXrD7xV2WzDvyXM3s63NvorRooKcyfd9i6ccMjAyTR2qfLkxv0hlbBbsPHz4BbU63xhTJp3Ghi0/ey/1HQKBgQC2VsgqC6ykfSidZUNLmQZe3J0p/Qf9VLkfrQ+xaHapOs6AzDU2H2osuysqXTLJHsGfrwVaTs00ER2z8ljTJPBUtNtOLrwNRlvgdnzyVAKHfOgDBGwJgiwpeE9voB1oAV/mXqSaUWNnuwlOIhvQEBwekqNyWvhLqC7nCAIhj3yvNQKBgQCqYbeec56LAhWP903Zwcj9VvG7sESqXUhIkUqoOkuIBTWFFIm54QLTA1tJxDQGb98heoCIWf5x/A3xNI98RsqNBX5JON6qNWjb7/dobitti3t99v/ptDp9u8JTMC7penoryLKK0Ty3bkan95Kn9SC42YxaSghzqkt+uvfVQgiNGQKBgGxU6P2aDAt6VNwWosHSe+d2WWXt8IZBhO9d6dn0f7ORvcjmCqNKTNGgrkewMZEuVcliueJquR47IROdY8qmwqcBAN7Vg2K7r7CPlTKAWTRYMJxCT1Hi5gwJb+CZF3+IeYqsJk2NF2s0w5WJTE70k1BSvQsfIzAIDz2yE1oPHvwVAoGAA6e+xQkVH4fMEph55RJIZ5goI4Y76BSvt2N5OKZKd4HtaV+eIhM3SDsVYRLIm9ZquJHMiZQGyUGnsvrKL6AAVNK7eQZCRDk9KQz+0GKOGqku0nOZjUbAu6A2/vtXAaAuFSFx1rUQVVjFulLexkXR3KcztL1Qu2k5pB6Si0K/uwQ=";
+
+ /**
+ * 演示将接口名版本号跟在url后面,规则:http://host:port/{method}/{version}/
+ * @throws Exception
+ */
+ @Test
+ public void testDemo() throws Exception {
+ // 公共请求参数
+ Map params = new HashMap();
+ params.put("app_id", appId);
+ // 参数中的接口名和版本转移到了url中
+// params.put("method", "story.demo.get");
+// params.put("version", "1.0");
+ // 注意这里的url
+ String url = "http://localhost:8081/story.demo.get/1.0/";
+ params.put("format", "json");
+ params.put("charset", "utf-8");
+ params.put("sign_type", "RSA2");
+ params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+
+ // 业务参数
+ Map bizContent = new HashMap<>();
+
+ params.put("biz_content", JSON.toJSONString(bizContent));
+
+ System.out.println("----------- 请求信息 -----------");
+ System.out.println("请求参数:" + buildParamQuery(params));
+ System.out.println("商户秘钥:" + privateKey);
+ String content = AlipaySignature.getSignContent(params);
+ System.out.println("待签名内容:" + content);
+ String sign = AlipaySignature.rsa256Sign(content, privateKey, "utf-8");
+ System.out.println("签名(sign):" + sign);
+
+ params.put("sign", sign);
+
+ System.out.println("----------- 返回结果 -----------");
+ String responseData = post(url, params);// 发送请求
+ System.out.println(responseData);
+ }
+
+
+}