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?"
":""); } 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?"
":""); } 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 requestInfos=requestInfoService.getAllRequestInfo(); model.addAttribute("requestInfos", requestInfos); List fls=serviceDictInfoService.findAllFlDict(); model.addAttribute("fls", fls); List xzs=serviceDictInfoService.findAllXzDict(); model.addAttribute("xzs", xzs); List lables=serviceDictInfoService.findAllLableDict(); model.addAttribute("lables", lables); } protected void initFormCondition(Model model){ List requestInfos=requestInfoService.getValidRequestInfo(); model.addAttribute("requestInfos", requestInfos); List fls=serviceDictInfoService.findFlDict(); model.addAttribute("fls", fls); List xzs=serviceDictInfoService.findXzDict(); model.addAttribute("xzs", xzs); List lables=serviceDictInfoService.findLableDict(); model.addAttribute("lables", lables); List itTypeList=new ArrayList(); itTypeList.add(Constants.ITEM_TYPE_AREA); List areas = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null); model.addAttribute("areas", areas); itTypeList.clear(); itTypeList.add(Constants.ITEM_TYPE_ISP); List 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 requestInfos=requestInfoService.getValidRequestInfo(); model.addAttribute("requestInfos", requestInfos); List fls=serviceDictInfoService.findFlDict(); model.addAttribute("fls", fls); List xzs=serviceDictInfoService.findXzDict(); model.addAttribute("xzs", xzs); List lables=serviceDictInfoService.findLableDict(); model.addAttribute("lables", lables); List itTypeList=new ArrayList(); itTypeList.add(Constants.ITEM_TYPE_AREA); List areas = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null); model.addAttribute("areas", areas); itTypeList.clear(); itTypeList.add(Constants.ITEM_TYPE_ISP); List isps = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null); model.addAttribute("isps", isps); //初始化一个默认的地域ip给界面 AreaIpCfg areaIpCfg=new AreaIpCfg(); areaIpCfg.initDefaultValue(); model.addAttribute("_areaCfg", areaIpCfg); List regionList = DictUtils.getFunctionRegionDictList(cfg.getFunctionId()); model.addAttribute("regionList", regionList); List serviceList = DictUtils.getFunctionServiceDictList(cfg.getFunctionId()); model.addAttribute("serviceList", serviceList); } protected void initUpdateFormCondition(Model model,BaseCfg cfg){ //查询配置对应的地域ip List 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 areaIspList=new ArrayList(); 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 requestInfos=requestInfoService.getAllRequestInfo(); model.addAttribute("requestInfos", requestInfos); List fls=serviceDictInfoService.findAllFlDict(); model.addAttribute("fls", fls); List xzs=serviceDictInfoService.findAllXzDict(); model.addAttribute("xzs", xzs); List lables=serviceDictInfoService.findAllLableDict(); model.addAttribute("lables", lables); List itTypeList=new ArrayList(); itTypeList.add(Constants.ITEM_TYPE_AREA); List areas = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null); model.addAttribute("areas", areas); itTypeList.clear(); itTypeList.add(Constants.ITEM_TYPE_ISP); List isps = sysDictInfoService.findAllSysDictInfo(new SysDictInfo(),itTypeList,null); model.addAttribute("isps", isps); List regionList = DictUtils.getFunctionRegionDictList(cfg.getFunctionId()); model.addAttribute("regionList", regionList); List 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 areaCfg=cfg.getAreaCfg(); List 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;i0){ 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 updateAreaCfg=new ArrayList<>(); List deleteAreaCfg=new ArrayList<>(); List 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"); } }