mybatis-plus阻止全表更新與刪除的實現
更新時間:2023年12月28日 10:23:32 作者:javachen__
BlockAttackInnerInterceptor 是mybatis-plus的一個內置攔截器,用于防止惡意的全表更新或刪除操作,本文主要介紹了mybatis-plus阻止全表更新與刪除的實現,感興趣的可以了解一下
BlockAttackInnerInterceptor 是mybatis-plus的一個內置攔截器,用于防止惡意的全表更新或刪除操作。當你添加了這個攔截器后,它會檢查即將執(zhí)行的 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 優(yōu)化,只針對部分 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())) {
// 自定義跳過某個表,其他關聯(lián)表可以調用 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
到此這篇關于mybatis-plus阻止全表更新與刪除的實現的文章就介紹到這了,更多相關mybatis-plus阻止全表更新與刪除內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot統(tǒng)一響應格式及統(tǒng)一異常處理
在我們開發(fā)SpringBoot后端服務時,一般需要給前端統(tǒng)一響應格式,本文主要介紹了SpringBoot統(tǒng)一響應格式及統(tǒng)一異常處理2023-05-05
解決jhipster修改jdl生成的實體類報錯:liquibase.exception.ValidationFailed
這篇文章主要介紹了解決jhipster修改jdl生成的實體類報錯:liquibase.exception.ValidationFailedException: Validation Failed問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11

