mybatis-plus阻止全表更新与删除

BlockAttackInnerInterceptor 是mybatis-plus的一个内置拦截器,用于防止恶意的全表更新或删除操作。当你添加了这个拦截器后,它会检查即将执行的 sql语句,如果有尝试进行全表更新或删除的语句,该拦截器会阻止这些操作。

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
package com.zy.fast.admin.config;

import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.parsers.BlockAttackSqlParser;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import net.sf.jsqlparser.statement.delete.Delete;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * @author javachen
 * @description MybatisPlus分页工具类
 */
@Configuration
@MapperScan("com.zy.fast.admin.moudles.*.mapper")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {

        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));

        List<ISqlParser> sqlParserList = new ArrayList<>();
        // 攻击 SQL 阻断解析器、加入解析链
        sqlParserList.add(new BlockAttackSqlParser() {
            @Override
            public void processDelete(Delete delete) {
                 //如果你想自定义做点什么,可以重写父类方法像这样子
                if ("sys_user_account".equals(delete.getTable().getName())) {
                    // 自定义跳过某个表,其他关联表可以调用 delete.getTables() 判断
                    return ;
                }
                super.processDelete(delete);
            }
        });
        paginationInterceptor.setSqlParserList(sqlParserList);

        return paginationInterceptor;
    }

}

测试不带where条件删除时

### Error updating database.  Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Prohibition of full table deletion
### The error may exist in file [D:\fast-admin\target\classes\mapper\system\SysUserAccountMapper.xml]
### The error may involve com.zy.fast.admin.moudles.system.mapper.SysUserAccountMapper.deleteByUserId
### The error occurred while executing an update
### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Prohibition of full table deletion
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.delete(DefaultSqlSession.java:212)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
	... 116 common frames omitted

相关推荐

  1. mybatis-plus阻止更新删除

    2023-12-24 04:58:05       70 阅读
  2. 删除更新

    2023-12-24 04:58:05       28 阅读
  3. Mybatis-plus逻辑删除

    2023-12-24 04:58:05       54 阅读
  4. MyBatis-Plus实现逻辑删除

    2023-12-24 04:58:05       44 阅读
  5. SpringBootMybatis-plus实战

    2023-12-24 04:58:05       36 阅读
  6. mybatis-plus 关联子查询

    2023-12-24 04:58:05       57 阅读
  7. mybatis-plus 动态名简易使用

    2023-12-24 04:58:05       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-24 04:58:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-24 04:58:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-24 04:58:05       82 阅读
  4. Python语言-面向对象

    2023-12-24 04:58:05       91 阅读

热门阅读

  1. MySQL中EXPLAIN关键字解释

    2023-12-24 04:58:05       51 阅读
  2. MySQL常用语句

    2023-12-24 04:58:05       75 阅读
  3. MySQL 查询语句大全

    2023-12-24 04:58:05       55 阅读
  4. 【测试发布】

    2023-12-24 04:58:05       62 阅读
  5. 婚姻总结·十一

    2023-12-24 04:58:05       63 阅读
  6. QB/T 2658-2017 卫生设备用台盆检测

    2023-12-24 04:58:05       48 阅读
  7. 如何用python实现完全二叉树

    2023-12-24 04:58:05       46 阅读
  8. PCIe 5.0相对于PCIe 4.0的优势差异对比

    2023-12-24 04:58:05       93 阅读
  9. Mac 生成Android签名证书 .keystore文件

    2023-12-24 04:58:05       69 阅读