多租户处理器
TenantHandler 是 Mongo-Plus 提供的一个插件,用于实现多租户的数据隔离。通过这个插件,可以确保每个租户只能访问自己的数据,从而实现数据的安全隔离。
TenantHandler
- 多租户处理器接口
- BsonValue getTenantId(): 获取租户id
- String getTenantIdColumn(): 获取租户字段,默认'tenant_id'
- boolean ignoreCollection(collectionName): 根据集合名判断是否忽略租户
- boolean ignoreDatabase(database): 根据数据库名判断是否忽略租户
- boolean ignoreDataSource(dataSource): 根据数据源名判断是否忽略租户
- boolean ignoreInsert(columns,tenantIdColumn): 忽略插入租户字段逻辑
@IgnoreTenant
- 忽略租户拼接注解,可标注在方法上
示例
实现 TenantHandler 接口,创建一个租户处理器,并且注册为Bean。在这个例子中,我们假设每个租户都有一个唯一的 tenantId,并且我们通过请求头来获取当前租户的 tenantId。
java
@Component
public class CustomTenantHandler implements TenantHandler {
@Override
public BsonValue getTenantId() {
// 假设有一个租户上下文,能够从中获取当前用户的租户
Long tenantId = TenantContextHolder.getCurrentTenantId();
// 返回租户ID的表达式,LongValue 是 JSQLParser 中表示 bigint 类型的 class
return new BsonInt64(tenantId);;
}
@Override
public String getTenantIdColumn() {
return "tenant_id";
}
@Override
public boolean ignoreCollection(String collectionName) {
// 根据需要返回是否忽略该集合
return false;
}
}