Helius
2021-01-26 cde91db7a91dbd1406b3eb700880ff8343de7ccb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.matrix.system.common.interceptor;
 
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
 
import com.matrix.system.common.bean.SysCompany;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
 
/**
 * 域名与公司对应绑定拦截
 * @author JIANGYOUYAO
 * @email 935090232@qq.com
 * @date 2017年11月29日
 */
@Component
public class HostInterceptor extends HandlerInterceptorAdapter {
 
 
    public static final String ATTR_COMPANY = "company";
 
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
    }
 
    /**
     * 通用拦截器
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
        SysCompany company= WebUtil.getSessionAttribute(ATTR_COMPANY);
 
        if (company != null) {
            LogUtil.debug("匹配到公司{}", company.getComName());
            return true;
        } else {
        // 获得请求的域名
        String host = WebUtil.getRequest().getServerName();
        //判断是否为debug模式
        if(MatrixConstance.DEBUG){
            String debugHost=request.getHeader("debugHost");
            if(StringUtils.isNotBlank(debugHost)){
                host=debugHost;
                WebUtil.getSession().removeAttribute(ATTR_COMPANY);
                LogUtil.debug("debugHost={}",host);
            }
        }
        LogUtil.debug("当前请求域名{}", host);
            @SuppressWarnings("unchecked")
            Map<String, SysCompany> companyMap = (Map<String, SysCompany>) WebUtil.getServletContext()
                    .getAttribute("companyMap");
            if(Objects.nonNull(companyMap)){
                Set<String> hostSet = companyMap.keySet();
                for (String key : hostSet) {
                    LogUtil.debug("-- 匹配公司key={},host={} 匹配结果={}", key , host, key.contains(host));
                    if (key.contains(host)) {
                        // 查到公司后存到sesssion中
                        WebUtil.setSessionAttribute(ATTR_COMPANY, companyMap.get(key));
                        return true;
                    }
                }
            }
        }
        LogUtil.debug("没有匹配到对应的公司");
        return false;
    }
 
 
 
 
    /**
     * 获取当前域名对于的公司ID
     * @return
     */
    public static Long getCompanyId() {
        return ((SysCompany) WebUtil.getSessionAttribute(ATTR_COMPANY)).getComId();
    }
 
}