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

多租户处理器

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;
    }

}