【Mybatis-Plus】防全表更新与删除插件
From: https://baomidou.com/plugins/block-attack/
BlockAttackInnerInterceptor
是 MyBatis-Plus 框架提供的一个安全插件,专门用于防止恶意的全表更新和删除操作。该插件通过拦截 update
和 delete
语句,确保这些操作不会无意中影响到整个数据表,从而保护数据的完整性和安全性。
功能特性
- 阻止全表更新删除:插件能够识别并阻止没有指定条件的
update
和delete
语句,这些语句可能会导致全表数据被修改或删除。 - 保护数据安全:通过限制全表操作,减少因误操作或恶意攻击导致的数据丢失风险。
使用方法
- 注入插件:在 Spring Boot 配置类中,通过
@Bean
注解将MybatisPlusInterceptor
注入到 Spring 容器中,并添加BlockAttackInnerInterceptor
作为内部拦截器。
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
}
- 配置拦截规则:插件默认拦截没有指定条件的
update
和delete
语句。如果需要自定义拦截规则,可以参考 MyBatis-Plus 的文档进行配置。
测试示例
全表更新测试
以下测试示例展示了如何使用 BlockAttackInnerInterceptor
来防止全表更新操作。
@SpringBootTest
public class QueryWrapperTest {
@Autowired
private UserService userService;
/**
* SQL:UPDATE user SET name=?,email=?;
*/
@Test
public void testFullUpdate() {
User user = new User();
user.setId(999L);
user.setName("custom_name");
user.setEmail("xxx@mail.com");
// 由于没有指定更新条件,插件将抛出异常
// com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Prohibition of table update operation
Assertions.assertThrows(MybatisPlusException.class, () -> {
userService.saveOrUpdate(user, null);
});
}
}
部分更新测试
以下测试示例展示了如何正确地执行部分更新操作,插件不会对此类操作进行拦截。
@SpringBootTest
public class QueryWrapperTest {
@Autowired
private UserService userService;
/**
* SQL:UPDATE user SET name=?, email=? WHERE id = ?;
*/
@Test
public void testPartialUpdate() {
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(User::getId, 1);
User user = new User();
user.setId(10L);
user.setName("custom_name");
user.setEmail("xxx@mail.com");
// 由于指定了更新条件,插件不会拦截此操作
userService.saveOrUpdate(user, wrapper);
}
}
注意
- 合理配置:确保在配置插件时,考虑到项目的实际需求,避免过度限制导致正常操作受阻。
- 测试验证:在生产环境部署前,应充分测试插件的功能,确保其按预期工作。
BlockAttackInnerInterceptor
插件是 MyBatis-Plus 提供的一个重要的安全工具,它能够有效地防止全表更新和删除操作,保护数据库免受意外或恶意的数据破坏。通过合理配置和使用该插件,可以显著提高应用程序的数据安全性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)