From 1fc41f1443edaedb59cc68d460345f0d99933a83 Mon Sep 17 00:00:00 2001 From: cat_shark <1716967236@qq.com> Date: Wed, 27 May 2026 21:24:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20MyBatis-Plus=20?= =?UTF-8?q?=E5=A4=9A=E7=A7=9F=E6=88=B7=E9=85=8D=E7=BD=AE=EF=BC=8C=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=B3=A8=E5=85=A5=E8=A1=8C=E7=BA=A7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../config/MybatisPlusConfig.java | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java diff --git a/pom.xml b/pom.xml index 9a91bd7..605e56d 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ true 17 17 - --enable-preview + org.projectlombok diff --git a/src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java b/src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java new file mode 100644 index 0000000..d956761 --- /dev/null +++ b/src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java @@ -0,0 +1,54 @@ +package com.guo.learningprogresstracker.config; + +import cn.dev33.satoken.stp.StpUtil; +import net.sf.jsqlparser.expression.StringValue; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; +import net.sf.jsqlparser.expression.Expression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Arrays; +import java.util.List; + +/** + * MyBatis-Plus 多租户配置 + * 利用 TenantLineInnerInterceptor 自动在 SELECT/UPDATE/DELETE 语句中 + * 注入 WHERE created_by = #{当前登录用户},实现行级数据隔离。 + */ +@Configuration +public class MybatisPlusConfig { + + /** + * 不需要租户过滤的表(仅排除不含 created_by 的系统表) + */ + private static final List EXCLUDE_TABLES = Arrays.asList( + "user", + "flyway_schema_history", + "databasechangelog", + "databasechangeloglock" + ); + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { + @Override + public Expression getTenantId() { + return new StringValue(StpUtil.getLoginIdAsString()); + } + + @Override + public String getTenantIdColumn() { + return "created_by"; + } + + @Override + public boolean ignoreTable(String tableName) { + return EXCLUDE_TABLES.contains(tableName.toLowerCase()); + } + })); + return interceptor; + } +}