package edu.sjtu.infosec.ismp.manager.BSAM.web.actions; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo; import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog; import edu.sjtu.infosec.ismp.manager.BSAM.model.Machine; import edu.sjtu.infosec.ismp.manager.BSAM.model.MachineCabinet; import edu.sjtu.infosec.ismp.manager.BSAM.model.MachineRoom; import edu.sjtu.infosec.ismp.manager.BSAM.service.MachineCabinetService; import edu.sjtu.infosec.ismp.manager.BSAM.service.MachineRoomService; import edu.sjtu.infosec.ismp.manager.BSAM.service.MachineService; import edu.sjtu.infosec.ismp.manager.BSAM.web.form.MachineForm; import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService; import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder; import edu.sjtu.infosec.ismp.manager.SYSM.user.self.service.DomainService; import edu.sjtu.infosec.ismp.security.Domain; import edu.sjtu.infosec.ismp.security.OperatorDetails; import edu.sjtu.infosec.ismp.security.Role; public class MachineAction extends DispatchAction { private static Logger logger = Logger.getLogger(MachineAction.class); /** * 注入 service 接口 */ private MachineService machineService; private MachineCabinetService machineCabinetService; private MachineRoomService machineRoomService; private DomainService domainService; private SystemLogService systemLogService; public void setMachineService(MachineService machineService) { this.machineService = machineService; } public void setMachineCabinetService(MachineCabinetService machineCabinetService) { this.machineCabinetService = machineCabinetService; } public void setMachineRoomService(MachineRoomService machineRoomService) { this.machineRoomService = machineRoomService; } public void setDomainService(DomainService domainService) { this.domainService = domainService; } public void setSystemLogService(SystemLogService systemLogService) { this.systemLogService = systemLogService; } ///获取主机列表 public ActionForward getMachineList (ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { int currPage = 1; Double totalPage = 0d; int totalNum = 0; int startResult = 0; int maxResult = 5; try { String isAll = (request.getParameter("isAll") == null) ? "0" : request.getParameter("isAll"); OperatorDetails user = SecurityUserHolder.getCurrentUser(); List<Domain> userDomainList = new ArrayList<Domain>(); if(null != user){ userDomainList = user.getDomainList(); }else{ userDomainList = null; } // 分页定义的相关的基本信息 String cp = (request.getParameter("currPage") == null) ? "1" : request.getParameter("currPage"); if (null != cp && !cp.equals("")) { currPage = Integer.parseInt(cp); } startResult = (currPage - 1) * maxResult; if (startResult < 0) { startResult = 0; } //数据相关的基本信息 List<Machine> machineList = new ArrayList<Machine>(); //分页定义的相关的基本信息 if(isAll.equals("1")){ totalNum = machineService.getCount(); }else{ totalNum = machineService.getCountByDomain(userDomainList); } totalPage = Math.ceil((double) totalNum / maxResult); if (totalPage > 0 && currPage <= 0) { currPage = 1; } ///当前页没有数据之后返回到上一页(删除当前页全部记录的时候) if (currPage > totalPage) { currPage = totalPage.intValue(); startResult = (currPage - 1) * maxResult; if (startResult < 0) { startResult = 0; } } if(isAll.equals("1")){ request.setAttribute("isAll", isAll); machineList = machineService.getMachineList(startResult, maxResult); }else{ machineList = machineService.getMachineListByDomain(userDomainList, startResult, maxResult); } request.setAttribute("machineList", machineList); } catch (Exception e) { logger.debug("主机列表出错啦!"); e.printStackTrace(); } request.setAttribute("currPage", currPage); request.setAttribute("totalPage", totalPage.intValue()); request.setAttribute("situationMenu", "config"); return mapping.findForward("machineList"); } //删除主机 public ActionForward machineDelete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("isAll", request.getParameter("isAll")); request.setAttribute("currPage", request.getParameter("currPage")); String id = request.getParameter("id"); Machine machine = machineService.getMachineById(Integer.parseInt(id)); if(null != machine){///用此种方法解决重复提交问题 machineService.deleteMachineById(Integer.parseInt(id)); /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_BSAM); systemLog.setOperationDesc("态势感知模块:删除主机。主机ID:" + id); systemLog.setControl("成功"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ } return getMachineList(mapping, form, request, response); } ///录入 public ActionForward machineInput(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { saveToken(request);///创建一个新的令牌值,将其保存在当前的会话(session)范围内 String isAll = request.getParameter("isAll"); String currPage = request.getParameter("currPage"); String id = request.getParameter("id"); if(null != id){ Machine machine = machineService.getMachineById(new Integer(id)); request.setAttribute("machine", machine); } List<Domain> userDomainList = SecurityUserHolder.getCurrentUser().getDomainList(); List machineCabinetList = machineCabinetService.getMachineCabinetListByDomain(userDomainList); List machineRoomList = machineRoomService.getMachineRoomListByDomain(userDomainList); request.setAttribute("machineCabinetList", machineCabinetList);///机柜列表 request.setAttribute("machineRoomList", machineRoomList);///机房列表 request.setAttribute("userDomainList", userDomainList);///用户域列表 request.setAttribute("isAll", isAll); request.setAttribute("currPage", currPage); request.setAttribute("situationMenu", "config"); return mapping.findForward("machineInput"); } ///更新或者添加主机 public ActionForward machineSaveOrUpdate(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { request.setAttribute("isAll", request.getParameter("isAll")); request.setAttribute("currPage", request.getParameter("currPage")); if(isTokenValid(request, true)){ Machine machine = new Machine(); BeanUtils.copyProperties(machine, (MachineForm) form); MachineForm machineForm = (MachineForm) form; if(null != machineForm.getParentType() && !"".equals(machineForm.getParentType())){ if("JiGui".equals(machineForm.getParentType())){///如果上级物理位置是机柜 if(null != machineForm.getMachineCabinetId() && !"".equals(machineForm.getMachineCabinetId())){ MachineCabinet machineCabinet = machineCabinetService.getMachineCabinetById(machineForm.getMachineCabinetId()); machine.setMachineCabinet(machineCabinet); } }else if("JiFang".equals(machineForm.getParentType())){///如果上级物理位置是机房 if(null != machineForm.getMachineRoomId() && !"".equals(machineForm.getMachineRoomId())){ MachineRoom machineRoom = machineRoomService.getMachineRoomById(machineForm.getMachineRoomId()); machine.setMachineRoom(machineRoom); } }else if("AnQuanYu".equals(machineForm.getParentType())){///如果上级物理位置是安全域 if(null != machineForm.getSecurityAreaId() && !"".equals(machineForm.getSecurityAreaId())){ Domain domain = domainService.findById(machineForm.getSecurityAreaId()); machine.setDomain(domain); } } } String flag = "update"; if(null == machine.getId()){ flag = "add"; }else if(0 == machine.getId()){ flag = "add"; machine.setId(null); } machineService.saveOrUpdate(machine); /** 添加日志开始 **/ SystemLog systemLog = new SystemLog(); systemLog.setUsername(SecurityUserHolder.getCurrentUser().getUsername()); List<Role> roleList = SecurityUserHolder.getCurrentUser().getRoleList(); StringBuffer roles = new StringBuffer(""); for(Role role:roleList){ roles.append(role.getName()); roles.append(","); } systemLog.setRoleName(roles.substring(0,roles.length()-1)); systemLog.setTime(new Timestamp(new Date().getTime())); systemLog.setModuleName(SystemModelInfo.MOD_BSAM); if("add".equals(flag)){ systemLog.setOperationDesc("态势感知模块:新建主机。主机名称:" + machine.getMachineName()); }else { systemLog.setOperationDesc("态势感知模块:修改主机。主机ID:" + machine.getId()); } systemLog.setControl("成功"); systemLogService.saveSystemLog(systemLog); /** 添加日志结束 **/ }else{ saveToken(request); } return getMachineList(mapping, form, request, response); } ///获取权重前20名的主机 public ActionForward getTopMachineListByWeight (ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { try { String isAll = (request.getParameter("isAll") == null) ? "0" : request.getParameter("isAll"); OperatorDetails user = SecurityUserHolder.getCurrentUser(); List<Domain> userDomainList = new ArrayList<Domain>(); if(null != user){ userDomainList = user.getDomainList(); }else{ userDomainList = null; } //数据相关的基本信息 List<Machine> topMachineListByWeight = new ArrayList<Machine>(); if(isAll.equals("1")){ request.setAttribute("isAll", isAll); topMachineListByWeight = machineService.getTopMachineListByWeight(20); }else{ topMachineListByWeight = machineService.getTopMachineListByWeightByDomain(userDomainList, 20); } request.setAttribute("topMachineListByWeight", topMachineListByWeight); } catch (Exception e) { logger.debug("主机权重前20列表出错啦!"); e.printStackTrace(); } request.setAttribute("situationMenu", "topWeight"); return mapping.findForward("topMachineListByWeight"); } }