From add0cdefd56c50c5427945c895574f71202e7ed6 Mon Sep 17 00:00:00 2001 From: minhee <alsdldlfrl@gmail.com> Date: 수, 16 3월 2022 18:12:51 +0900 Subject: [PATCH] - api로 이슈 추가 시 사용자정의필드 타입으로 체크 => 정규식표현검사로 체크로 변경 --- src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java | 322 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 283 insertions(+), 39 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java index 32d6003..0b9734d 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java @@ -9,7 +9,6 @@ import kr.wisestone.owl.util.MapUtil; import kr.wisestone.owl.web.condition.CompanyFieldCondition; import kr.wisestone.owl.web.form.CompanyFieldForm; -import kr.wisestone.owl.web.form.IssueForm; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; import org.springframework.transaction.annotation.Transactional; @@ -33,6 +32,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.*; +import java.util.regex.Pattern; @Service public class CompanyFieldServiceImpl extends AbstractServiceImpl<CompanyField, Long, JpaRepository<CompanyField, Long>> implements CompanyFieldService { @@ -89,25 +89,161 @@ this.verifyUrl(companyFieldForm.getUrl(), null); } + if (companyFieldForm.getIpStarts() != null && companyFieldForm.getIpStarts().size() > 0 + && companyFieldForm.getIpEnds() != null && companyFieldForm.getIpEnds().size() > 0) { + + for (int i=0; i<companyFieldForm.getIpStarts().size(); i++) { + // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 + this.verifyIp(companyFieldForm.getIpStarts().get(i), companyFieldForm.getIpEnds().get(i), null); + } + + String startIps = companyFieldForm.getIpStarts().toString(); + // ��愿꾪샇 �젣嫄� + startIps = this.removeSquare(startIps); + companyFieldForm.setIpStart(startIps.trim()); + + String endIps = companyFieldForm.getIpEnds().toString(); + // ��愿꾪샇 �젣嫄� + endIps = this.removeSquare(endIps); + companyFieldForm.setIpEnd(endIps.trim()); + } + if (companyFieldForm.getTelList() != null && companyFieldForm.getTelList().size() > 0) { String tels = companyFieldForm.getTelList().toString(); - if (tels.contains("[")) { - tels = tels.substring(1, tels.indexOf("]")); - } + // ��愿꾪샇 �젣嫄� + tels = this.removeSquare(tels); companyFieldForm.setTel(tels.trim()); } if (companyFieldForm.getEmailList() != null && companyFieldForm.getEmailList().size() > 0) { String emails = companyFieldForm.getEmailList().toString(); - String email = ""; - if (emails.contains("[")) { - email = emails.substring(1, emails.indexOf("]")); - } - companyFieldForm.setEmail(email.trim()); + // ��愿꾪샇 �젣嫄� + emails = this.removeSquare(emails); + companyFieldForm.setEmail(emails.trim()); } CompanyField companyField = ConvertUtil.copyProperties(companyFieldForm, CompanyField.class); companyFieldRepository.saveAndFlush(companyField); return companyField; + } + + /** + * ��愿꾪샇([]) �젣嫄� �븿�닔 + * @param str String + * @return str + */ + private String removeSquare(String str) { + if (str.contains("[")) { + str = str.substring(1, str.indexOf("]")); + } + + return str; + } + + /** + * IP �쑀�슚�꽦 泥댄겕 + * @param ip String + * @param ip2 String + * @param id Long + */ + private void verifyIp(String ip, String ip2, Long id) { + if (!StringUtils.isEmpty(ip)) { + if (!Pattern.matches("^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\" + + ".(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", ip)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_NOT_INVALID)); + } + } + if (!StringUtils.isEmpty(ip2)) { + if (!Pattern.matches("^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\" + + ".(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", ip2)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_NOT_INVALID)); + } + } + + if (!StringUtils.isEmpty(ip) && !StringUtils.isEmpty(ip2)) { + long ipStart = ConvertUtil.ipToLong(ip); + long ipEnd = ConvertUtil.ipToLong(ip2); + if (ipEnd < ipStart) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_START_NOT_LARGER_THAN_END)); + } + + List<CompanyField> companyFields = Lists.newArrayList(); + CompanyFieldCondition condition = new CompanyFieldCondition(); + condition.setIpStart(String.valueOf(ipStart)); + condition.setIpEnd(String.valueOf(ipEnd)); + if (id != null) { + condition.setId(id); + companyFields = this.companyFieldRepository.findByIdNot(condition.getId()); + } else { + companyFields = this.companyFieldRepository.findAll(); + } + + // IP���뿭�� 以묐났 泥댄겕 + this.ipOverlapChk(companyFields, ipStart, ipEnd); + + /*if (companyFields != null && companyFields.size() > 0) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP)); + }*/ + } + } + + /** + * ip ���뿭�� 以묐났 泥댄겕 + * @param companyFields List<CompanyField> + */ + private void ipOverlapChk(List<CompanyField> companyFields, long ipStart, long ipEnd) { + String[] ipStartArr = null; + String[] ipEndArr = null; + List<String> startIpList = Lists.newArrayList(); + List<String> endIpList = Lists.newArrayList(); + String startIp = ""; + String endIp = ""; + List<Long> startIps = Lists.newArrayList(); + List<Long> endIps = Lists.newArrayList(); + + if (companyFields.size() > 0) { + for (CompanyField companyField : companyFields) { + if(companyField.getIpStart() != null && companyField.getIpEnd() != null) { + startIp = companyField.getIpStart(); + if (startIp.contains(" ")) { + startIp = startIp.replace(" ",""); + } + if (startIp.contains(",")) { + ipStartArr = startIp.split(","); + startIpList.addAll(Arrays.asList(ipStartArr)); + } else { + startIpList.add(startIp.trim()); + } + + endIp = companyField.getIpEnd(); + if (endIp.contains(" ")) { + endIp = endIp.replace(" ",""); + } + if (endIp.contains(",")) { + ipEndArr = endIp.split(","); + endIpList.addAll(Arrays.asList(ipEndArr)); + } else { + endIpList.add(endIp.trim()); + } + } + } + if (startIpList.size() > 0) { + for (String ipS : startIpList) { + long start = ConvertUtil.ipToLong(ipS); + startIps.add(start); + } + for (String ipE : endIpList) { + long end = ConvertUtil.ipToLong(ipE); + endIps.add(end); + } + } + + for (int i=0; i<startIps.size(); i++) { + if (startIps.get(i) >= ipStart && startIps.get(i) <= ipEnd || endIps.get(i) >= ipStart && endIps.get(i) <= ipEnd + || ipStart >= startIps.get(i) && ipStart <= endIps.get(i) || ipEnd >= startIps.get(i) && ipEnd <= endIps.get(i)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP)); + } + } + } } // url �쑀�슚�꽦 泥댄겕 @@ -117,14 +253,33 @@ this.messageAccessor.getMessage(MsgConstants.COMPANY_NOT_URL)); }*/ if (!StringUtils.isEmpty(url)) { - CompanyField companyField; - if(id == null){ - companyField = this.companyFieldRepository.findByUrl(url); + List<CompanyField> companyFieldList = Lists.newArrayList(); + CompanyFieldCondition condition = new CompanyFieldCondition(); + String[] urlArr = null; + List<String> urls = Lists.newArrayList(); + + if (url.contains(" ")) { + url = url.replace(" ",""); + } + if (url.contains(",")) { + urlArr = url.split(","); + urls.addAll(Arrays.asList(urlArr)); } else { - companyField = this.companyFieldRepository.findByUrlAndIdNot(url,id); + urls.add(url); } - if (companyField != null) { + if (urls.size() > 0) { + condition.setUrls(urls); + + if(id == null){ + companyFieldList = this.companyFieldMapper.findByUrls(condition); + } else { + condition.setId(id); + companyFieldList = this.companyFieldMapper.findByUrlsAndIdNot(condition); + } + } + + if (companyFieldList != null && companyFieldList.size() > 0) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.COMPANY_USED_URL)); } @@ -186,6 +341,9 @@ companyFieldVo.setRegionName(region.getUseValue()); } } + if (companyField.getStatusName() != null && !companyField.getStatusName().equals("")) { + companyFieldVo.setStatusName(companyField.getStatusName()); + } return companyFieldVo; } @@ -232,18 +390,35 @@ this.verifyUrl(companyFieldForm.getUrl(), companyFieldForm.getId()); } + if (companyFieldForm.getIpStarts() != null && companyFieldForm.getIpStarts().size() > 0 + && companyFieldForm.getIpEnds() != null && companyFieldForm.getIpEnds().size() > 0) { + + for (int i=0; i<companyFieldForm.getIpStarts().size(); i++) { + // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 + this.verifyIp(companyFieldForm.getIpStarts().get(i), companyFieldForm.getIpEnds().get(i), companyFieldForm.getId()); + } + + String startIps = companyFieldForm.getIpStarts().toString(); + // ��愿꾪샇 �젣嫄� + startIps = this.removeSquare(startIps); + companyFieldForm.setIpStart(startIps.trim()); + + String endIps = companyFieldForm.getIpEnds().toString(); + // ��愿꾪샇 �젣嫄� + endIps = this.removeSquare(endIps); + companyFieldForm.setIpEnd(endIps.trim()); + } + if (companyFieldForm.getTelList() != null && companyFieldForm.getTelList().size() > 0) { String tels = companyFieldForm.getTelList().toString(); - if (tels.contains("[")) { - tels = tels.substring(1, tels.indexOf("]")); - } + // ��愿꾪샇 �젣嫄� + tels = this.removeSquare(tels); companyFieldForm.setTel(tels.trim()); } if (companyFieldForm.getEmailList() != null && companyFieldForm.getEmailList().size() > 0) { String emails = companyFieldForm.getEmailList().toString(); - if (emails.contains("[")) { - emails = emails.substring(1, emails.indexOf("]")); - } + // ��愿꾪샇 �젣嫄� + emails = this.removeSquare(emails); companyFieldForm.setEmail(emails.trim()); } @@ -283,6 +458,8 @@ excelInfo.setFileName(this.messageAccessor.message("common.registerExcelCompanyField")); // �뿊��濡� �뾽泥� �벑濡앺븯湲� excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥대챸 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // url + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyIpStart"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ip �떆�옉 二쇱냼 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyIpEnd"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ip 醫낅즺 二쇱냼 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("isp.ispName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // isp紐� excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("Hosting.HostingName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿紐� excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뿰�씫泥� @@ -419,6 +596,8 @@ if (rowIndex > 1) { // �뾽泥대줈 �벑濡앺븯湲� �쐞�빐 CompanyFieldForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎. CompanyFieldForm newCompanyFieldForm = this.setCompanyFieldFormToExcelField(row, (rowIndex + 1), ispFieldMaps, hostingFieldMaps, companyTypeMaps, parentSectorMaps, childSectorMaps, regionMaps, statusMaps, headers); + // ip �쑀�슚�꽦 泥댄겕 + this.verifyIp(newCompanyFieldForm.getIpStart(), newCompanyFieldForm.getIpEnd(), null); companyFieldForms.add(newCompanyFieldForm); } @@ -523,63 +702,95 @@ break; case 2: + // ip�떆�옉二쇱냼 + this.setCompanyFormIpStart(cellStr, companyFieldForm, isNull); + break; + + case 3: + // ip醫낅즺二쇱냼 + this.setCompanyFormIpEnd(cellStr, companyFieldForm, isNull); + break; + + case 4: // isp紐� this.setCompanyFormIspName(cellStr, ispFieldMaps, companyFieldForm, rowIndex, isNull); break; - case 3: + case 5: // �샇�뒪�똿紐� this.setCompanyFormHostingName(cellStr, hostingFieldMaps, companyFieldForm, rowIndex, isNull); break; - case 4: + case 6: // �뿰�씫泥� telTypeCheck(cell, rowIndex); this.setCompanyFormTel(cellStr, companyFieldForm, isNull); break; - case 5: + case 7: // �씠硫붿씪 this.setCompanyFormEmail(cellStr, companyFieldForm, isNull); break; - case 6: + case 8: // �떞�떦�옄 this.setCompanyFormManager(cellStr, companyFieldForm, isNull); break; - case 7: + case 9: // 湲곗뾽援щ텇 this.setCompanyFormCompanyType(cellStr, companyTypeMaps, companyFieldForm, rowIndex, isNull); break; - case 8: + case 10: // �뾽醫�(��遺꾨쪟) this.setCompanyFormParentSector(cellStr, parentSectorMaps, companyFieldForm, rowIndex, isNull); break; - case 9: + case 11: // �뾽醫�(以묐텇瑜�) this.setCompanyFormChildSector(cellStr, childSectorMaps, companyFieldForm, rowIndex, isNull); break; - case 10: + case 12: // 吏��뿭 this.setCompanyFormRegion(cellStr, regionMaps, companyFieldForm, rowIndex, isNull); break; - case 11: + case 13: // �긽�깭 this.setCompanyFormStatus(cellStr, statusMaps, companyFieldForm, isNull); break; - case 12: + case 14: // 鍮꾧퀬 this.setCompanyFormMemo(cellStr, companyFieldForm, isNull); } } return companyFieldForm; + } + + private void setCompanyFormIpEnd(String ipEnd, CompanyFieldForm companyFieldForm, boolean isNull) { + if (!isNull) { + if (ipEnd.contains(" ")) { + ipEnd = ipEnd.replace(" ", ""); + } + this.verifyIp(ipEnd, null, null); //ip �쑀�슚�꽦 寃��궗 + + companyFieldForm.setIpEnd(ipEnd); + } + } + + private void setCompanyFormIpStart(String ipStart, CompanyFieldForm companyFieldForm, boolean isNull) { + if (!isNull) { + if (ipStart.contains(" ")) { + ipStart = ipStart.replace(" ", ""); + } + this.verifyIp(ipStart, null, null); //ip �쑀�슚�꽦 寃��궗 + + companyFieldForm.setIpStart(ipStart); + } } private void setCompanyFormMemo(String cellStr, CompanyFieldForm companyFieldForm, boolean isNull) { @@ -661,23 +872,55 @@ private void setCompanyFormEmail(String email, CompanyFieldForm companyFieldForm, boolean isNull) { if (!isNull) { - if (email.contains(" ")) { - email = email.replace(" ", ""); - } + // �씠硫붿씪 �쑀�슚�꽦 寃��궗 + email = this.verifyEmail(email); companyFieldForm.setEmail(email); } } + /** + * �씠硫붿씪 �쑀�슚�꽦 寃��궗 + * @param email String + * @return String + */ + private String verifyEmail(String email) { + /*if (!Pattern.matches("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$", email)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.EMAIL_NOT_INVALID)); + }*/ + + if (email.contains(" ")) { + email = email.replace(" ", ""); + } + + return email; + } + private void setCompanyFormTel(String tel, CompanyFieldForm companyFieldForm, boolean isNull) { if (!isNull) { - if (tel.contains("-")) { - tel = tel.replace("-", ""); - } - if (tel.contains(" ")) { - tel = tel.replace(" ", ""); - } + // �뿰�씫泥� �쑀�슚�꽦 寃��궗 + tel = this.verifyTel(tel); companyFieldForm.setTel(tel); } + } + + /** + * �뿰�씫泥� �쑀�슚�꽦 寃��궗 + * @param tel String + * @return String + */ + private String verifyTel(String tel) { + if (!Pattern.matches("^[0-9-]{2,20}$", tel)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.TEL_NOT_INVALID)); + } + + if (tel.contains("-")) { + tel = tel.replace("-", ""); + } + if (tel.contains(" ")) { + tel = tel.replace(" ", ""); + } + + return tel; } private void setCompanyFormHostingName(String cellStr, Map<String, HostingField> hostingFieldMaps, CompanyFieldForm companyFieldForm, int rowIndex, boolean isNull) { @@ -788,6 +1031,7 @@ excelInfo.addAttrInfos(new ExportExcelAttrVo("tel", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("email", this.messageAccessor.message("companyField.companyEmail"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("url", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("ipRange", this.messageAccessor.message("companyField.companyIp"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("companyTypeName", this.messageAccessor.message("companyField.companyTypeName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("parentSectorName", this.messageAccessor.message("companyField.parentSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("childSectorName", this.messageAccessor.message("companyField.childSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); -- Gitblit v1.8.0