package io.dataease.dds.interceptor;
|
|
import io.dataease.dds.DynamicContextHolder;
|
import io.dataease.dds.constant.DataSourceConstant;
|
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletResponse;
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
/**
|
* 不同租户不同二级域名
|
* nginx下把租户ID以及租户创建时间设置在请求头
|
* 获取请求头部租户ID和创建时间
|
* 根据租户ID和创建时间获取租户数据源名称
|
* 切换数据源
|
*/
|
public class DSInterceptor implements HandlerInterceptor {
|
|
|
@Override
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
String tenant = request.getHeader("tenant");
|
String time = request.getHeader("time");
|
DynamicContextHolder.push(getTenantDsKey(tenant, time));
|
return true;
|
}
|
|
private String getTenantDsKey(String tenant, String time) {
|
if (null == tenant || null == time) return "official-ds";
|
return String.format(DataSourceConstant.DS_NAME_PREFIX, tenant, time);
|
}
|
}
|