一直也没用过Jeecg Boot的多租户,没敢用,最近恰好扒到了相关的代码,就捋一下逻辑,为以后使用及调试做准备。
以下根据代码分析Jeecg Boot多租户的实现逻辑
1.用户登录
用户登录后,后端会查出登录用户的租户ID(可多个),整理为租户ID集合与用户信息一同返回给前端

image.png
2.前端收到返回信息
前端收到返回信息,取出租户ID集合,
如果有多个租户ID让用户手动选择一个当前租户,
如果没有租户ID则默认值0,
使用"saveTenant"方法将租户ID设置到header上,之后发送请求时header都会带租户ID

image.png
3.后端接收请求时
后端接收请求时会用JwtFilter拦截请求,在preHandle()方法中取出请求header中的租户ID,并设置到TenantContext对象中

image.png
4.jeecg使用mybatis plus的多租户插件实现多租户数据隔离
在MybatisPlusSaasConfig配置类里设置了TenantLineInnerInterceptor拦截器,里面会根据配置判断哪些数据表需要走租户过滤,如果需要走租户过滤,mybatis plus 会在执行sql前拼接租户ID=租户ID的过滤条件,会从TenantContext中取出当前用户的租户ID。
TenantLineInnerInterceptor拦截器除了在查询时会自动过滤租户ID实现数据隔离外,插入数据时也会自动设置租户ID,这块没测试但应该是这样

image.png

image.png