2.2K Star 11.2K Fork 3.4K

GVPbaomidou / mybatis-plus

 / 详情

多租户插件

已完成
创建于  
2019-09-27 10:23

当前使用版本(必须填写清楚,否则不予处理)

3.2.0

该问题是怎么引起的?(最新版上已修复的会直接close掉)

tenantId拼了两遍

重现步骤

pom 引入:

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

插件配置:

    @Bean
    public PaginationInterceptor tenantInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

        List<ISqlParser> sqlParserList = new ArrayList<>();
        TenantSqlParser tenantSqlParser = new TenantSqlParser();
        tenantSqlParser.setTenantHandler(new TenantHandler() {
            /**租户值*/
            @Override
            public Expression getTenantId(boolean where) {
                return singleTenantIdCondition();
            }

            private Expression singleTenantIdCondition() {
                return new StringValue(UserHelper.getCurrentTenantId());
            }

            /**租户字段名*/
            @Override
            public String getTenantIdColumn() {
                return SnowProperties.getTenantColumn();
            }

            /**过滤表*/
            @Override
            public boolean doTableFilter(String tableName) {
                // 判断是否在租户清单中,不需要SQL解析处理
                return TenantState.checkFilter(tableName);
            }
        });
        //多租户解析
        sqlParserList.add(tenantSqlParser);
        // 攻击 SQL 阻断解析器、加入解析链> 作用!阻止恶意的全表更新删除
        sqlParserList.add(new BlockAttackSqlParser());
        paginationInterceptor.setSqlParserList(sqlParserList);
        return paginationInterceptor;
    }

报错信息

### SQL: INSERT INTO sys_log (id, biz_type, request_method, is_exception, request_params, user_agent, request_uri, user_name, user_id, device_name, log_title, server_addr, tenant_id, browser_name, execute_time, remote_addr, tenant_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, '1')
### Cause: java.sql.SQLSyntaxErrorException: Column 'tenant_id' specified twice
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Column 'tenant_id' specified twice

评论 (5)

蛋挞王子 创建了任务

租户字段不要放entity里,或者不要自己set值

miemie 任务状态待办的 修改为已完成

@miemie 老哥,这就给我关闭了?实体里没有这个字段,你看看配置 哪里有手动set 这个问题是引用那个才出来的错误…

给出你的复现demo

@miemie 非常抱歉,我的疏忽,昨天很肯定的说实体没有这个字段,今天写复现demo测了好几遍都没有问题,回去看了一下是被别人加上了这个字段,查询的时候没问题,写数据时候就出来两个了;
大意了,内心很肯定而没回去看 :worried:
可是有些需求里可能会需要加上该字段,可不可以说写数据的时候排除,或者顺序优先于租户配置里呢,或者有其他的一种处理方法?

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
969595 miemieyaho 1699515566 1035203 lunxian8 1583457683
Java
1
https://gitee.com/baomidou/mybatis-plus.git
git@gitee.com:baomidou/mybatis-plus.git
baomidou
mybatis-plus
mybatis-plus

搜索帮助

53164aa7 5694891 3bd8fe86 5694891