多租户
多租户身份认证
TenantIdAuthenticationFilter实现
系统通过TenantIdAuthenticationFilter过滤器实现多租户环境下的身份认证。该过滤器继承自OncePerRequestFilter,在每次请求时执行租户ID的提取和验证。
mermaid
flowchart TD
Start([请求进入]) --> CheckWhiteList["检查是否为白名单路径"]
CheckWhiteList --> |是| Pass["直接放行"]
CheckWhiteList --> |否| ExtractTenantId["从X-Tenant-Id头提取租户ID"]
ExtractTenantId --> ValidateTenantId{"租户ID是否为空?"}
ValidateTenantId --> |是| ReturnError["返回租户不存在错误"]
ValidateTenantId --> |否| SetTenantContext["设置租户上下文"]
SetTenantContext --> ProcessRequest["处理后续请求"]
ProcessRequest --> ClearContext["清除ThreadLocal"]
ClearContext --> End([请求结束])租户隔离机制
系统通过TenantContext类使用ThreadLocal存储当前请求的租户ID,确保在多线程环境下租户数据的隔离性。在请求处理完成后,通过finally块清除ThreadLocal,避免内存泄漏。
java
// 租户上下文管理
public class TenantContext {
private static final ThreadLocal<String> CONTEXT = new ThreadLocal<>();
public static void setTenantId(String tenantId) {
CONTEXT.set(tenantId);
}
public static String getTenantId() {
return CONTEXT.get();
}
public static void clear() {
CONTEXT.remove();
}
}