zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
@@ -3,6 +3,7 @@ import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.web.BaseAction; import com.matrix.system.common.init.InitWebContainer; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -73,4 +74,11 @@ return new AjaxResult(AjaxResult.STATUS_SUCCESS, "debug模式开启"); } @RequestMapping("/getLocalCache") public @ResponseBody AjaxResult getLocalCache(String key) { Object cache=InitWebContainer.getLocalCache(key); return AjaxResult.buildSuccessInstance(cache); } } zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
@@ -4,16 +4,24 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import javax.servlet.ServletContext; import com.matrix.core.exception.GlobleException; 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 com.matrix.system.common.service.SysCompanyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.web.context.ServletContextAware; @@ -25,12 +33,14 @@ * @author:姜友瑶 * @date 2016年10月18日 */ @Controller public class InitWebContainer implements ServletContextAware{ @Component @Order(Ordered.HIGHEST_PRECEDENCE) public class InitWebContainer implements ApplicationRunner { private static ConcurrentMap<String,Object> localCache=new ConcurrentHashMap(60); private static final String TRUE = "true"; private ServletContext servletContext; static private final String LANGUAGE_ZH = "zh"; @@ -56,12 +66,10 @@ * * 容器启动后加载数据 * @author:姜友瑶 * @param sc * @date 2016年10月18日 */ @Override public void setServletContext(ServletContext sc) { this.servletContext = sc; public void run(ApplicationArguments args) { // 初始化调试模式 initDebug(); @@ -70,7 +78,7 @@ //初始化公司 initParams(); LogUtil.info("\r\n\r\n**********************************************\r\n" + "* =========== Matrix启动成功 ===========\r\n" + "* =========== 成功 ===========\r\n" + "* DEBUG模式:" + debug+"*\r\n" + "* 语言环境:" + Locale.getDefault().getLanguage()+"\r\n" @@ -118,10 +126,30 @@ for (SysCompany sysCompany : company) { companyMap.put(sysCompany.getComWebUrl(), sysCompany); } servletContext.setAttribute("companyMap", companyMap); saveLocalCache("companyMap", companyMap); } /** * 获取本地缓存 * @param key * @param <T> * @return */ public static <T> T getLocalCache(String key){ return (T)localCache.get(key); } /** * 保存一个本地缓存 * @param key * @param value */ public static void saveLocalCache(String key,Object value){ if(null!=localCache.put(key,value)){ LogUtil.debug("覆盖原有缓存{}",key); } } } zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
@@ -1,8 +1,10 @@ package com.matrix.system.common.interceptor; 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 com.matrix.system.common.init.InitWebContainer; import org.springframework.stereotype.Component; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @@ -15,6 +17,7 @@ /** * 域名与公司对应绑定拦截 * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2017年11月29日 @@ -35,39 +38,32 @@ */ @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 { // 获得请求的域名--由小程序直接传过来companyCode参数对应公司的网址 String host = request.getHeader("companyCode"); 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("没有匹配到对应的公司"); if (StringUtils.isBlank(host)) { return false; } Map<String, SysCompany> companyMap = InitWebContainer.getLocalCache("companyMap"); SysCompany company=companyMap.get(host); if(Objects.nonNull(company)){ // 查到公司后存到sesssion中 LogUtil.debug("匹配到公司{}", company.getComName()); WebUtil.setSessionAttribute(ATTR_COMPANY, company); return true; } LogUtil.debug("没有匹配到对应的公司"); return false; } /** * 获取当前域名对于的公司ID * * @return */ public static Long getCompanyId() {