MyBatisPlus防全表更新与删除的实现示例
作者:宋冠巡
本文主要介绍了MyBatisPlus防全表更新与删除的实现示例,针对 update 和 delete 语句,阻止恶意的全表更新和全表删除,具有一定的参考价值,感兴趣的可以了解一下
说明
针对 update 和 delete 语句,阻止恶意的全表更新和全表删除。
实现方式
配置BlockAttackInnerInterceptor
拦截器
代码
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; } }
测试
更新全表
/** * 更新全表 */ @Test public void updateAll() { User user = new User(); user.setGender(GenderEnum.MALE); mapper.update(user, null); }
删除全表
/** * 删除全表 */ @Test public void deleteAll() { mapper.delete(null); }
正常更新
正常更新,不受影响。
/** * 更新一条数据 */ @Test public void update() { User user = new User(); user.setId(7L); user.setGender(GenderEnum.MALE); mapper.updateById(user); }
未开启防护前
未开启防护前,可以更新全表,或删除全表。
全表更新
全表删除
到此这篇关于MyBatisPlus防全表更新与删除的实现示例的文章就介绍到这了,更多相关MyBatisPlus防全表更新与删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!