|
|
|
@ -3,6 +3,7 @@ package com.qiaoba.module.tenant.filters;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.qiaoba.auth.properties.AuthConfigProperties;
|
|
|
|
|
import com.qiaoba.common.base.code.TenantErrorCode;
|
|
|
|
|
import com.qiaoba.common.base.constants.TenantConstant;
|
|
|
|
|
import com.qiaoba.common.base.context.BaseContext;
|
|
|
|
|
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
|
|
|
|
@ -45,26 +46,20 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter {
|
|
|
|
|
@Resource
|
|
|
|
|
private AuthConfigProperties authConfigProperties;
|
|
|
|
|
|
|
|
|
|
private final String LOGIN_TENANT_LIST_URI = "/tenant/normal-list";
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
|
|
|
|
log.debug(StrUtil.format("Start run DynamicDataSourceFilter, Uri: {}", request.getRequestURI()));
|
|
|
|
|
String tenantId = request.getHeader(TenantConstant.HEADER_KEY_TENANT);
|
|
|
|
|
// 主系统
|
|
|
|
|
if (TenantConstant.DEFAULT_TENANT_ID.equals(tenantId)) {
|
|
|
|
|
// 主系统 or 登录入口获取租户列表
|
|
|
|
|
if (TenantConstant.DEFAULT_TENANT_ID.equals(tenantId) || LOGIN_TENANT_LIST_URI.equals(request.getRequestURI())) {
|
|
|
|
|
dynamicDataSourceConfig.setDefaultSetting();
|
|
|
|
|
filterChain.doFilter(request, response);
|
|
|
|
|
after();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 白名单
|
|
|
|
|
for (String uri : authConfigProperties.getWhitelist()) {
|
|
|
|
|
if (UriUtil.match(uri, request.getRequestURI())) {
|
|
|
|
|
dynamicDataSourceConfig.setDefaultSetting();
|
|
|
|
|
filterChain.doFilter(request, response);
|
|
|
|
|
after();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SysTenant sysTenant = sysTenantService.selectById(tenantId);
|
|
|
|
|
// 检查租户是否允许访问
|
|
|
|
@ -108,26 +103,32 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter {
|
|
|
|
|
private boolean checkTenantIsNotAllow(HttpServletResponse response, SysTenant sysTenant) throws IOException {
|
|
|
|
|
if (Objects.isNull(sysTenant)) {
|
|
|
|
|
// 未找到租户信息
|
|
|
|
|
ResponseUtil.errorAuth(response, 401, "未找到租户信息");
|
|
|
|
|
log.debug("未找到租户信息");
|
|
|
|
|
ResponseUtil.errorAuth(response, TenantErrorCode.NOT_FIND.getCode(), TenantErrorCode.NOT_FIND.getMsg());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (TenantStatusEnum.DISABLE.getStatus().equals(sysTenant.getStatus())) {
|
|
|
|
|
// 封禁状态
|
|
|
|
|
ResponseUtil.errorAuth(response, 401, "租户已被封禁");
|
|
|
|
|
log.debug(StrUtil.format("租户已封禁, 租户ID: {}", sysTenant.getTenantId()));
|
|
|
|
|
ResponseUtil.errorAuth(response, TenantErrorCode.DISABLE.getCode(), TenantErrorCode.DISABLE.getMsg());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (TenantStatusEnum.EXPIRE.getStatus().equals(sysTenant.getStatus())) {
|
|
|
|
|
// 已过期
|
|
|
|
|
ResponseUtil.errorAuth(response, 401, "租户已过期");
|
|
|
|
|
log.debug(StrUtil.format("租户已过期, 租户ID: {}", sysTenant.getTenantId()));
|
|
|
|
|
ResponseUtil.errorAuth(response, TenantErrorCode.EXPIRE.getCode(), TenantErrorCode.EXPIRE.getMsg());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (DateUtil.compare(sysTenant.getExpireTime(), new Date()) < 0) {
|
|
|
|
|
// 已过期
|
|
|
|
|
ResponseUtil.errorAuth(response, 401, "租户已过期");
|
|
|
|
|
log.debug(StrUtil.format("租户已过期, 租户ID: {}", sysTenant.getTenantId()));
|
|
|
|
|
ResponseUtil.errorAuth(response, TenantErrorCode.EXPIRE.getCode(), TenantErrorCode.EXPIRE.getMsg());
|
|
|
|
|
// 更新租户状态为已过期
|
|
|
|
|
sysTenantService.update(new SysTenant(sysTenant.getTenantId(), TenantStatusEnum.EXPIRE.getStatus()));
|
|
|
|
|
dynamicDataSourceConfig.setDefaultSetting();
|
|
|
|
|
sysTenantService.updateStatus(sysTenant.getTenantId(), TenantStatusEnum.EXPIRE.getStatus());
|
|
|
|
|
after();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|