Multi-Tenant Handler
TenantHandleris a plugin provided by Mongo-Plus for implementing multi-tenant data isolation. With this plugin, each tenant can only access their own data, ensuring secure data segregation.
TenantHandler
- Multi-tenant handler interface
BsonValue getTenantId(): Get the tenant IDString getTenantIdColumn(): Get the tenant field, default is'tenant_id'boolean ignoreCollection(collectionName): Determine whether to ignore tenant for a given collectionboolean ignoreDatabase(database): Determine whether to ignore tenant for a given databaseboolean ignoreDataSource(dataSource): Determine whether to ignore tenant for a given data sourceboolean ignoreInsert(columns, tenantIdColumn): Ignore inserting tenant field logic
@IgnoreTenant
- Annotation to ignore tenant injection, can be placed on methods
Example
Implement the TenantHandler interface, create a tenant handler, and register it as a Bean. In this example, we assume each tenant has a unique tenantId, which is retrieved from the request header.
java
@Component
public class CustomTenantHandler implements TenantHandler {
@Override
public BsonValue getTenantId() {
// Assume there is a tenant context to get the current user's tenant
Long tenantId = TenantContextHolder.getCurrentTenantId();
// Return the tenant ID expression, BsonInt64 is the class representing bigint in JSQLParser
return new BsonInt64(tenantId);
}
@Override
public String getTenantIdColumn() {
return "tenant_id";
}
@Override
public boolean ignoreCollection(String collectionName) {
// Return whether to ignore this collection based on requirements
return false;
}
}Programmatic Tenant Ignoring
Using the TenantManager class, you can ignore tenants programmatically, suitable for fine-grained tenant ignoring:
java
TenantManager.withoutTenant(() -> {
baseMapper.list();
});
