需求:

1, 不同的权限角色看见的数据不一样, 进行数据隔离

2, 大部分表里面都维护了一个sys_code 大区编号,   1 是湖南, 2 是广东, 他们需要看到数据是不一样的

3, 不需要每个查询都自己去判断角色去修改sql,   可以配置多个字段, sys_code 隔离,  city_id 隔离, 省管理, 和市管理, 灵活配置

package com.test.first;import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.reflection.MetaObject;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;@Configuration
@MapperScan(basePackages = {"com.dao"})
public class FilterConfig {private static final Map<String, String > IGNORE_TENANT_SMAP = new HashMap<String, String>(){{// 这些mapper 方法也不修改put("com.test.first.dao.TestMapper.getId","");put("com.test.first.dao.TestMapper.getId2","");put("com.test.first.dao.TestMapper.getId3","");}};private static final HashSet<String> TABLE_FILTER = new HashSet();static {// 过滤表, 这些表不进行修改TABLE_FILTER.add("sys_user");TABLE_FILTER.add("sys_user1");TABLE_FILTER.add("sys_user2");}@Autowired//自动注入requestprivate HttpServletRequest request;@Bean@SuppressWarnings("all")public PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// sql 解析器List<ISqlParser> sqlParserList = new ArrayList<>();TenantSqlParser tenantSqlParser = new TenantSqlParser();tenantSqlParser.setTenantHandler(new TenantHandler() {@Overridepublic Expression getTenantId() {HttpSession session = request.getSession();// 此处返回sys_code 字段值, 修改sql时候的参数, 从session 里面获取用户,// 或者其他方式获取用户标识, 这里方便直接写死了return new LongValue(11);}@Overridepublic String getTenantIdColumn() {// 返回增加条件的字段return "sys_code";}@Overridepublic boolean doTableFilter(String tableName) {// 这里可以判断是否过滤表// 对没有sys_code 的表格进行过滤if (TABLE_FILTER.contains(tableName)){// 返回true 则不过滤return true;}return false;}});// 添加到解析器, 如需添加多个, 这个地方是list, 多new几个, new TenantSqlParser(); 即可sqlParserList.add(tenantSqlParser);// 设置解析器集合paginationInterceptor.setSqlParserList(sqlParserList);// 过滤函数paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {@Overridepublic boolean doFilter(MetaObject metaObject) {MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);// com.test.first.dao.TestMapper.getId 精确到mapper 方法级if(IGNORE_TENANT_SMAP.containsKey(ms.getId())) {// 不进行修改return true;}return false;}});return paginationInterceptor;}
}

原始sql

SELECT * FROM bd_product

经过配置后会自动增加条件

SELECT * FROM bd_product WHERE sys_code = 11

mysql-plus 动态修改全局sql, 进行数据隔离, 多租户, 多字段修改相关推荐

  1. MySQL简介、M有SQL的存储引擎、表、字段和数据

    Java知识点总结:想看的可以从这里进入 目录 2.MySQL特性介绍 2.1.MySQL简介 2.2.存储引擎 2.3.表.字段.数据 2.MySQL特性介绍 2.1.MySQL简介 MySQL 是 ...

  2. 服务器修改密码sql打不开了,服务器管理员密码修改后SQL_Server_2008无法启动

    服务器管理员administrator密码修改后SQL_Server_2008无法启动 其实很简单,我发现在网上找这个相关的问题,什么说法都有,把人绕的晕头转向的 我来教大家如何解决这个问题: 首先我 ...

  3. mysql 语句 简书_MySQL SQL语句

    Mysql数据库:端口号3306,超级用户 root unsigned 正值 修改提示符:--prompt 提示符 常见定义 参数:\D 完整的日期 \d当前数据库 \h服务器名称 \u 当前用户 数 ...

  4. fiddler修改接口请求返回数据Response的三种方法

    背景 访问某个URL地址,正常返回结果是 {"code":0,"msg":"success","rows":[" ...

  5. vue+vite+element-plus修改全局主题颜色

    vue3+vite+element-plus修改全局主题颜色 新建修改全局的样式文件 配置vite.config.ts文件 修改APP.vue 最近在研究Vue3+vite+element-plus项 ...

  6. SaaS 系统架构,租户数据隔离模式与租户信息解析方案!

    这段时候在准备从零开始做一套SaaS系统,之前的经验都是开发单数据库系统并没有接触过SaaS系统,所以接到这个任务的时候也有也些头疼,不过办法部比困难多,难得的机会. 在网上找了很多关于SaaS的资料 ...

  7. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

    添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...

  8. mysql 工具里直接修改sql结果数据_sql server如何在查询结果页面直接编辑数据

    展开全部 sql server在查询结抄果页面直接编辑数据2113的方法和详细的操作步5261骤如下: 1.首先,4102打开数据库查1653询语句. 输入查询语句以查询数据表中的数据内容,如下图所示 ...

  9. MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)

    用了一段时间的springboot,想着百度一下自动生成代码的方式,包括后面如何生成动态sql方法的方式. 摸索了几天,整理一下: ** 1 自动生成代码方式:com.baomidou.mybatis ...

最新文章

  1. java excel导入去重_如何把日志导入到excel文档图文教程(含url去重)
  2. hdu 1423 最长公共递增子序列
  3. python几行代码识别验证码_Python有多强?文字识别(验证码识别)只需三行代码!...
  4. eclipse-4.4.2安装Groovy插件(其他版本eclipse可参考)
  5. 升级openssh漏洞
  6. 企业应用开发(1)--软件学院OJ系统需求分析与原型图设计
  7. 零件缝隙平行线距离检测4
  8. 教你如何保存有妖气漫画
  9. 小米手机定时开关机在哪里设置?让你的小米手机“休息一下”
  10. 7 爬虫 CrawlSpider类 增量式爬虫 分布式爬虫 生产者消费者模式
  11. uniapp省市区三级联动
  12. Python时间序列建模基础
  13. Android Studio 中使用 Git
  14. 当android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 .
  15. 用python做一个好玩的数字炸弹游戏
  16. 电感的能量储存在哪里-深度解析(4)
  17. 《关于我摸鱼一天后搞定PyCharm这档事》Python环境配置
  18. HALCON示例程序classify_halogen_bulbs.hdev使用SVM分类器检测卤素灯泡的好坏
  19. 前端工程化之动态数据代理
  20. UVM——TLM通信(1)

热门文章

  1. Win10 安装程序错误2502/2503 拒绝访问 解决
  2. HOG可视化 opencv
  3. PMP-【第15章 PMP考试的难点与易点】2021-2-17(304页-312页)【完】
  4. Linux下编译cscope,linux环境下cscope使用
  5. 双控专业就业机器人_工业机器人专业好就业吗?有哪些机器人技术岗位?
  6. linux的rt补丁安装,微软发布补丁封杀允许Surface RT安装Linux的“漏洞”
  7. mysql利用tgz恢复_mysql备份恢复
  8. 手机腾讯视频android版插件,小程序1.6.5版更新,终于支持腾讯视频插件了
  9. android开发toast通知,Toast Notifications
  10. python库管理_多版本python控制以及python三方库管理