From 5956264d6380ccce9d99d372882b85643ad64607 Mon Sep 17 00:00:00 2001 From: JEECG <445654970@qq.com> Date: Tue, 10 Mar 2026 23:11:21 +0800 Subject: [PATCH] =?UTF-8?q?--author:scott--date:20260310--for:issues/9388?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=A4=9A=E7=A7=9F=E6=88=B7=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E8=BF=87=E6=BB=A4=E5=99=A8=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BB=8E=E8=AF=B7=E6=B1=82=E5=A4=B4=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=A7=9F=E6=88=B7ID=E5=B9=B6=E8=AE=BE=E7=BD=AE=E5=88=B0TenantC?= =?UTF-8?q?ontext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/security/TenantContextFilter.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/TenantContextFilter.java diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/TenantContextFilter.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/TenantContextFilter.java new file mode 100644 index 000000000..97379ed7f --- /dev/null +++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/TenantContextFilter.java @@ -0,0 +1,39 @@ +package org.jeecg.config.security; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.config.TenantContext; +import org.jeecg.common.constant.CommonConstant; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +/** + * 多租户上下文过滤器 + * 从请求头中获取租户ID并设置到TenantContext中 + * 对应shiro版本中JwtFilter里的TenantContext.setTenant逻辑 + * + * @author jeecg-boot + */ +@Slf4j +@Component +public class TenantContextFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + // 从请求头获取租户ID并设置到TenantContext(多租户用到) + String tenantId = request.getHeader(CommonConstant.TENANT_ID); + TenantContext.setTenant(tenantId); + try { + filterChain.doFilter(request, response); + } finally { + // 请求结束后清除,防止线程复用导致租户信息污染 + TenantContext.clear(); + } + } +}