From 9754a576790a8ea52d55ecb8a478fd3652810f1a Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Fri, 22 Aug 2025 16:57:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E6=A8=A1=E5=BC=8F-=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cdzy/user/component/MyTenantFactory.java | 15 +++++++ .../user/component/TenantInterceptor.java | 39 +++++++++++++++++++ .../user/config/MyBatisFlexConfiguration.java | 3 ++ .../java/com/cdzy/user/config/WebConfig.java | 23 +++++++++++ .../com/cdzy/user/model/entity/Staff.java | 1 + 5 files changed, 81 insertions(+) create mode 100644 ebike-user/src/main/java/com/cdzy/user/component/MyTenantFactory.java create mode 100644 ebike-user/src/main/java/com/cdzy/user/component/TenantInterceptor.java create mode 100644 ebike-user/src/main/java/com/cdzy/user/config/WebConfig.java diff --git a/ebike-user/src/main/java/com/cdzy/user/component/MyTenantFactory.java b/ebike-user/src/main/java/com/cdzy/user/component/MyTenantFactory.java new file mode 100644 index 00000000..b227eb21 --- /dev/null +++ b/ebike-user/src/main/java/com/cdzy/user/component/MyTenantFactory.java @@ -0,0 +1,15 @@ +package com.cdzy.user.component; + +import com.mybatisflex.core.tenant.TenantFactory; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +public class MyTenantFactory implements TenantFactory { + + public Object[] getTenantIds(){ + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + Long tenantId = (Long) attributes.getAttribute("tenantId", RequestAttributes.SCOPE_REQUEST); + + return new Object[]{tenantId}; + } +} \ No newline at end of file diff --git a/ebike-user/src/main/java/com/cdzy/user/component/TenantInterceptor.java b/ebike-user/src/main/java/com/cdzy/user/component/TenantInterceptor.java new file mode 100644 index 00000000..1c122ef0 --- /dev/null +++ b/ebike-user/src/main/java/com/cdzy/user/component/TenantInterceptor.java @@ -0,0 +1,39 @@ +package com.cdzy.user.component; + +import cn.dev33.satoken.stp.StpUtil; +import com.cdzy.common.model.StaffDto; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.util.List; + +public class TenantInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request + , HttpServletResponse response, Object handler) throws Exception { + + //通过 request 去获取租户 ID + Long tenantId = getTenantIdByReuqest(request); + + //设置租户ID到 request 的 attribute + request.setAttribute("tenantId", tenantId); + + return true; + } + + Long getTenantIdByReuqest(HttpServletRequest request) { + String token = request.getHeader("Authorization"); + String id = (String) StpUtil.getLoginIdByToken(token); + StaffDto staffDto = (StaffDto) StpUtil.getSessionByLoginId(id).get(id); + return staffDto.getOrgId(); + } + +// List getAllTenantIdByReuqest(HttpServletRequest request) { +// String token = request.getHeader("Authorization"); +// String id = (String) StpUtil.getLoginIdByToken(token); +// StaffDto staffDto = (StaffDto) StpUtil.getSessionByLoginId(id).get(id); +// return staffDto.getOrgId(); +// } +} \ No newline at end of file diff --git a/ebike-user/src/main/java/com/cdzy/user/config/MyBatisFlexConfiguration.java b/ebike-user/src/main/java/com/cdzy/user/config/MyBatisFlexConfiguration.java index 2ff0cec3..be476d40 100644 --- a/ebike-user/src/main/java/com/cdzy/user/config/MyBatisFlexConfiguration.java +++ b/ebike-user/src/main/java/com/cdzy/user/config/MyBatisFlexConfiguration.java @@ -1,12 +1,15 @@ package com.cdzy.user.config; +import com.cdzy.user.component.MyTenantFactory; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.dialect.DbType; import com.mybatisflex.core.dialect.DialectFactory; +import com.mybatisflex.core.tenant.TenantFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** diff --git a/ebike-user/src/main/java/com/cdzy/user/config/WebConfig.java b/ebike-user/src/main/java/com/cdzy/user/config/WebConfig.java new file mode 100644 index 00000000..0f9da883 --- /dev/null +++ b/ebike-user/src/main/java/com/cdzy/user/config/WebConfig.java @@ -0,0 +1,23 @@ +package com.cdzy.user.config; + +import com.cdzy.user.component.MyTenantFactory; +import com.cdzy.user.component.TenantInterceptor; +import com.mybatisflex.core.tenant.TenantFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Bean + public TenantFactory tenantFactory(){ + return new MyTenantFactory(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new TenantInterceptor()); + } +} \ No newline at end of file diff --git a/ebike-user/src/main/java/com/cdzy/user/model/entity/Staff.java b/ebike-user/src/main/java/com/cdzy/user/model/entity/Staff.java index a4bf69d0..1a0fbb03 100644 --- a/ebike-user/src/main/java/com/cdzy/user/model/entity/Staff.java +++ b/ebike-user/src/main/java/com/cdzy/user/model/entity/Staff.java @@ -37,6 +37,7 @@ public class Staff implements Serializable { private String password; + @Column(tenantId = true) private Long orgId; @Column(onInsertValue = "0")