This commit is contained in:
六如
2024-11-04 14:37:54 +08:00
parent d9a257ff23
commit 53a40a1cb4
14 changed files with 285 additions and 65 deletions

View File

@@ -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";
}

View File

@@ -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<Object> fileParam = buildFileParam(apiRequestContext, paramInfoDTO);
if (!fileParam.isPresent()) {
continue;
@@ -163,6 +171,20 @@ public class RouteServiceImpl implements RouteService {
return params.toArray(new Object[0]);
}
protected OpenRequest buildOpenRequest(ApiRequestContext apiRequestContext) {
ApiRequest apiRequest = apiRequestContext.getApiRequest();
DefaultOpenRequest defaultOpenRequest = new DefaultOpenRequest();
defaultOpenRequest.setAppId(apiRequest.getAppId());
defaultOpenRequest.setApiName(apiRequest.getMethod());
defaultOpenRequest.setVersion(apiRequest.getVersion());
defaultOpenRequest.setAppAuthToken(apiRequest.getAppAuthToken());
defaultOpenRequest.setClientIp(apiRequestContext.getIp());
defaultOpenRequest.setNotifyUrl(apiRequest.getNotifyUrl());
defaultOpenRequest.setTraceId(apiRequestContext.getTraceId());
defaultOpenRequest.setLocale(apiRequestContext.getLocale());
return defaultOpenRequest;
}
protected Optional<Object> buildFileParam(ApiRequestContext apiRequestContext, ParamInfoDTO paramInfoDTO) {
UploadContext uploadContext = apiRequestContext.getUploadContext();
if (uploadContext == null) {

View File

@@ -48,12 +48,12 @@ public class ResultRouteInterceptor implements RouteInterceptor {
"originalFilename": "application.properties",
"empty": false
*/
CommonFileData commonFileData = new CommonFileData();
commonFileData.setName(String.valueOf(map.get(KEY_NAME)));
commonFileData.setOriginalFilename(String.valueOf(map.get(KEY_ORIGINAL_FILENAME)));
commonFileData.setContentType(String.valueOf(map.get(KEY_CONTENT_TYPE)));
commonFileData.setData((byte[]) map.get(KEY_BYTES));
return commonFileData;
CommonFileData fileData = new CommonFileData();
fileData.setName(String.valueOf(map.get(KEY_NAME)));
fileData.setOriginalFilename(String.valueOf(map.get(KEY_ORIGINAL_FILENAME)));
fileData.setContentType(String.valueOf(map.get(KEY_CONTENT_TYPE)));
fileData.setData((byte[]) map.get(KEY_BYTES));
return fileData;
}
}