多租户逻辑隔离未启用导致数据交叉访问;需依次完成:一、启用租户上下文识别机制;二、配置数据库级逻辑隔离策略;三、启用服务实例级租户路由控制;四、配置租户专属配置中心接入点;五、启用租户资源配额与限流策略。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您已完成WorkBuddy的安装,但多个租户间的数据或配置出现交叉访问或权限越界现象,则说明多租户逻辑隔离尚未正确启用。以下是实现逻辑隔离部署的具体操作步骤:
一、启用租户上下文识别机制
WorkBuddy依赖HTTP请求头或Token载荷中的租户标识(如tenant-id)进行运行时上下文隔离。需确保所有入口流量携带唯一且可信的租户标识,并由网关或认证服务完成预校验与注入。
1、登录WorkBuddy管理控制台,进入【系统设置】→【租户管理】→【全局策略】。
2、将【租户标识来源】切换为“JWT声明字段”,并在字段名输入框中填入tenant_id。
3、勾选【强制校验租户标识存在性】,保存配置后重启API网关服务。
二、配置数据库级逻辑隔离策略
WorkBuddy支持单库多Schema或单库单表前缀两种逻辑隔离模式,不涉及物理库拆分。该策略通过动态SQL解析器在执行前重写表名,确保租户数据互不可见。
1、编辑application.yml文件,在spring.datasource节点下添加属性:workbuddy.tenant.isolation-mode: schema。
2、为每个租户在数据库中创建独立Schema,命名格式为wb_t_{tenant_code}(例如wb_t_acme)。
3、执行初始化脚本tools/init-tenant-schema.sql,传入租户编码参数自动完成Schema结构同步。
三、启用服务实例级租户路由控制
当WorkBuddy以集群方式部署时,需确保同一租户的全部请求被调度至具备该租户上下文缓存的节点,避免跨节点状态不一致。该机制依托于Spring Cloud Gateway的谓词路由与自定义过滤器协同实现。
1、在gateway路由配置中为每条route添加predicate:Header=tenant-id, \w+。
使用 draw.io(.drawio 格式)和 SVG 生成兼容 Microsoft Visio 的架构图。当用户需要以下任一场景时触发: - 用于 Visio 或技术文档的架构/系统/网络图 - 带连接标注的分层控制系统图 - 将 draw.io XML 转换为稳定、可嵌入的 SVG - 修复 Visio 或 draw.io 无法打开的故障排查类图表 - 任何需专业级布局且文本可编辑的图表
2、在filter列表中插入CustomTenantAffinityFilter,其内部使用ConcurrentHashMap缓存租户ID与实例IP映射关系。
3、启动时在application.yml中设置workbuddy.tenant.affinity-ttl: 1800(单位秒),控制亲和关系有效期。
四、配置租户专属配置中心接入点
WorkBuddy从Nacos或Apollo读取配置时,默认使用公共命名空间。逻辑隔离要求每个租户拥有独立配置集,且仅加载自身命名空间下的配置项,防止配置泄露。
1、在bootstrap.yml中将spring.cloud.nacos.config.namespace改为动态表达式:${TENANT_ID:public}。
2、为每个租户在Nacos控制台创建命名空间,ID设为对应租户编码,如acme-prod。
3、在各租户命名空间内新建dataId为workbuddy-tenant.yaml的配置文件,仅写入该租户所需的feature开关与阈值参数。
五、启用租户资源配额与限流策略
逻辑隔离不仅涵盖数据与配置,还需限制各租户对CPU、内存、并发连接数等共享资源的占用比例,防止某一租户异常行为影响其他租户服务稳定性。
1、进入【运维中心】→【资源治理】→【租户配额】,选择目标租户并点击【新建策略】。
2、设置JVM堆内存上限为1024MB,线程池核心数上限为8,最大连接数为200。
3、启用熔断开关,配置错误率阈值为5%,统计窗口为60秒,触发后自动降级该租户全部非核心接口。

















