SpringBoot + 多租户规则沙箱隔离:数据串号、规则越权?彻底杜绝的架构设计!
做多租户系统的同学肯定都踩过这个坑:某个租户的数据莫名其妙出现在了另一个租户的账号里,或者租户 A 配置的规则被租户 B 给用上了。这些问题听起来像是低级 bug,但背后折射出的是多租户架构中数据隔离和权限控制的复杂性。 特别是在规则引擎场景下,租户会有自己的业务规则,比如优惠券规则、会员等级规则、风控规则等。如果规则引擎没有做好租户隔离,后果可能是: 租户 A 领到了租户 B 的优惠券,造成营销损失 租户 A 的风控规则被租户 B 绕过,导致业务风险 财务规则串号,造成账务错误 今天我们就来聊聊多租户规则沙箱隔离的架构设计,彻底杜绝数据串号和规则越权问题。 为什么多租户隔离这么难? 先来分析一下多租户隔离的难点在哪里。很多团队会说:"我们用了数据库租户字段,做了 WHERE tenant_id = xxx 的查询啊,怎么还会串号?" 实际情况远比这复杂: 1. 规则引擎的上下文污染 规则引擎通常会缓存已加载的规则,如果缓存 key 设计不当,可能会出现: 规则 key 只用了 ruleId,没有包含 tenantId 规则执行时的上下文(Context)被多个租户共享 规则变量....