package project.ddos.internal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.security.providers.encoding.PasswordEncoder; import kernel.exception.BusinessException; import kernel.web.ApplicationUtil; import kernel.web.Page; import project.Constants; import project.ddos.AdminIpMenuService; import project.ddos.CheckIpRequestCountService; import project.ddos.IpMenuService; import project.ddos.model.IpMenu; import project.log.Log; import project.log.LogService; import security.SecUser; import security.internal.SecUserService; @SuppressWarnings({"rawtypes","unchecked"}) public class AdminIpMenuServiceImpl implements AdminIpMenuService { private LogService logService; private IpMenuService ipMenuService; private SecUserService secUserService; private PasswordEncoder passwordEncoder; private CheckIpRequestCountService checkIpRequestCountService; @Override public Page pagedQuery(int pageNo, int pageSize, String ip_para, String type_para) { if (pageNo <= 0) pageNo = 1; Page page = new Page(pageNo, pageSize, Integer.MAX_VALUE); StringBuilder sqlBuilder=new StringBuilder("SELECT UUID id,TYPE type,IP ip,TYPE type,LAST_OPERA_TIME last_opera_time,CREATE_TIME create_time FROM T_IP_MENU WHERE DELETE_STATUS=0 "); ArrayList params=new ArrayList(); if (null!=ip_para && !(ip_para=ip_para.trim()).isEmpty()) { sqlBuilder.append("AND IP LIKE ? "); params.add("%"+ip_para+"%"); } if (null!=type_para && !(type_para=type_para.trim()).isEmpty()) { sqlBuilder.append("AND TYPE=? "); params.add(type_para); } sqlBuilder.append("LIMIT ?,?"); params.add(page.getFirstElementNumber()); params.add(pageSize); List list=ApplicationUtil.executeDQL(sqlBuilder.toString(),params.toArray(new Object[params.size()]),Map.class); page.setElements(list); handleDatas(list); return page; } public void handleDatas(List datas) { List ips = new ArrayList(); for (Map data : datas) { ips.add(data.get("ip").toString()); } Map ipCountByIps = checkIpRequestCountService.ipCountByIps(ips); for (Map data : datas) { data.put("count", ipCountByIps.get(data.get("ip").toString())); } } public void save(IpMenu entity, String operatorUsername, String loginSafeword, String ip) { IpMenu ipMenu = ipMenuService.cacheByIp(entity.getIp()); if (ipMenu != null && ipMenu.getDelete_status() == 0) throw new BusinessException("ip名单已经存在"); checkLoginSafeword(operatorUsername, loginSafeword); SecUser user = this.secUserService.findUserByLoginName(operatorUsername); saveLog(user, operatorUsername,"ip:" + ip + "管理员新增IP名单,ip名单为[" + entity.getIp() + "],类型为[" + entity.getType() + "]"); if (ipMenu != null) { ipMenu.setDelete_status(0); ipMenu.setType(entity.getType()); ipMenu.setLast_opera_time(entity.getLast_opera_time()); this.ipMenuService.update(ipMenu); } else { this.ipMenuService.save(entity); } } public void update(IpMenu entity, String operatorUsername, String loginSafeword, String ip) { IpMenu ipMenu = ipMenuService.cacheByIp(entity.getIp()); if (ipMenu == null || ipMenu.getDelete_status() == -1) throw new BusinessException("ip名单不存在"); checkLoginSafeword(operatorUsername, loginSafeword); SecUser user = this.secUserService.findUserByLoginName(operatorUsername); saveLog(user, operatorUsername, "ip:" + ip + "管理员更新IP名单,ip名单为[" + entity.getIp() + "],原类型为[" + ipMenu.getType()+ "],新类型为[" + entity.getType() + "]"); ipMenu.setDelete_status(entity.getDelete_status()); ipMenu.setType(entity.getType()); ipMenu.setLast_opera_time(entity.getLast_opera_time()); this.ipMenuService.update(ipMenu); } public void delete(String menu_ip, String operatorUsername, String loginSafeword, String ip) { IpMenu ipMenu = ipMenuService.cacheByIp(menu_ip); if (ipMenu == null || ipMenu.getDelete_status() == -1) throw new BusinessException("ip名单不存在"); checkLoginSafeword(operatorUsername, loginSafeword); SecUser user = this.secUserService.findUserByLoginName(operatorUsername); saveLog(user, operatorUsername, "ip:" + ip + "管理员删除IP名单,ip名单为[" + menu_ip + "],类型为[" + ipMenu.getType() + "]"); ipMenu.setDelete_status(-1); ipMenu.setLast_opera_time(new Date()); this.ipMenuService.update(ipMenu); checkIpRequestCountService.cacheRemoveIp(ipMenu.getIp()); } /** * 验证登录人资金密码 * @param operatorUsername * @param loginSafeword */ private void checkLoginSafeword(String operatorUsername, String loginSafeword) { SecUser sec = this.secUserService.findUserByLoginName(operatorUsername); String sysSafeword = sec.getSafeword(); String safeword_md5 = passwordEncoder.encodePassword(loginSafeword, operatorUsername); if (!safeword_md5.equals(sysSafeword)) throw new BusinessException("登录人资金密码错误"); } public void saveLog(SecUser secUser, String operator, String context) { Log log = new Log(); log.setCategory(Constants.LOG_CATEGORY_OPERATION); log.setOperator(operator); log.setUsername(secUser.getUsername()); log.setPartyId(secUser.getPartyId()); log.setLog(context); log.setCreateTime(new Date()); logService.saveSync(log); } public void setSecUserService(SecUserService secUserService) { this.secUserService = secUserService; } public void setLogService(LogService logService) { this.logService = logService; } public void setPasswordEncoder(PasswordEncoder passwordEncoder) { this.passwordEncoder = passwordEncoder; } public void setIpMenuService(IpMenuService ipMenuService) { this.ipMenuService = ipMenuService; } public void setCheckIpRequestCountService(CheckIpRequestCountService checkIpRequestCountService) { this.checkIpRequestCountService = checkIpRequestCountService; } }