package com.kidgrow.common.filter;
import cn.hutool.core.util.StrUtil;
import com.kidgrow.common.constant.SecurityConstants;
import com.kidgrow.common.context.ClientContextHolder;
import com.kidgrow.common.context.TenantContextHolder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
*
* @Description: 租户过滤器
* @Project:
* @CreateDate: Created in 2020/2/27 15:02
* @Author: liuke
*/
@ConditionalOnClass(Filter.class)
public class TenantFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
try {
String clientId = request.getHeader(SecurityConstants.CLIENT_HEADER);
//保存ClientID
if (StrUtil.isNotEmpty(clientId)) {
ClientContextHolder.setClient(clientId);
}
//优先获取请求参数中的tenantId值
// String tenantId = request.getParameter(CommonConstant.TENANT_ID_PARAM);
String tenantId = "";
if (StrUtil.isEmpty(tenantId)) {
tenantId = request.getHeader(SecurityConstants.TENANT_HEADER);
}
//保存租户id
if (StrUtil.isNotEmpty(tenantId)) {
TenantContextHolder.setTenant(tenantId);
}
filterChain.doFilter(request, response);
} finally {
TenantContextHolder.clear();
}
}
}