This commit is contained in:
2023-07-19 13:25:38 +08:00
parent 94242e17a0
commit aa73abd136
6 changed files with 49 additions and 18 deletions

View File

@ -3,14 +3,17 @@ package com.qiaoba.module.tenant.filter;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.enums.TenantModeEnum;
import com.qiaoba.api.tenant.enums.TenantStatusEnum;
import com.qiaoba.api.tenant.utils.TenantUtil;
import com.qiaoba.common.base.code.DatasourceErrorCode;
import com.qiaoba.common.base.code.TenantErrorCode;
import com.qiaoba.common.base.constant.BaseConstant;
import com.qiaoba.common.base.constant.TenantConstant;
import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.common.base.order.FilterOrder;
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
import com.qiaoba.common.database.context.PrimaryDatasourceContext;
import com.qiaoba.common.web.util.ResponseUtil;
import com.qiaoba.common.web.util.UriUtil;
import com.qiaoba.module.tenant.service.SysTenantService;
@ -61,6 +64,7 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter {
try {
log.debug("Start run DynamicDataSourceFilter, Uri: {}", request.getRequestURI());
String tenantId = request.getHeader(TenantConstant.HEADER_KEY_TENANT);
// 主系统 or 登录入口获取租户列表
if (TenantConstant.DEFAULT_TENANT_ID.equals(tenantId) || TenantConstant.LOGIN_TENANT_LIST_URI.equals(request.getRequestURI())) {
dynamicDataSourceConfig.setDefaultSetting();
@ -113,6 +117,14 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter {
return true;
}
// 检查租户数据源是否正常
if (TenantModeEnum.isDatasource(sysTenant.getMode())
&& !PrimaryDatasourceContext.exist(sysTenant.getTenantId())) {
// 无主数据
log.debug("租户数据源不可用, 租户ID: {}", sysTenant.getTenantId());
ResponseUtil.errorAuth(response, DatasourceErrorCode.CONNECT_ERROR.getCode(), DatasourceErrorCode.CONNECT_ERROR.getMsg());
return true;
}
if (TenantStatusEnum.isDisable(sysTenant.getStatus())) {
// 封禁状态
log.debug("租户已封禁, 租户ID: {}", sysTenant.getTenantId());