From a2a438562bcfe3ae38b8cca215058deb8971a669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Tue, 4 Feb 2025 11:58:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Erestful=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sop-admin-backend/admin-boot/pom.xml | 15 ++-- .../sop/productweb/open/OpenProduct.java | 2 - .../open/req/ProductSaveRequest.java | 4 +- .../rest/impl/GoodsControllerImpl.java | 3 +- .../gateway/controller/IndexController.java | 2 - .../gateway/request/ApiRequestContext.java | 6 +- .../service/impl/ParamExecutorImpl.java | 29 +++++++- .../service/impl/RouteServiceImpl.java | 10 ++- .../RedisIsvApiPermissionManagerImpl.java | 2 +- .../manager/impl/RedisIsvManagerImpl.java | 2 +- .../manager/impl/RedisSecretManager.java | 2 +- .../gateway/service/validate/SignConfig.java | 3 +- .../gitee/sop/gateway/util/RequestUtil.java | 2 +- .../sop/support/constant}/SopConstants.java | 5 +- .../support/context/DefaultOpenContext.java | 6 -- .../support/context/DefaultWebContext.java | 66 +++++++++++++++++ .../sop/support/context/OpenContext.java | 6 -- .../gitee/sop/support/context/WebContext.java | 73 +++++++++++++++++++ .../dubbo/DubboProviderTraceFilter.java | 23 ++++-- .../resources/security/serialize.allowlist | 1 + 20 files changed, 212 insertions(+), 50 deletions(-) rename {sop-gateway/src/main/java/com/gitee/sop/gateway/common => sop-support/sop-service-support/src/main/java/com/gitee/sop/support/constant}/SopConstants.java (72%) mode change 100755 => 100644 create mode 100644 sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultWebContext.java create mode 100644 sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/WebContext.java diff --git a/sop-admin/sop-admin-backend/admin-boot/pom.xml b/sop-admin/sop-admin-backend/admin-boot/pom.xml index c0e6890b..55036f8c 100755 --- a/sop-admin/sop-admin-backend/admin-boot/pom.xml +++ b/sop-admin/sop-admin-backend/admin-boot/pom.xml @@ -39,6 +39,12 @@ dubbo-nacos-spring-boot-starter + + + org.apache.dubbo + dubbo-zookeeper-curator5-spring-boot-starter + + org.springframework.boot spring-boot-starter-data-redis @@ -63,15 +69,6 @@ - - - org.apache.dubbo - dubbo-dependencies-zookeeper-curator5 - ${dubbo.version} - pom - provided - - org.projectlombok lombok diff --git a/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java b/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java index 788f8a22..9ecafe04 100755 --- a/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java +++ b/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/OpenProduct.java @@ -5,7 +5,6 @@ import com.gitee.sop.productweb.open.resp.ProductResponse; import com.gitee.sop.support.annotation.Open; import com.gitee.sop.support.context.OpenContext; import com.gitee.sop.support.dto.FileData; -import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import javax.validation.constraints.NotNull; @@ -18,7 +17,6 @@ import java.util.List; * @author 六如 * @dubbo */ -@Api("产品服务") public interface OpenProduct { /** diff --git a/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/req/ProductSaveRequest.java b/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/req/ProductSaveRequest.java index 7dfe0d20..0b7eabca 100755 --- a/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/req/ProductSaveRequest.java +++ b/sop-example/example-product/product-service/src/main/java/com/gitee/sop/productweb/open/req/ProductSaveRequest.java @@ -16,9 +16,9 @@ public class ProductSaveRequest implements Serializable { private static final long serialVersionUID = -1214422742659231037L; /** - * 故事名称 + * 产品名称 */ - @NotBlank(message = "故事名称必填") + @NotBlank(message = "产品名称必填") @Length(max = 64) private String productName; diff --git a/sop-example/example-rest/src/main/java/com/sop/example/rest/examplerest/rest/impl/GoodsControllerImpl.java b/sop-example/example-rest/src/main/java/com/sop/example/rest/examplerest/rest/impl/GoodsControllerImpl.java index 7715760b..0057b609 100644 --- a/sop-example/example-rest/src/main/java/com/sop/example/rest/examplerest/rest/impl/GoodsControllerImpl.java +++ b/sop-example/example-rest/src/main/java/com/sop/example/rest/examplerest/rest/impl/GoodsControllerImpl.java @@ -1,6 +1,7 @@ package com.sop.example.rest.examplerest.rest.impl; import com.gitee.sop.support.context.OpenContext; +import com.gitee.sop.support.context.WebContext; import com.sop.example.rest.examplerest.rest.GoodsController; import com.sop.example.rest.examplerest.rest.vo.GoodsVO; import org.apache.dubbo.config.annotation.DubboService; @@ -19,7 +20,7 @@ public class GoodsControllerImpl implements GoodsController { goodsVO.setId(id); goodsVO.setName("冰箱"); - Map headers = OpenContext.current().getHeaders(); + Map headers = WebContext.current().getHeaders(); String token = headers.get("token"); System.out.println(token); return goodsVO; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/controller/IndexController.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/controller/IndexController.java index 63fe165f..fb6312c9 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/controller/IndexController.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/controller/IndexController.java @@ -1,6 +1,5 @@ package com.gitee.sop.gateway.controller; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.request.ApiRequest; import com.gitee.sop.gateway.request.ApiRequestContext; import com.gitee.sop.gateway.response.Response; @@ -12,7 +11,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/request/ApiRequestContext.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/request/ApiRequestContext.java index b8816f1c..cd2a9991 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/request/ApiRequestContext.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/request/ApiRequestContext.java @@ -1,12 +1,12 @@ package com.gitee.sop.gateway.request; import com.alibaba.fastjson2.JSONObject; +import com.gitee.sop.support.context.WebContext; import lombok.Builder; import lombok.Getter; import lombok.Setter; import java.util.Locale; -import java.util.Map; /** * @author 六如 @@ -53,7 +53,7 @@ public class ApiRequestContext { private JSONObject rawParams; /** - * 请求头 + * WEB Context */ - private Map headers; + private WebContext webContext; } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java index 939308d4..3a47cfd4 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java @@ -2,7 +2,6 @@ package com.gitee.sop.gateway.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.config.ApiConfig; import com.gitee.sop.gateway.request.ApiRequest; import com.gitee.sop.gateway.request.ApiRequestContext; @@ -14,6 +13,9 @@ import com.gitee.sop.gateway.service.ParamExecutor; import com.gitee.sop.gateway.service.Serde; import com.gitee.sop.gateway.util.RequestUtil; import com.gitee.sop.gateway.util.ResponseUtil; +import com.gitee.sop.support.constant.SopConstants; +import com.gitee.sop.support.context.DefaultWebContext; +import com.gitee.sop.support.context.WebContext; import com.gitee.sop.support.dto.FileData; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; @@ -24,9 +26,11 @@ import org.springframework.http.MediaType; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.LinkedHashMap; import java.util.UUID; + /** * 请求参数默认实现 * @@ -93,10 +97,31 @@ public class ParamExecutorImpl implements ParamExecutor(request.getParameterMap())); + return defaultWebContext; + } + protected String getTag(HttpServletRequest request) { return request.getHeader(apiConfig.getHeaderKeyTag()); diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java index aa88a06d..47d2529b 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.gitee.sop.gateway.common.ApiInfoDTO; import com.gitee.sop.gateway.common.ParamInfoDTO; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.exception.ApiException; import com.gitee.sop.gateway.exception.ExceptionExecutor; import com.gitee.sop.gateway.interceptor.RouteInterceptor; @@ -20,8 +19,10 @@ import com.gitee.sop.gateway.service.RouteService; import com.gitee.sop.gateway.service.Serde; import com.gitee.sop.gateway.service.validate.Validator; import com.gitee.sop.gateway.util.ClassUtil; +import com.gitee.sop.support.constant.SopConstants; import com.gitee.sop.support.context.DefaultOpenContext; import com.gitee.sop.support.context.OpenContext; +import com.gitee.sop.support.context.WebContext; import com.gitee.sop.support.dto.CommonFileData; import com.gitee.sop.support.dto.FileData; import lombok.extern.slf4j.Slf4j; @@ -108,7 +109,8 @@ public class RouteServiceImpl implements RouteService { String paramInfo = apiInfo.getParamInfo(); List paramInfoList = JSON.parseArray(paramInfo, ParamInfoDTO.class); OpenContext openRequest = buildOpenContext(apiRequestContext); - clientAttachment.setAttachment(SopConstants.OPEN_CONTEXT, JSON.toJSONString(openRequest)); + clientAttachment.setObjectAttachment(SopConstants.OPEN_CONTEXT, openRequest); + clientAttachment.setObjectAttachment(SopConstants.WEB_CONTEXT, apiRequestContext.getWebContext()); return genericServiceInvoker.invoke( apiInfo.getInterfaceClassName(), apiInfo.getMethodName(), @@ -156,6 +158,8 @@ public class RouteServiceImpl implements RouteService { // 上下文 if (Objects.equals(type, OpenContext.class.getName())) { params.add(openRequest); + } else if (Objects.equals(type, WebContext.class.getName())) { + params.add(apiRequestContext.getWebContext()); } else if (Objects.equals(type, FileData.class.getName()) || Objects.equals(actualType, FileData.class.getName())) { // 处理文件上传 Optional fileParam = buildFileParam(apiRequestContext, paramInfoDTO); @@ -203,8 +207,6 @@ public class RouteServiceImpl implements RouteService { defaultOpenRequest.setNotifyUrl(apiRequest.getNotifyUrl()); defaultOpenRequest.setTraceId(apiRequestContext.getTraceId()); defaultOpenRequest.setLocale(apiRequestContext.getLocale()); - defaultOpenRequest.setHeaders(apiRequestContext.getHeaders()); - defaultOpenRequest.initContext(); return defaultOpenRequest; } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvApiPermissionManagerImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvApiPermissionManagerImpl.java index 3e82215e..619846c3 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvApiPermissionManagerImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvApiPermissionManagerImpl.java @@ -2,10 +2,10 @@ package com.gitee.sop.gateway.service.manager.impl; import com.gitee.sop.gateway.common.ApiInfoDTO; import com.gitee.sop.gateway.common.CacheKey; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.dao.entity.IsvInfo; import com.gitee.sop.gateway.dao.mapper.IsvInfoMapper; import com.gitee.sop.gateway.util.JsonUtil; +import com.gitee.sop.support.constant.SopConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundHashOperations; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvManagerImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvManagerImpl.java index eaf1578e..ae3b27a4 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvManagerImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisIsvManagerImpl.java @@ -1,11 +1,11 @@ package com.gitee.sop.gateway.service.manager.impl; import com.gitee.sop.gateway.common.CacheKey; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.dao.entity.IsvInfo; import com.gitee.sop.gateway.service.manager.dto.IsvDTO; import com.gitee.sop.gateway.util.CopyUtil; import com.gitee.sop.gateway.util.JsonUtil; +import com.gitee.sop.support.constant.SopConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisSecretManager.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisSecretManager.java index 38832266..b7e1dfb1 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisSecretManager.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/manager/impl/RedisSecretManager.java @@ -1,8 +1,8 @@ package com.gitee.sop.gateway.service.manager.impl; import com.gitee.sop.gateway.common.CacheKey; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.dao.entity.IsvKeys; +import com.gitee.sop.support.constant.SopConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/SignConfig.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/SignConfig.java index eeec77a6..1972827f 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/SignConfig.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/validate/SignConfig.java @@ -1,7 +1,8 @@ package com.gitee.sop.gateway.service.validate; -import com.gitee.sop.gateway.common.SopConstants; + +import com.gitee.sop.support.constant.SopConstants; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/util/RequestUtil.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/util/RequestUtil.java index 99b12403..57ac7d45 100755 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/util/RequestUtil.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/util/RequestUtil.java @@ -1,9 +1,9 @@ package com.gitee.sop.gateway.util; import com.alibaba.fastjson2.JSONObject; -import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.request.ApiUploadContext; import com.gitee.sop.gateway.request.UploadContext; +import com.gitee.sop.support.constant.SopConstants; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.fileupload.FileItem; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/common/SopConstants.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/constant/SopConstants.java old mode 100755 new mode 100644 similarity index 72% rename from sop-gateway/src/main/java/com/gitee/sop/gateway/common/SopConstants.java rename to sop-support/sop-service-support/src/main/java/com/gitee/sop/support/constant/SopConstants.java index f494a140..06bd7e6b --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/common/SopConstants.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/constant/SopConstants.java @@ -1,4 +1,4 @@ -package com.gitee.sop.gateway.common; +package com.gitee.sop.support.constant; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -15,7 +15,8 @@ public final class SopConstants { public static final String UTF8 = "UTF-8"; public static final String NULL = "null"; public static final String DUBBO_TAG = "dubbo.tag"; - public static final String OPEN_CONTEXT = "open.context"; + public static final String OPEN_CONTEXT = "sop.open-context"; + public static final String WEB_CONTEXT = "sop.web-context"; public static final String DEFAULT_VERSION = "1.0"; } diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultOpenContext.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultOpenContext.java index bff1f643..c557c62a 100755 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultOpenContext.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultOpenContext.java @@ -5,7 +5,6 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.Locale; -import java.util.Map; /** * @author 六如 @@ -55,11 +54,6 @@ public class DefaultOpenContext extends OpenContext implements Serializable { */ private Locale locale; - /** - * 请求头 - */ - private Map headers; - public void initContext() { this.setContext(this); } diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultWebContext.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultWebContext.java new file mode 100644 index 00000000..af3149c3 --- /dev/null +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/DefaultWebContext.java @@ -0,0 +1,66 @@ +package com.gitee.sop.support.context; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * @author 六如 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DefaultWebContext extends WebContext implements Serializable { + private static final long serialVersionUID = -6070543618514206391L; + + private String method; + private String pathInfo; + private String pathTranslated; + private String contextPath; + private String queryString; + private String requestURI; + private StringBuffer requestURL; + private String servletPath; + private int contentLength; + private String contentType; + private String remoteAddr; + private String remoteHost; + private int remotePort; + private Locale locale; + private Map headers; + private Map paramtreMap; + + @Override + public String getParameter(String name) { + String[] value = paramtreMap.get(name); + return value == null || value.length == 0 ? null : String.join(",", value); + } + + @Override + public List getParameterNames() { + return new ArrayList<>(paramtreMap.keySet()); + } + + @Override + public String[] getParameterValues(String name) { + return paramtreMap.get(name); + } + + @Override + public Map getParameterMap() { + return paramtreMap; + } + + @Override + public Map getHeaders() { + return headers; + } + + public void initContext() { + this.setContext(this); + } +} diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/OpenContext.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/OpenContext.java index 61749e36..aee78ff4 100755 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/OpenContext.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/OpenContext.java @@ -3,7 +3,6 @@ package com.gitee.sop.support.context; import com.alibaba.ttl.TransmittableThreadLocal; import java.util.Locale; -import java.util.Map; /** * @author 六如 @@ -52,11 +51,6 @@ public abstract class OpenContext { */ public abstract Locale getLocale(); - /** - * 获取请求头 - */ - public abstract Map getHeaders(); - protected void setContext(OpenContext openContext) { THREAD_LOCAL.set(openContext); } diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/WebContext.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/WebContext.java new file mode 100644 index 00000000..cd05c2c8 --- /dev/null +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/context/WebContext.java @@ -0,0 +1,73 @@ +package com.gitee.sop.support.context; + +import com.alibaba.ttl.TransmittableThreadLocal; + +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * @author 六如 + */ +public abstract class WebContext { + + private static final ThreadLocal THREAD_LOCAL = new TransmittableThreadLocal<>(); + + + public abstract String getMethod(); + + public abstract String getPathInfo(); + + public abstract String getPathTranslated(); + + public abstract String getContextPath(); + + public abstract String getQueryString(); + + public abstract String getRequestURI(); + + public abstract StringBuffer getRequestURL(); + + public abstract String getServletPath(); + + public abstract int getContentLength(); + + public abstract String getContentType(); + + public abstract String getRemoteAddr(); + + public abstract String getRemoteHost(); + + public abstract int getRemotePort(); + + public abstract String getParameter(String name); + + public abstract List getParameterNames(); + + public abstract String[] getParameterValues(String name); + + public abstract Map getParameterMap(); + + /** + * 获取locale + */ + public abstract Locale getLocale(); + + /** + * 获取请求头 + */ + public abstract Map getHeaders(); + + protected void setContext(WebContext openContext) { + THREAD_LOCAL.set(openContext); + } + + /** + * 获取当前WebContext + * + * @return 返回WebContext + */ + public static WebContext current() { + return THREAD_LOCAL.get(); + } +} diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/dubbo/DubboProviderTraceFilter.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/dubbo/DubboProviderTraceFilter.java index 5623390b..f0a748a8 100644 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/dubbo/DubboProviderTraceFilter.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/dubbo/DubboProviderTraceFilter.java @@ -1,7 +1,10 @@ package com.gitee.sop.support.dubbo; import com.alibaba.fastjson2.JSON; +import com.gitee.sop.support.constant.SopConstants; import com.gitee.sop.support.context.DefaultOpenContext; +import com.gitee.sop.support.context.DefaultWebContext; +import com.gitee.sop.support.context.WebContext; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.extension.Activate; @@ -21,11 +24,10 @@ import org.apache.dubbo.rpc.RpcServiceContext; @Activate(group = {CommonConstants.PROVIDER}) public class DubboProviderTraceFilter implements Filter { - private static final String OPEN_CONTEXT = "open.context"; - @Override public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { initOpenContext(); + initWebContext(); long startTime = System.currentTimeMillis(); long endTime = 0; try { @@ -40,10 +42,19 @@ public class DubboProviderTraceFilter implements Filter { private void initOpenContext() { // 从 ServerAttachment 中读取的参数是从 Client 中传递过来的 RpcContextAttachment serverAttachment = RpcContext.getServerAttachment(); - String attachment = serverAttachment.getAttachment(OPEN_CONTEXT); - if (attachment != null) { - DefaultOpenContext defaultOpenContext = JSON.parseObject(attachment, DefaultOpenContext.class); - defaultOpenContext.initContext(); + Object objectAttachment = serverAttachment.getObjectAttachment(SopConstants.OPEN_CONTEXT); + if (objectAttachment instanceof DefaultOpenContext) { + DefaultOpenContext openContext = (DefaultOpenContext) objectAttachment; + openContext.initContext(); + } + } + + private void initWebContext() { + RpcContextAttachment serverAttachment = RpcContext.getServerAttachment(); + Object objectAttachment = serverAttachment.getObjectAttachment(SopConstants.WEB_CONTEXT); + if (objectAttachment instanceof DefaultWebContext) { + DefaultWebContext webContext = (DefaultWebContext) objectAttachment; + webContext.initContext(); } } diff --git a/sop-support/sop-service-support/src/main/resources/security/serialize.allowlist b/sop-support/sop-service-support/src/main/resources/security/serialize.allowlist index fa946fe0..35d3bddb 100755 --- a/sop-support/sop-service-support/src/main/resources/security/serialize.allowlist +++ b/sop-support/sop-service-support/src/main/resources/security/serialize.allowlist @@ -1,2 +1,3 @@ com.gitee.sop.support.dto.CommonFileData com.gitee.sop.support.context.DefaultOpenContext +com.gitee.sop.support.context.DefaultWebContext \ No newline at end of file