数据变动记录拦截器
在数据库操作中,记录数据变动和控制操作的安全性是非常重要的。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
是一个强大的工具,它可以帮助你自动记录数据变动并控制操作的安全性。通过合理配置,你可以确保数据库操作的安全性和数据的完整性。记得在使用时遵循最佳实践,确保系统的安全性和稳定性。