diff --git a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java new file mode 100644 index 0000000..708e80e --- /dev/null +++ b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java @@ -0,0 +1,44 @@ +package org.dromara.workflow.filter; + +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.common.constants.CommonConstants; +import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.rpc.*; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.tenant.helper.TenantHelper; + +/** + * Dubbo租户上下文过滤器 + * 用于在Dubbo服务调用时传递和设置租户上下文 + * + * @author Claude + */ +@Slf4j +@Activate(group = {CommonConstants.PROVIDER}) +public class DubboTenantFilter implements Filter { + + private static final String TENANT_ID_KEY = "tenantId"; + + @Override + public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { + // 获取调用方传递的租户ID + String tenantId = RpcContext.getContext().getAttachment(TENANT_ID_KEY); + + if (StringUtils.isNotBlank(tenantId)) { + // 设置租户上下文 + TenantHelper.setDynamic(tenantId); + log.debug("Dubbo服务端设置租户上下文: {}", tenantId); + } + + try { + // 执行服务调用 + return invoker.invoke(invocation); + } finally { + // 清理租户上下文,避免线程复用时的污染 + if (StringUtils.isNotBlank(tenantId)) { + TenantHelper.clearDynamic(); + log.debug("Dubbo服务端清理租户上下文: {}", tenantId); + } + } + } +} \ No newline at end of file diff --git a/ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 0000000..6c6b7db --- /dev/null +++ b/ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +dubboTenantFilter=org.dromara.workflow.filter.DubboTenantFilter \ No newline at end of file