From 53a40a1cb44947ab159bd55f572d64b6c98921bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com>
Date: Mon, 4 Nov 2024 14:37:54 +0800
Subject: [PATCH] 5.0
---
sop-example/example-story/pom.xml | 2 +-
.../sop/storyweb/impl/OpenStoryImpl.java | 22 ++++++++
.../gitee/sop/storyweb/open/OpenStory.java | 4 ++
.../sop/gateway/common/AttachmentNames.java | 21 --------
.../sop/gateway/service/RouteServiceImpl.java | 52 ++++++++++++------
.../internal/ResultRouteInterceptor.java | 12 ++---
.../support/constants/AttachmentNames.java | 43 +++++++++++++++
.../sop/support/context/OpenContext.java | 49 +++++++++--------
.../sop/support/dto/DefaultOpenRequest.java | 54 +++++++++++++++++++
.../gitee/sop/support/dto/OpenRequest.java | 50 +++++++++++++++++
.../sop/support/exception/OpenException.java | 3 +-
.../resources/security/serialize.allowlist | 1 +
.../main/java/com/gitee/sop/test/Client.java | 18 +++++++
.../java/com/gitee/sop/test/AllInOneTest.java | 19 +++++++
14 files changed, 285 insertions(+), 65 deletions(-)
delete mode 100644 sop-gateway/src/main/java/com/gitee/sop/gateway/common/AttachmentNames.java
create mode 100644 sop-support/sop-service-support/src/main/java/com/gitee/sop/support/constants/AttachmentNames.java
create mode 100644 sop-support/sop-service-support/src/main/java/com/gitee/sop/support/dto/DefaultOpenRequest.java
create mode 100644 sop-support/sop-service-support/src/main/java/com/gitee/sop/support/dto/OpenRequest.java
diff --git a/sop-example/example-story/pom.xml b/sop-example/example-story/pom.xml
index 2aead720..d52fb69b 100644
--- a/sop-example/example-story/pom.xml
+++ b/sop-example/example-story/pom.xml
@@ -49,7 +49,7 @@
org.apache.dubbo
dubbo-dependencies-zookeeper-curator5
- ${dubbo.version}
+ 3.2.10
pom
provided
diff --git a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/impl/OpenStoryImpl.java b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/impl/OpenStoryImpl.java
index 6ba3f180..89deb2c0 100644
--- a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/impl/OpenStoryImpl.java
+++ b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/impl/OpenStoryImpl.java
@@ -7,6 +7,7 @@ import com.gitee.sop.storyweb.open.resp.StoryResponse;
import com.gitee.sop.support.context.OpenContext;
import com.gitee.sop.support.dto.CommonFileData;
import com.gitee.sop.support.dto.FileData;
+import com.gitee.sop.support.dto.OpenRequest;
import com.gitee.sop.support.exception.OpenException;
import org.apache.commons.io.IOUtils;
import org.apache.dubbo.config.annotation.DubboService;
@@ -17,6 +18,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
/**
@@ -37,12 +39,15 @@ public class OpenStoryImpl implements OpenStory {
System.out.println("token:" + OpenContext.getAppAuthToken());
System.out.println("ip:" + OpenContext.getClientIp());
System.out.println("traceId:" + OpenContext.getTraceId());
+ System.out.println("locale:" + OpenContext.getLocale());
+ System.out.println("notifyUrl:" + OpenContext.getNotifyUrl());
Assert.notNull(OpenContext.getAppId());
Assert.notNull(OpenContext.getApiName());
Assert.notNull(OpenContext.getVersion());
Assert.notNull(OpenContext.getClientIp());
Assert.notNull(OpenContext.getTraceId());
+ Assert.notNull(OpenContext.getLocale());
return 1;
}
@@ -80,6 +85,23 @@ public class OpenStoryImpl implements OpenStory {
return storyResponse;
}
+ // 演示获取上下文
+ @Override
+ public StoryResponse getByIdV3(Long id, OpenRequest request) {
+ StoryResponse storyResponse = new StoryResponse();
+ storyResponse.setId(3);
+ storyResponse.setName(request.toString());
+
+ String notifyUrl = request.getNotifyUrl();
+ System.out.println(notifyUrl);
+ // 方式2
+ String notifyUrl2 = OpenContext.getNotifyUrl();
+ System.out.println(notifyUrl2);
+
+ System.out.println(Objects.equals(notifyUrl2, notifyUrl));
+
+ return storyResponse;
+ }
@Override
public StoryResponse upload(StorySaveDTO storySaveDTO, FileData file) {
diff --git a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/OpenStory.java b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/OpenStory.java
index 66dac0c3..1512b47e 100644
--- a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/OpenStory.java
+++ b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/OpenStory.java
@@ -4,6 +4,7 @@ import com.gitee.sop.storyweb.open.req.StorySaveDTO;
import com.gitee.sop.storyweb.open.resp.StoryResponse;
import com.gitee.sop.support.annotation.Open;
import com.gitee.sop.support.dto.FileData;
+import com.gitee.sop.support.dto.OpenRequest;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@@ -32,6 +33,9 @@ public interface OpenStory {
@Open(value = "story.get", version = "2.0")
StoryResponse getByIdV2(Long id);
+ @Open(value = "story.get", version = "3.0")
+ StoryResponse getByIdV3(Long id, OpenRequest request);
+
// 默认方法,注解放在这里也有效
@Open("story.find")
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/common/AttachmentNames.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/common/AttachmentNames.java
deleted file mode 100644
index c599582a..00000000
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/common/AttachmentNames.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.gitee.sop.gateway.common;
-
-/**
- * @author 六如
- */
-public class AttachmentNames {
-
- /** 分配给开发者的应用ID */
- public static final String APP_ID_NAME = "client.app_id";
- /** 接口名称 */
- public static final String API_NAME = "client.method";
- /** 调用的接口版本 */
- public static final String VERSION_NAME = "client.version";
- /** 开放平台主动通知商户服务器里指定的页面http/https路径 */
- public static final String NOTIFY_URL_NAME = "client.notify_url";
- /** OAuth 2.0授权token */
- public static final String APP_AUTH_TOKEN_NAME = "client.app_auth_token";
- public static final String CLIENT_IP = "client.ip";
- public static final String TRACE_ID = "client.trace_id";
-
-}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java
index 913e37fe..dfcfa09e 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java
@@ -3,7 +3,6 @@ package com.gitee.sop.gateway.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.gitee.sop.gateway.common.ApiInfoDTO;
-import com.gitee.sop.gateway.common.AttachmentNames;
import com.gitee.sop.gateway.common.ParamInfoDTO;
import com.gitee.sop.gateway.exception.ApiException;
import com.gitee.sop.gateway.exception.ExceptionExecutor;
@@ -16,8 +15,19 @@ import com.gitee.sop.gateway.response.Response;
import com.gitee.sop.gateway.service.interceptor.RouteInterceptor;
import com.gitee.sop.gateway.service.validate.Validator;
import com.gitee.sop.gateway.util.ClassUtil;
+import com.gitee.sop.support.constants.AttachmentNames;
import com.gitee.sop.support.dto.CommonFileData;
+import com.gitee.sop.support.dto.DefaultOpenRequest;
import com.gitee.sop.support.dto.FileData;
+import com.gitee.sop.support.dto.OpenRequest;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import javax.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.rpc.RpcContext;
@@ -26,14 +36,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
-import javax.annotation.PostConstruct;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
/**
@@ -93,13 +95,14 @@ public class RouteServiceImpl implements RouteService {
protected void setAttachment(ApiRequestContext apiRequestContext) {
ApiRequest apiRequest = apiRequestContext.getApiRequest();
RpcContextAttachment clientAttachment = RpcContext.getClientAttachment();
- clientAttachment.setAttachment(AttachmentNames.APP_ID_NAME, apiRequest.getAppId());
+ clientAttachment.setAttachment(AttachmentNames.APP_ID, apiRequest.getAppId());
clientAttachment.setAttachment(AttachmentNames.API_NAME, apiRequest.getMethod());
- clientAttachment.setAttachment(AttachmentNames.VERSION_NAME, apiRequest.getVersion());
- clientAttachment.setAttachment(AttachmentNames.APP_AUTH_TOKEN_NAME, apiRequest.getAppAuthToken());
- clientAttachment.setAttachment(AttachmentNames.NOTIFY_URL_NAME, apiRequest.getNotifyUrl());
+ clientAttachment.setAttachment(AttachmentNames.VERSION, apiRequest.getVersion());
+ clientAttachment.setAttachment(AttachmentNames.APP_AUTH_TOKEN, apiRequest.getAppAuthToken());
+ clientAttachment.setAttachment(AttachmentNames.NOTIFY_URL, apiRequest.getNotifyUrl());
clientAttachment.setAttachment(AttachmentNames.CLIENT_IP, apiRequestContext.getIp());
clientAttachment.setAttachment(AttachmentNames.TRACE_ID, apiRequestContext.getTraceId());
+ clientAttachment.setAttachment(AttachmentNames.LOCALE, apiRequestContext.getLocale().toLanguageTag());
}
protected void doPreRoute(ApiRequestContext apiRequestContext, ApiInfoDTO apiInfoDTO) {
@@ -136,8 +139,13 @@ public class RouteServiceImpl implements RouteService {
for (ParamInfoDTO paramInfoDTO : paramInfoList) {
String type = paramInfoDTO.getType();
String actualType = paramInfoDTO.getActualType();
- // 处理文件上传
- if (Objects.equals(type, FileData.class.getName()) || Objects.equals(actualType, FileData.class.getName())) {
+
+ // 上下文
+ if (Objects.equals(type, OpenRequest.class.getName())) {
+ OpenRequest openRequest = buildOpenRequest(apiRequestContext);
+ params.add(openRequest);
+ } else if (Objects.equals(type, FileData.class.getName()) || Objects.equals(actualType, FileData.class.getName())) {
+ // 处理文件上传
Optional