package com.nis.web.controller; import java.beans.PropertyEditorSupport; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.servlet.http.HttpServletRequest; 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.context.i18n.LocaleContextHolder; 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.beust.jcommander.internal.Lists; import com.nis.domain.FunctionRegionDict; import com.nis.domain.FunctionServiceDict; 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.ComplexStringCfgTemplate; import com.nis.domain.configuration.IpCfgTemplate; import com.nis.domain.configuration.RequestInfo; import com.nis.domain.configuration.StringCfgTemplate; import com.nis.domain.log.BaseLogEntity; import com.nis.util.Configurations; //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.util.excel.ExportExcel; 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.PolicyGroupInfoService; 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.AvContentCfgService; import com.nis.web.service.configuration.BgpCfgService; import com.nis.web.service.configuration.ComplexStringCfgService; import com.nis.web.service.configuration.ControlPolicyService; import com.nis.web.service.configuration.DdosCfgService; import com.nis.web.service.configuration.DnsIpCfgService; import com.nis.web.service.configuration.DnsResStrategyService; import com.nis.web.service.configuration.FileTransferCfgService; import com.nis.web.service.configuration.HttpRedirectCfgService; import com.nis.web.service.configuration.IpCfgService; import com.nis.web.service.configuration.IpMultiplexPoolCfgService; import com.nis.web.service.configuration.MailCfgService; import com.nis.web.service.configuration.NumCfgService; import com.nis.web.service.configuration.RequestInfoService; import com.nis.web.service.configuration.DomainService; import com.nis.web.service.configuration.WebsiteCfgService; import com.nis.web.service.configuration.XmppCfgService; 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 MailCfgService mailCfgService; @Autowired protected FileTransferCfgService fileTransferCfgService; @Autowired protected AppCfgService appCfgService; @Autowired protected ControlPolicyService controlPolicyService; @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 DomainService domainService; @Autowired protected NumCfgService numCfgService; @Autowired protected ComplexStringCfgService complexStringCfgService; @Autowired protected SpecificServiceCfgService specificServiceCfgService; @Autowired protected SpecificServiceHostCfgService specificServiceHostCfgService; @Autowired protected AvCfgService avCfgService; @Autowired protected AvContentCfgService avContentCfgService; @Autowired protected WebsiteCfgService websiteCfgService; @Autowired protected BgpCfgService bgpCfgService; @Autowired protected XmppCfgService xmppCfgService; @Autowired protected PolicyGroupInfoService policyGroupInfoService; @Autowired protected DnsResStrategyService dnsResStrategyService; @Autowired protected HttpRedirectCfgService httpRedirectCfgService; @Autowired protected DdosCfgService ddosCfgService; @Autowired protected IpMultiplexPoolCfgService ipMultiplexPoolCfgService; /** * 管理基础路径 */ @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 initPageCondition(Model model,BaseCfg cfg){ 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 regionList = DictUtils.getFunctionRegionDictList(cfg.getFunctionId()); model.addAttribute("regionList", regionList); List serviceList = DictUtils.getFunctionServiceDictList(cfg.getFunctionId()); model.addAttribute("serviceList", serviceList); } 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); //ip配置设置protocolId if(cfg instanceof BaseIpCfg){ for(FunctionServiceDict dict:serviceList){ if(cfg.getFunctionId().intValue()==dict.getFunctionId().intValue()){ ((BaseIpCfg) cfg).setProtocolId(dict.getProtocolId().intValue()); break; } } } } protected void initUpdateFormCondition(Model model,BaseCfg cfg){ 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 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(); getAreaIsps(areaEffectiveIds,areaIspList,isps,areas); model.addAttribute("_areaIsps", areaIspList); 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 regionList = DictUtils.getFunctionRegionDictList(cfg.getFunctionId()); model.addAttribute("regionList", regionList); List serviceList = DictUtils.getFunctionServiceDictList(cfg.getFunctionId()); model.addAttribute("serviceList", serviceList); } public List getAreaIsps(String areaEffectiveIds,List areaIspList,List isps,List areas) { Map areaMap=new HashMap(); for (SysDictInfo areaDict : areas) { areaMap.put(areaDict.getItemCode(), areaDict); } Map ispMap=new HashMap(); for (SysDictInfo ispDict : isps) { ispMap.put(ispDict.getItemCode(), ispDict); } // : 存在冒号,则冒号前为area后为isp;不存在冒号,判断id是否为isp,否则为area 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]); area.setAreaName(areaMap.get(areaIsp.split(":")[0]).getItemValue()); area.setIspName(ispMap.get(areaIsp.split(":")[1]).getItemValue()); }else{ if(ispMap.keySet().contains(areaIsp)){ area.setIsp(areaIsp); area.setIspName(ispMap.get(areaIsp).getItemValue()); area.setAreaName(""); }else{ area.setArea(areaIsp); area.setIspName(""); area.setAreaName(areaMap.get(areaIsp).getItemValue()); } } areaIspList.add(area); } } return areaIspList; } /** * 获取国际化配置文件 * @return */ public Properties getMsgProp(){ Properties msgProp = new Properties(); try { String language = LocaleContextHolder.getLocale().getLanguage(); if(language.equals("zh_cn")||language.equals("zh")){ msgProp.load(Configurations.class.getResourceAsStream("/messages/message_zh_CN.properties")); }else if(language.equals("ru")){ msgProp.load(Configurations.class.getResourceAsStream("/messages/message_ru.properties")); }else{ msgProp.load(Configurations.class.getResourceAsStream("/messages/message_en.properties")); } } catch (Exception e) { msgProp = null; logger.error("未知i18n消息配置文件,请确定文件是否存在!",e); } return msgProp; } public void importCfgTemplate(HttpServletRequest request,HttpServletResponse response, RedirectAttributes redirectAttributes,Integer functionId,Integer cfgRegionCode){ Properties msgProp = getMsgProp(); try { List dictList = DictUtils.getFunctionRegionDictList(functionId); for(FunctionRegionDict dict:dictList){ if(dict.getConfigRegionCode()==cfgRegionCode){ String fileName = dict.getConfigRegionValue()+".xlsx"; if(dict.getRegionType()==1){ List list = Lists.newArrayList(); list.add(new IpCfgTemplate()); new ExportExcel(msgProp,null, IpCfgTemplate.class, 2).setDataList(msgProp,list,null). write(request,response, fileName).dispose(); }else if(dict.getRegionType()==2){ List list = Lists.newArrayList(); list.add(new StringCfgTemplate()); new ExportExcel(msgProp,null, StringCfgTemplate.class, 2).setDataList(msgProp,list,null). write(request,response, fileName).dispose(); }else if(dict.getRegionType()==3){ List list = Lists.newArrayList(); list.add(new ComplexStringCfgTemplate()); new ExportExcel(msgProp,null, ComplexStringCfgTemplate.class, 2).setDataList(msgProp,list,null). write(request,response, fileName).dispose(); } } } } catch (Exception e) { msgProp = null; e.printStackTrace(); } } public void setLogAction(BaseLogEntity log) { List serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId()); for (FunctionServiceDict dict : serviceList) { if (dict.getServiceId().intValue() == log.getServiceType().intValue()) { log.setAction(dict.getAction()); } } } //初始化查询值判断 public void initLogSearchValue(BaseLogEntity entry,Map params){ if (StringUtils.isNotBlank(entry.getSearchFoundStartTime())&&StringUtils.isNotBlank(entry.getSearchFoundEndTime())) { params.put("searchFoundStartTime", entry.getSearchFoundStartTime()); params.put("searchFoundEndTime", entry.getSearchFoundEndTime()); }else{ //设置默认查询当前时间及前五分钟 String endTime = DateUtils.getDateTime(); Date dateStart = new Date(new Date().getTime() - Constants.LOG_TIME_RANGE); String startTime = DateUtils.formatDateTime(dateStart); params.put("searchFoundStartTime", startTime); params.put("searchFoundEndTime",endTime ); entry.setSearchFoundStartTime(startTime); entry.setSearchFoundEndTime(endTime); } if (StringUtils.isNotBlank(entry.getProtocol())) { params.put("searchProtocol", entry.getProtocol()); } if (entry.getServiceType()!=null) { params.put("searchServiceType", entry.getServiceType()); } if (StringUtils.isNotBlank(entry.getServerIp())) { params.put("searchServerIp", entry.getServerIp()); } if (StringUtils.isNotBlank(entry.getClientIp())) { params.put("searchClientIp", entry.getClientIp()); } if (StringUtils.isNotBlank(entry.getCljIp())) { params.put("searchCljIp", entry.getCljIp()); } if (entry.getDirection()!=null) { params.put("searchDirection", entry.getDirection()); } if (entry.getEntranceId()!=null) { params.put("searchEntranceId", entry.getEntranceId()); } if (entry.getCfgId()!=null) { params.put("searchCfgId", entry.getCfgId()); } } }