MyBatisPlus(二十)防全表更新与删除

说明

针对 update 和 delete 语句,阻止恶意的全表更新和全表删除。

实现方式

配置BlockAttackInnerInterceptor拦截器

代码

java 复制代码
package com.example.core.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.example.web")
public class MybatisPlusConfig {

    /**
     * 添加拦截器
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); // 针对 update 和 delete 语句 作用: 阻止恶意的全表更新删除
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 如果配置多个插件,切记分页最后添加
        // interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        return interceptor;
    }
}

测试

更新全表

java 复制代码
    /**
     * 更新全表
     */
    @Test
    public void updateAll() {
        User user = new User();
        user.setGender(GenderEnum.MALE);

        mapper.update(user, null);
    }

删除全表

java 复制代码
    /**
     * 删除全表
     */
    @Test
    public void deleteAll() {
        mapper.delete(null);
    }

正常更新

正常更新,不受影响。

java 复制代码
    /**
     * 更新一条数据
     */
    @Test
    public void update() {
        User user = new User();
        user.setId(7L);
        user.setGender(GenderEnum.MALE);

        mapper.updateById(user);
    }

未开启防护前

未开启防护前,可以更新全表,或删除全表。

全表更新


全表删除


相关推荐
呆萌很2 小时前
SpringBoot+MyBatis Plus+PageHelper+vue+mysql 实现用户信息增删改查功能
spring boot
武昌库里写JAVA5 小时前
Golang的消息中间件选型
java·开发语言·spring boot·学习·课程设计
小小鸭程序员6 小时前
Spring Boot项目连接MySQL数据库及CRUD操作示例
java·spring boot·python·mysql·spring
字节源流6 小时前
【spring Cloud Netflix】OpenFeign组件
java·spring boot·后端
AntBlack7 小时前
都说 SpringBoot 启动慢 ,你知道慢在哪里吗?
java·spring boot·面试
爱的叹息8 小时前
Spring boot 中QPS(Queries Per Second)与 TPS(Transactions Per Second)详细对比
java·spring boot·后端
小小鸭程序员8 小时前
Spring Boot整合MyBatis-Plus实现CRUD操作教程
java·spring boot·python·mysql·spring
菲兹园长9 小时前
配置文件、Spring日志
java·spring boot·spring
爱的叹息10 小时前
Spring Boot 集成 Redis中@Cacheable 和 @CachePut 的详细对比,涵盖功能、执行流程、适用场景、参数配置及代码示例
spring boot·redis·后端
Mr.wangh11 小时前
Spring Boot 打印日志
java·数据库·spring boot