Skip to content
广告❤️成为赞助商

数据变动记录拦截器

在数据库操作中,记录数据变动和控制操作的安全性是非常重要的。Mongo-Plus 提供了一个数据变动记录拦截器 DataChangeRecorderInnerInterceptor,它不仅能够自动记录操作日志、添加到数据库,还支持安全阈值控制,例如限制批量更新或插入的数量

DataChangeRecorderInnerInterceptor

  • DataChangeRecorderInnerInterceptor 是 Mongo-Plus 提供的一个拦截器,它可以在执行数据库操作时自动记录数据变动,并且可以根据配置的安全阈值来控制操作,比如限制一次批量更新或插入的记录数不超过 1000 条。
  • setExceptionMessage(String): 超出阈值提示信息
  • setIgnoredColumnList(List): 忽略的表
  • setBatchUpdateLimit(Integer): 批量更新条数上限
  • setdisplayCompleteData(Boolean): 是否显示完整数据,开启后,changedData字段数据量可能会很大
  • 2.1.3新增如下
  • enableSaveDatabase(BaseMapper): 开启将记录信息保存到数据库
  • setDatasourceName(String): 数据源,默认获取上下文中的数据源
  • isMasterDatasource(Boolean): 是否使用默认数据源保存数据,如果设置了datasourceName,该配置会失效,但切换数据源并不会失效,推荐设置,使用主数据源,避免连续切库
  • setDatabaseName(String): 数据库,默认获取上下文中对应的数据源的库
  • setCollectionName(String): 集合名,默认为DATA_CHANGE_RECORD

示例

在SpringBoot中,将DataChangeRecorderInnerInterceptor注册为Bean,并根据需要配置其他信息

java
@Bean
    public DataChangeRecorderInnerInterceptor dataChangeRecorderInnerInterceptor(BaseMapper baseMapper){
        DataChangeRecorderInnerInterceptor dataChangeRecorderInnerInterceptor = new DataChangeRecorderInnerInterceptor();
        // 批量更新条数上限
        dataChangeRecorderInnerInterceptor.setBatchUpdateLimit(100);
        // 设置超出阈值提示信息
        dataChangeRecorderInnerInterceptor.setExceptionMessage("操作条数超出阈值");
        // 忽略的表
        dataChangeRecorderInnerInterceptor.setIgnoredColumnList(new ArrayList<>());
        // 是否显示完整数据,开启后,changedData字段数据量可能会很大
        dataChangeRecorderInnerInterceptor.setDisplayCompleteData(true);
        // 开启将记录信息保存到数据库
        dataChangeRecorderInnerInterceptor.enableSaveDatabase(baseMapper);
        // 使用主数据源保存信息
        dataChangeRecorderInnerInterceptor.isMasterDatasource(true);
        return dataChangeRecorderInnerInterceptor;
    }

使用插件

配置好插件之后使用 Mongo-Plus 提供的 CRUD 方法,插件会自动记录数据变动并执行安全控制:

当执行批量更新或插入或根据多个_id删除操作时,如果操作的记录数超过了配置的安全阈值,插件会抛出异常

注意事项

  • 确保在配置拦截器时设置了合适的安全阈值,以防止不安全的批量操作。
  • 插件会自动记录数据变动,但你需要自行实现日志记录的逻辑。
  • 在配置和使用插件时,要考虑到数据库的性能和操作的实际需求。 DataChangeRecorderInnerInterceptor 是一个强大的工具,它可以帮助你自动记录数据变动并控制操作的安全性。通过合理配置,你可以确保数据库操作的安全性和数据的完整性。记得在使用时遵循最佳实践,确保系统的安全性和稳定性。