CMS系统多站点设计研究
多站点有隔离多站点 和 数据共享的多站点
1)数据共享的多站点,一般叫做站群
就是每个站点有自己的权限体系,主要迎合政府的需求
2)完全隔离的
就是用户、 内容、 完全不互通, 主要是降低单个站点的成本。
站群的实现方式一:
在发布的tomcat 的webapps目录下,复制更换项目名(甚至连同更换模板文件),即可实现同样多站点访问部署。
站群的实现方式二:
目前要达到一种站群配置,就是更高程度的利用原来框架
具体实施方式一:通过权限控制,根据模版文件来实现各自独立站点。
具体实施方式二:通过域名控制来实现站群管理。
多站点访问设计。
更改为按域名。
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.core.JFinal;
import com.jfinal.plugin.activerecord.Record;
import com.ofsoft.cms.admin.controller.system.SystemUtile;
import com.ofsoft.cms.core.config.AdminConst;
import com.ofsoft.cms.core.config.ErrorCode;
import com.ofsoft.cms.core.config.FrontConst;
import com.ofsoft.cms.core.uitle.SiteUtile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 前端页面拦截器
* Created by OF on 2018/5/9.
*/
public class FrontInterceptor implements Interceptor {
public void intercept(Invocation ai) {
if (!SystemUtile.isInstall()) {
ai.getController().redirect(AdminConst.installHtml);
return;
}
Controller controller = ai.getController();
HttpServletRequest request = controller.getRequest();
SiteUtile.setLocalRequest(request);
List
Record site = null;
if (list == null || list.size() <= 0) {
controller.renderJson(ErrorCode.get("10001"));
} else {
site = SiteUtile.getSite(request);
if (site == null) {
String server = request.getServerName();
System.out.println("=FrontInterceptor==="+server);
for (Record record : list) {
if (server.equals(record.getStr("domain_name"))) {
site = record;
break;//20190403---shenk-----add
}
}
}
if (site == null) {
SystemUtile.initSite();
site = SystemUtile.getDefualSitCache();
}
controller.setAttr(FrontConst.SITE_SESSION, site);
controller.setAttr("reroot", http://JFinal.me().getContextPath() + "/resource/" + site.get("template_path"));
SiteUtile.setSite(request, site);
SiteUtile.setSite(site);
//增加访问记录
SystemUtile.addAccessLog(request, site);
ai.invoke();
}
}
}
通过域名的方式,成功实现一个后台控制多个站点,即每个模板站点,都通过一个域名来访问,测试成功。
请看下图配置:
配置的4个子站,通过配置域名访问如下: