Mybaties 拦截器 && 防止无where条件的update与delete语句执行

3,216 阅读1分钟

高危误操作

delete from student

update student set name=“han”

实现逻辑

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)

实现步骤

1、写拦截器类

继承 Interceptor,实现三个抽象方法

  1. void setProperties (Properties var1)

    //获取参数
    
  2. Object plugin (Object var1)

    //plugin: 将原核心对象和增强功能(定义的拦截功能)合并 得到新的核心对象
    
  3. Object intercept (Invocation var1)

    //拦截实现
    

2、声明拦截类型(签名注解)

3、配置plugin

其他问题

1、多个拦截器的执行顺序

2、sql_safe_updates=1

​ 开启安全更新模式(safe update mode)

相比于Mybaties拦截器,限制更加严格,自由性不高。

在update操作中:当where条件中列(column)没有索引可用且无limit限制时会拒绝更新。where条件为常量且无limit限制时会拒绝更新。

在delete操作中: 当①where条件为常量,②或where条件为空,③或where条件中 列(column)没有索引可用且无limit限制时拒绝删除。

参考链接

www.bilibili.com/video/BV1Q4…

blog.csdn.net/qq_22200097…

www.cnblogs.com/drake-guo/p…

【获取代码可联系作者】