508 lines
18 KiB
Java
508 lines
18 KiB
Java
package com.nis.web.controller;
|
||
import java.beans.PropertyEditorSupport;
|
||
import java.io.IOException;
|
||
import java.util.ArrayList;
|
||
import java.util.Date;
|
||
import java.util.List;
|
||
|
||
import javax.servlet.http.HttpServletResponse;
|
||
|
||
import org.apache.commons.lang3.StringEscapeUtils;
|
||
import org.apache.commons.lang3.StringUtils;
|
||
import org.apache.log4j.Logger;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.ui.Model;
|
||
import org.springframework.web.bind.WebDataBinder;
|
||
import org.springframework.web.bind.annotation.InitBinder;
|
||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||
|
||
import com.nis.domain.FunctionRegionDict;
|
||
import com.nis.domain.FunctionServiceDict;
|
||
import com.nis.domain.ServiceConfigInfo;
|
||
import com.nis.domain.basics.ServiceDictInfo;
|
||
import com.nis.domain.basics.SysDictInfo;
|
||
import com.nis.domain.configuration.AreaBean;
|
||
import com.nis.domain.configuration.AreaIpCfg;
|
||
import com.nis.domain.configuration.BaseCfg;
|
||
import com.nis.domain.configuration.BaseIpCfg;
|
||
import com.nis.domain.configuration.BaseStringCfg;
|
||
import com.nis.domain.configuration.ComplexkeywordCfg;
|
||
import com.nis.domain.configuration.NumBoundaryCfg;
|
||
import com.nis.domain.configuration.RequestInfo;
|
||
//import com.nis.main.ConvertTool;
|
||
import com.nis.util.Constants;
|
||
import com.nis.util.DateUtils;
|
||
import com.nis.util.DictUtils;
|
||
import com.nis.util.JsonMapper;
|
||
import com.nis.web.service.ArchiveServcie;
|
||
import com.nis.web.service.AreaService;
|
||
import com.nis.web.service.DictService;
|
||
import com.nis.web.service.LogService;
|
||
import com.nis.web.service.MenuService;
|
||
import com.nis.web.service.OfficeService;
|
||
import com.nis.web.service.RoleService;
|
||
import com.nis.web.service.SystemService;
|
||
import com.nis.web.service.UserService;
|
||
import com.nis.web.service.basics.ServiceDictInfoService;
|
||
import com.nis.web.service.basics.SysDictInfoService;
|
||
import com.nis.web.service.configuration.AppCfgService;
|
||
import com.nis.web.service.configuration.AvCfgService;
|
||
import com.nis.web.service.configuration.ComplexStringCfgService;
|
||
import com.nis.web.service.configuration.DnsIpCfgService;
|
||
import com.nis.web.service.configuration.FtpCfgService;
|
||
import com.nis.web.service.configuration.IpCfgService;
|
||
import com.nis.web.service.configuration.MailCfgService;
|
||
import com.nis.web.service.configuration.MediaCfgService;
|
||
import com.nis.web.service.configuration.NumCfgService;
|
||
import com.nis.web.service.configuration.RequestInfoService;
|
||
import com.nis.web.service.configuration.SslCfgService;
|
||
import com.nis.web.service.configuration.StringCfgService;
|
||
import com.nis.web.service.configuration.TunnelCfgService;
|
||
import com.nis.web.service.configuration.WebCfgService;
|
||
import com.nis.web.service.specific.SpecificServiceCfgService;
|
||
import com.nis.web.service.specific.SpecificServiceHostCfgService;
|
||
import com.nis.web.service.systemService.ServiceConfigInfoService;
|
||
|
||
public class BaseController {
|
||
|
||
@Autowired
|
||
protected UserService userService;
|
||
|
||
@Autowired
|
||
protected SystemService systemService;
|
||
|
||
@Autowired
|
||
protected OfficeService officeService;
|
||
|
||
@Autowired
|
||
protected AreaService areaService;
|
||
|
||
@Autowired
|
||
protected RoleService roleService;
|
||
|
||
@Autowired
|
||
protected MenuService menuService;
|
||
|
||
@Autowired
|
||
protected LogService logService;
|
||
|
||
@Autowired
|
||
protected ArchiveServcie archiveServcie;
|
||
|
||
@Autowired
|
||
protected DictService dictService;
|
||
|
||
@Autowired
|
||
protected IpCfgService ipCfgService;
|
||
|
||
@Autowired
|
||
protected DnsIpCfgService dnsIpCfgService;
|
||
|
||
@Autowired
|
||
protected WebCfgService webCfgService;
|
||
|
||
@Autowired
|
||
protected MailCfgService mailCfgService;
|
||
|
||
@Autowired
|
||
protected FtpCfgService ftpCfgService;
|
||
|
||
@Autowired
|
||
protected TunnelCfgService tunnCfgService;
|
||
|
||
@Autowired
|
||
protected SslCfgService sslCfgService;
|
||
|
||
@Autowired
|
||
protected MediaCfgService mediaCfgService;
|
||
|
||
@Autowired
|
||
protected AppCfgService appCfgService;
|
||
|
||
|
||
@Autowired
|
||
protected ServiceDictInfoService serviceDictInfoService;
|
||
|
||
@Autowired
|
||
protected SysDictInfoService sysDictInfoService;
|
||
|
||
protected final Logger logger = Logger.getLogger(this.getClass());
|
||
|
||
@Autowired
|
||
protected ServiceConfigInfoService serviceConfigInfoService;
|
||
|
||
@Autowired
|
||
protected RequestInfoService requestInfoService;
|
||
@Autowired
|
||
protected StringCfgService stringCfgService;
|
||
@Autowired
|
||
protected NumCfgService numCfgService;
|
||
@Autowired
|
||
protected ComplexStringCfgService complexStringCfgService;
|
||
@Autowired
|
||
protected SpecificServiceCfgService specificServiceCfgService;
|
||
@Autowired
|
||
protected SpecificServiceHostCfgService specificServiceHostCfgService;
|
||
@Autowired
|
||
protected AvCfgService avCfgService;
|
||
/**
|
||
* 管理基础路径
|
||
*/
|
||
@Value("${adminPath}")
|
||
protected String adminPath;
|
||
|
||
/**
|
||
* 前端基础路径
|
||
*/
|
||
@Value("${frontPath}")
|
||
protected String frontPath;
|
||
|
||
/**
|
||
* 前端URL后缀
|
||
*/
|
||
@Value("${urlSuffix}")
|
||
protected String urlSuffix;
|
||
|
||
|
||
/**
|
||
* 客户端返回JSON字符串
|
||
* @param response
|
||
* @param object
|
||
* @return
|
||
*/
|
||
protected String renderString(HttpServletResponse response, Object object) {
|
||
return renderString(response, JsonMapper.toJsonString(object), "application/json");
|
||
}
|
||
|
||
|
||
/**
|
||
* 客户端返回字符串
|
||
* @param response
|
||
* @param string
|
||
* @return
|
||
*/
|
||
protected String renderString(HttpServletResponse response, String string, String type) {
|
||
try {
|
||
response.reset();
|
||
response.setContentType(type);
|
||
response.setCharacterEncoding("utf-8");
|
||
response.getWriter().print(string);
|
||
return null;
|
||
} catch (IOException e) {
|
||
return null;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 添加Model消息
|
||
* @param message
|
||
*/
|
||
protected void addMessage(Model model, String... messages) {
|
||
StringBuilder sb = new StringBuilder();
|
||
for (String message : messages){
|
||
sb.append(message).append(messages.length>1?"<br/>":"");
|
||
}
|
||
model.addAttribute("message", sb.toString());
|
||
}
|
||
|
||
/**
|
||
* 添加Flash消息
|
||
* @param message
|
||
*/
|
||
protected void addMessage(RedirectAttributes redirectAttributes, String... messages) {
|
||
StringBuilder sb = new StringBuilder();
|
||
for (String message : messages){
|
||
sb.append(message).append(messages.length>1?"<br/>":"");
|
||
}
|
||
redirectAttributes.addFlashAttribute("message", sb.toString());
|
||
}
|
||
|
||
/**
|
||
* 初始化数据绑定
|
||
* 1. 将所有传递进来的String进行HTML编码,防止XSS攻击
|
||
* 2. 将字段中Date类型转换为String类型
|
||
*/
|
||
@InitBinder
|
||
protected void initBinder(WebDataBinder binder) {
|
||
// String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击
|
||
binder.registerCustomEditor(String.class, new PropertyEditorSupport() {
|
||
@Override
|
||
public void setAsText(String text) {
|
||
setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));
|
||
}
|
||
@Override
|
||
public String getAsText() {
|
||
Object value = getValue();
|
||
return value != null ? value.toString() : "";
|
||
}
|
||
});
|
||
// Date 类型转换
|
||
binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
|
||
@Override
|
||
public void setAsText(String text) {
|
||
setValue(DateUtils.parseDate(text));
|
||
}
|
||
});
|
||
}
|
||
protected void initPageCondition(Model model){
|
||
List<RequestInfo> requestInfos=requestInfoService.getAllRequestInfo();
|
||
model.addAttribute("requestInfos", requestInfos);
|
||
List<ServiceDictInfo> fls=serviceDictInfoService.findAllFlDict();
|
||
model.addAttribute("fls", fls);
|
||
List<ServiceDictInfo> xzs=serviceDictInfoService.findAllXzDict();
|
||
model.addAttribute("xzs", xzs);
|
||
List<ServiceDictInfo> lables=serviceDictInfoService.findAllLableDict();
|
||
model.addAttribute("lables", lables);
|
||
}
|
||
protected void initFormCondition(Model model){
|
||
List<RequestInfo> requestInfos=requestInfoService.getValidRequestInfo();
|
||
model.addAttribute("requestInfos", requestInfos);
|
||
List<ServiceDictInfo> fls=serviceDictInfoService.findFlDict();
|
||
model.addAttribute("fls", fls);
|
||
List<ServiceDictInfo> xzs=serviceDictInfoService.findXzDict();
|
||
model.addAttribute("xzs", xzs);
|
||
List<ServiceDictInfo> lables=serviceDictInfoService.findLableDict();
|
||
model.addAttribute("lables", lables);
|
||
List<Integer> itTypeList=new ArrayList<Integer>();
|
||
itTypeList.add(Constants.ITEM_TYPE_AREA);
|
||
List<SysDictInfo> areas = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null);
|
||
model.addAttribute("areas", areas);
|
||
itTypeList.clear();
|
||
itTypeList.add(Constants.ITEM_TYPE_ISP);
|
||
List<SysDictInfo> isps = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null);
|
||
model.addAttribute("isps", isps);
|
||
//初始化一个默认的地域ip给界面
|
||
AreaIpCfg areaIpCfg=new AreaIpCfg();
|
||
areaIpCfg.initDefaultValue();
|
||
model.addAttribute("_areaCfg", areaIpCfg);
|
||
}
|
||
protected void initFormCondition(Model model,BaseCfg cfg){
|
||
List<RequestInfo> requestInfos=requestInfoService.getValidRequestInfo();
|
||
model.addAttribute("requestInfos", requestInfos);
|
||
List<ServiceDictInfo> fls=serviceDictInfoService.findFlDict();
|
||
model.addAttribute("fls", fls);
|
||
List<ServiceDictInfo> xzs=serviceDictInfoService.findXzDict();
|
||
model.addAttribute("xzs", xzs);
|
||
List<ServiceDictInfo> lables=serviceDictInfoService.findLableDict();
|
||
model.addAttribute("lables", lables);
|
||
List<Integer> itTypeList=new ArrayList<Integer>();
|
||
itTypeList.add(Constants.ITEM_TYPE_AREA);
|
||
List<SysDictInfo> areas = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null);
|
||
model.addAttribute("areas", areas);
|
||
itTypeList.clear();
|
||
itTypeList.add(Constants.ITEM_TYPE_ISP);
|
||
List<SysDictInfo> isps = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null);
|
||
model.addAttribute("isps", isps);
|
||
//初始化一个默认的地域ip给界面
|
||
AreaIpCfg areaIpCfg=new AreaIpCfg();
|
||
areaIpCfg.initDefaultValue();
|
||
model.addAttribute("_areaCfg", areaIpCfg);
|
||
List<FunctionRegionDict> regionList = DictUtils.getFunctionRegionDictList(cfg.getFunctionId());
|
||
model.addAttribute("regionList", regionList);
|
||
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(cfg.getFunctionId());
|
||
model.addAttribute("serviceList", serviceList);
|
||
}
|
||
protected void initUpdateFormCondition(Model model,BaseCfg cfg){
|
||
//查询配置对应的地域ip
|
||
List<AreaIpCfg> areaCfgs=ipCfgService.getAreaCfgByCompileId(cfg.getCompileId());
|
||
model.addAttribute("areaCfgs", areaCfgs);
|
||
StringBuffer areaCfgIds=new StringBuffer();
|
||
for(AreaIpCfg areaCfg:areaCfgs){
|
||
areaCfgIds.append(areaCfg.getCfgId()+",");
|
||
}
|
||
//update时判断是否有删除地域ip
|
||
model.addAttribute("areaCfgIds", areaCfgIds.toString());
|
||
//初始化一个默认的地域ip给界面
|
||
AreaIpCfg areaIpCfg=new AreaIpCfg();
|
||
areaIpCfg.initDefaultValue();
|
||
model.addAttribute("_areaCfg", areaIpCfg);
|
||
//从区域生效ID中获取区域与运营商
|
||
String areaEffectiveIds=cfg.getAreaEffectiveIds();
|
||
List<AreaBean> areaIspList=new ArrayList<AreaBean>();
|
||
if(StringUtils.isNotBlank(areaEffectiveIds)){
|
||
String[] areaIsps=areaEffectiveIds.split(",");
|
||
for(String areaIsp:areaIsps){
|
||
AreaBean area=new AreaBean();
|
||
if(areaIsp.contains(":")){
|
||
area.setArea(areaIsp.split(":")[0]);
|
||
area.setIsp(areaIsp.split(":")[1]);
|
||
}else{
|
||
area.setArea(areaIsp);
|
||
}
|
||
areaIspList.add(area);
|
||
}
|
||
}
|
||
model.addAttribute("_areaIsps", areaIspList);
|
||
List<RequestInfo> requestInfos=requestInfoService.getAllRequestInfo();
|
||
model.addAttribute("requestInfos", requestInfos);
|
||
List<ServiceDictInfo> fls=serviceDictInfoService.findAllFlDict();
|
||
model.addAttribute("fls", fls);
|
||
List<ServiceDictInfo> xzs=serviceDictInfoService.findAllXzDict();
|
||
model.addAttribute("xzs", xzs);
|
||
List<ServiceDictInfo> lables=serviceDictInfoService.findAllLableDict();
|
||
model.addAttribute("lables", lables);
|
||
List<Integer> itTypeList=new ArrayList<Integer>();
|
||
itTypeList.add(Constants.ITEM_TYPE_AREA);
|
||
List<SysDictInfo> areas = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null);
|
||
model.addAttribute("areas", areas);
|
||
itTypeList.clear();
|
||
itTypeList.add(Constants.ITEM_TYPE_ISP);
|
||
List<SysDictInfo> isps = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null);
|
||
model.addAttribute("isps", isps);
|
||
List<FunctionRegionDict> regionList = DictUtils.getFunctionRegionDictList(cfg.getFunctionId());
|
||
model.addAttribute("regionList", regionList);
|
||
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(cfg.getFunctionId());
|
||
model.addAttribute("serviceList", serviceList);
|
||
}
|
||
protected void setSaveOrUpdateProps(Model model,BaseCfg cfg,String areaCfgIds) throws Exception{
|
||
String tableName=cfg.getTableName();
|
||
List<BaseIpCfg> areaCfg=cfg.getAreaCfg();
|
||
List<AreaBean> areaIsps=cfg.getAreaIsp();
|
||
if(Constants.IS_AREA_EFFECTIVE_NO==cfg.getIsAreaEffective()){
|
||
cfg.setAreaEffectiveIds("");
|
||
cfg.setAreaType(null);
|
||
}else if(Constants.IS_AREA_EFFECTIVE_YES==cfg.getIsAreaEffective()){
|
||
if(Constants.AREA_EFFECTIVE_TYPE_AREA_ISP==cfg.getAreaType()&&areaIsps!=null&&areaIsps.size()>0){
|
||
StringBuffer areaEffectiveIds=new StringBuffer();
|
||
for(int i=0;i<areaIsps.size();i++){
|
||
if(StringUtils.isNotBlank(areaIsps.get(i).getIsp())){
|
||
areaEffectiveIds.append(areaIsps.get(i).getArea()+":"+areaIsps.get(i).getIsp());
|
||
}else{
|
||
areaEffectiveIds.append(areaIsps.get(i).getArea());
|
||
}
|
||
if(i!=areaIsps.size()-1){
|
||
areaEffectiveIds.append(",");
|
||
}
|
||
}
|
||
if(StringUtils.isBlank(areaEffectiveIds.toString())){
|
||
logger.error("区域管控,且按照地域运营商管控,但是地域运营商为空!");
|
||
addMessage(model,"save_failed");
|
||
return ;
|
||
}
|
||
cfg.setAreaEffectiveIds(areaEffectiveIds.toString());
|
||
}else if(Constants.AREA_EFFECTIVE_TYPE_AREA_IP==cfg.getAreaType()&&areaCfg!=null&&areaCfg.size()>0){
|
||
cfg.setAreaEffectiveIds("");
|
||
}else{
|
||
logger.error("区域管控,但是地域+ISP以及地域IP全部为空!");
|
||
addMessage(model,"save_failed");
|
||
return ;
|
||
}
|
||
}
|
||
int serviceId=cfg.getServiceId();
|
||
if(StringUtils.isBlank(tableName)){
|
||
ServiceConfigInfo serviceConfigInfo=serviceConfigInfoService.findSysServiceConfigInfo(serviceId);
|
||
if(serviceConfigInfo!=null){
|
||
tableName=serviceConfigInfo.getTableName();
|
||
cfg.setTableName(tableName);
|
||
}
|
||
}
|
||
if(cfg.getCompileId()==null){
|
||
int compileId=0;
|
||
cfg.setCompileId(compileId);
|
||
}
|
||
Date date=new Date();
|
||
cfg.setIsValid(Constants.VALID_NO);
|
||
cfg.setIsAudit(Constants.AUDIT_NOT_YET);
|
||
if(cfg.getCfgId()==null){//新增
|
||
cfg.setCreatorId(cfg.getCurrentUser().getId());
|
||
cfg.setCreateTime(date);
|
||
if(Constants.IS_AREA_EFFECTIVE_YES==cfg.getIsAreaEffective()&&areaCfg!=null){
|
||
for(BaseIpCfg area:areaCfg){
|
||
area.setTableName(AreaIpCfg.getTablename());
|
||
area.setServiceId(serviceId);
|
||
area.setCompileId(cfg.getCompileId());
|
||
area.setAction(cfg.getAction());
|
||
area.setIsValid(Constants.VALID_NO);
|
||
area.setIsAudit(Constants.AUDIT_NOT_YET);
|
||
area.setRequestId(cfg.getRequestId());
|
||
area.setClassify(cfg.getClassify());
|
||
area.setAttribute(cfg.getAttribute());
|
||
area.setLable(cfg.getLable());
|
||
area.setCreatorId(cfg.getCurrentUser().getId());
|
||
area.setCreateTime(date);
|
||
}
|
||
}
|
||
if(cfg instanceof BaseIpCfg){
|
||
ipCfgService.addIpCfg((BaseIpCfg)cfg,areaCfg);
|
||
}else if(cfg instanceof BaseStringCfg){
|
||
stringCfgService.addStringCfg((BaseStringCfg)cfg,areaCfg);
|
||
}else if(cfg instanceof NumBoundaryCfg){
|
||
numCfgService.addNumCfg((NumBoundaryCfg)cfg,areaCfg);
|
||
}else if(cfg instanceof ComplexkeywordCfg){
|
||
complexStringCfgService.addStringCfg((ComplexkeywordCfg)cfg,areaCfg);
|
||
}
|
||
}else{//修改
|
||
cfg.setEditorId(cfg.getCurrentUser().getId());
|
||
cfg.setEditTime(new Date());
|
||
List<BaseIpCfg> updateAreaCfg=new ArrayList<>();
|
||
List<BaseIpCfg> deleteAreaCfg=new ArrayList<>();
|
||
List<BaseIpCfg> addAreaCfg=new ArrayList<>();
|
||
String[] cfgIds=null;
|
||
if(!StringUtils.isBlank(areaCfgIds)){
|
||
cfgIds=areaCfgIds.split(",");
|
||
}
|
||
if(Constants.IS_AREA_EFFECTIVE_YES==cfg.getIsAreaEffective()&&areaCfg!=null){
|
||
for(BaseIpCfg area:areaCfg){
|
||
area.setTableName(AreaIpCfg.getTablename());
|
||
area.setServiceId(serviceId);
|
||
area.setCompileId(cfg.getCompileId());
|
||
area.setAction(cfg.getAction());
|
||
area.setIsValid(Constants.VALID_NO);
|
||
area.setIsAudit(Constants.AUDIT_NOT_YET);
|
||
area.setRequestId(cfg.getRequestId());
|
||
area.setClassify(cfg.getClassify());
|
||
area.setAttribute(cfg.getAttribute());
|
||
area.setLable(cfg.getLable());
|
||
if(area.getCfgId()==null){
|
||
area.setCreatorId(cfg.getCurrentUser().getId());
|
||
area.setCreateTime(date);
|
||
addAreaCfg.add(area);
|
||
}else if(cfgIds!=null){
|
||
area.setEditorId(cfg.getCurrentUser().getId());
|
||
area.setEditTime(date);
|
||
boolean contains=false;
|
||
for(String cfgId:cfgIds){
|
||
if(!StringUtils.isBlank(cfgId)&&area.getCfgId().longValue()==Long.parseLong(cfgId)){
|
||
contains=true;
|
||
break;
|
||
}
|
||
}
|
||
if(contains){
|
||
updateAreaCfg.add(area);
|
||
}else{
|
||
deleteAreaCfg.add(area);
|
||
}
|
||
}
|
||
}
|
||
}else{
|
||
if(cfgIds!=null){
|
||
for(String cfgId:cfgIds){
|
||
if(!StringUtils.isBlank(cfgId)){
|
||
AreaIpCfg area=new AreaIpCfg();
|
||
area.setTableName(AreaIpCfg.getTablename());
|
||
area.setIsValid(Constants.VALID_DEL);
|
||
area.setCfgId(Long.parseLong(cfgId));
|
||
area.setEditorId(cfg.getCurrentUser().getId());
|
||
area.setEditTime(date);
|
||
deleteAreaCfg.add(area);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(cfg instanceof BaseIpCfg){
|
||
ipCfgService.updateIpCfg((BaseIpCfg)cfg,addAreaCfg,updateAreaCfg,deleteAreaCfg);
|
||
}else if(cfg instanceof BaseStringCfg){
|
||
stringCfgService.updateStringCfg((BaseStringCfg)cfg,addAreaCfg,updateAreaCfg,deleteAreaCfg);
|
||
}else if(cfg instanceof NumBoundaryCfg){
|
||
numCfgService.updateNumCfg((NumBoundaryCfg)cfg,addAreaCfg,updateAreaCfg,deleteAreaCfg);
|
||
}else if(cfg instanceof ComplexkeywordCfg){
|
||
complexStringCfgService.updateStringCfg((ComplexkeywordCfg)cfg,addAreaCfg,updateAreaCfg,deleteAreaCfg);
|
||
}
|
||
}
|
||
addMessage(model,"save_success");
|
||
}
|
||
}
|