package itn.let.uat.uia.web; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.icert.comm.secu.IcertSecuManager; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.LoginVO; import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.EgovFileMngUtil; import itn.com.cmm.service.FileVO; import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.fax.user.service.FaxGroupDataVO; import itn.let.fax.user.service.FaxService; import itn.let.kakao.user.sent.service.KakaoSentService; import itn.let.kakao.user.sent.service.KakaoSentVO; import itn.let.mjo.cert.service.CertService; import itn.let.mjo.cert.service.CertVO; import itn.let.mjo.event.service.MjonEventService; import itn.let.mjo.event.service.MjonEventVO; import itn.let.mjo.kisa.service.KisaService; import itn.let.mjo.kisa.service.KisaVO; import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.msg.service.MjPhoneMemberVO; import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentVO; import itn.let.mjo.pay.service.KmcVO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayVO; import itn.let.sym.grd.service.MberGrdService; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; import itn.let.uat.uia.service.AuthCertVO; import itn.let.uat.uia.service.EgovLoginService; import itn.let.uss.umt.service.EgovMberManageService; import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.MberManageVO; import itn.let.uss.umt.service.UserManageVO; import itn.let.utl.user.service.MjonNoticeSendUtil; /** * 일반 로그인, 인증서 로그인을 처리하는 컨트롤러 클래스 * * @author 공통서비스 개발팀 박지욱 * @since 2009.03.06 * @version 1.0 * @see * *
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자          수정내용
 *  -------    --------    ---------------------------
 *  2009.03.06  박지욱          최초 생성
 *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 *      
*/ @Controller public class EgovMypageController { static String RSA_WEB_KEY = "_RSA_WEB_Key_"; // 개인키 session key static String RSA_INSTANCE = "RSA"; // rsa transformation @Resource(name = "KakaoSentService") private KakaoSentService kakaoSentService; @Resource(name = "faxService") private FaxService faxService; /** EgovLoginService */ @Resource(name = "loginService") private EgovLoginService loginService; /** userManageService */ @Resource(name = "userManageService") private EgovUserManageService userManageService; /** mberManageService */ @Resource(name = "mberManageService") private EgovMberManageService mberManageService; @Resource(name = "mjonMsgService") private MjonMsgService mjonMsgService; @Resource(name="egovCertEtcIdGnrService") private EgovIdGnrService egovCertEtcIdGnrService; @Resource(name = "certService") private CertService certService; @Resource(name="EgovFileMngUtil") private EgovFileMngUtil fileUtil; @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; @Resource(name = "EgovFileMngService") private EgovFileMngService fileService; @Resource(name = "KisaService") private KisaService kisaService; /** 알림전송 Util */ @Resource(name = "mjonNoticeSendUtil") private MjonNoticeSendUtil mjonNoticeSendUtil; @Resource(name = "MjonMsgDataService") private MjonMsgDataService mjonMsgDataService; @Resource(name = "MjonMsgSentService") private MjonMsgSentService mjonMsgSentService; @Resource(name = "mjonPayService") private MjonPayService mjonPayService; @Resource(name = "MjonEventService") private MjonEventService mjonEventService; @Resource(name="MjonCommon") private MjonCommon mjonCommon; /** 사이트 설정 */ @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; /** 등급제 관리 서비스 */ @Resource(name = "mberGrdService") MberGrdService mberGrdService; /** * 마이페이지 비밀번호 변경 탭 */ @RequestMapping(value="/web/user/mberInfoIndex.do") public String mberInfoIndex( ModelMap model , HttpServletRequest request , RedirectAttributes redirectAttributes) throws Exception { //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); if(userId == "") { //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); return "redirect:/web/user/login/login.do"; } {//문자 전송 개인 단가 불러오기 //0.이벤트 진행중이 회원 정보 불러오기. //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. MjonEventVO mjonEventVO = new MjonEventVO(); mjonEventVO.setMberId(userId); //mjonEventVO.setEventStatus("Y"); MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); long eventDiffDate = 0; float eventRemainCash = 0; boolean compareEndDate = false; if(eventMberInfo != null) { String eventEndDate = eventMberInfo.getEventEndDate(); /** * MJUtil.getCompareDate() * 현재 날짜와 파라미터 전달 날짜를 비교 * 전달날짜를 지난경우 False를 리턴함. * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. * * */ if(eventEndDate != null) { compareEndDate = MJUtil.getCompareDate(eventEndDate); eventRemainCash = (float) eventMberInfo.getEventRemainCash(); //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 if(!compareEndDate || eventRemainCash < 7.5) { if(!eventMberInfo.getEventStatus().equals("E")) { //이벤트 상태값을 종료로 변경한다. mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); mjonEventVO.setEventStatus("E"); mjonEventVO.setEventRemainCash(eventRemainCash); mjonEventService.updateEventEndStatus(mjonEventVO); eventMberInfo.setEventStatus("E"); } }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); } } } //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); model.addAttribute("compareEndDate", compareEndDate); model.addAttribute("eventMberInfo", eventMberInfo); //1.시스템 기본 단가 정보 불러오기 JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); // 등급제 단가 추출 => 시스템 단가에 적용 sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId); //2.사용자 개인 단가 정보 불러오기 MberManageVO mberManageVO = new MberManageVO(); if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); } Float shortPrice = (float) mberManageVO.getShortPrice(); Float longPrice = (float) mberManageVO.getLongPrice(); Float picturePrice = (float) mberManageVO.getPicturePrice(); Float picture2Price = (float) mberManageVO.getPicture2Price(); Float picture3Price = (float) mberManageVO.getPicture3Price(); Float kakaoAtPrice = (float) mberManageVO.getKakaoAtPrice(); Float faxPrice = (float) mberManageVO.getFaxPrice(); int userMoney = (int) mberManageVO.getUserMoney(); String userPoint = mberManageVO.getUserPoint(); if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) { shortPrice = (float) sysJoinSetVO.getShortPrice(); longPrice = (float) sysJoinSetVO.getLongPrice(); picturePrice = (float) sysJoinSetVO.getPicturePrice(); picture2Price = (float) sysJoinSetVO.getPicture2Price(); picture3Price = (float) sysJoinSetVO.getPicture3Price(); } if(kakaoAtPrice < 1) { kakaoAtPrice = (float) sysJoinSetVO.getKakaoAtPrice(); } if(faxPrice < 1) { faxPrice = (float) sysJoinSetVO.getFaxPrice(); } model.addAttribute("shortPrice", shortPrice); model.addAttribute("longPrice", longPrice); model.addAttribute("picturePrice", picturePrice); model.addAttribute("picture2Price", picture2Price); model.addAttribute("picture3Price", picture3Price); model.addAttribute("kakaoAtPrice", kakaoAtPrice); model.addAttribute("faxPrice", faxPrice); model.addAttribute("userMoney", userMoney); model.addAttribute("userPoint", userPoint); model.addAttribute("mberManageVO", mberManageVO); } /* * #1.로딩 문제 해결을 위해 ajax로 이전 2024-03-21 * /web/user/subcontent/mberInfo_cash_pointAjax.do {//캐시 정보 List cashInfoList = mjonPayService.selectCashInfoList(userId); model.addAttribute("cashInfoList", cashInfoList); } {//포인트 정보 List pointInfoList = mjonPayService.selectPointInfoList(userId); model.addAttribute("pointInfoList", pointInfoList); } */ MjonMsgVO mjonMsgVO = new MjonMsgVO(); mjonMsgVO.setUserId(userId); /* * #2.로딩 문제 해결을 위해 ajax로 이전 2024-03-21 * /web/user/subcontent/mberInfo_send_reservAjax.do * { // 발송건수 mjonMsgVO.setReserveYn("N"); List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); model.addAttribute("sendTotList", sendTotList); } { // 예약건수 mjonMsgVO.setReserveYn("Y"); List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); model.addAttribute("reservToList", reservToList); } */ {// 충전캐시 String sumPayMoney = mjonPayService.selectSumPayMoney(userId); model.addAttribute("sumPayMoney", sumPayMoney); } {// 충전포인트 String sumPoint = mjonPayService.selectSumPoint(userId); model.addAttribute("sumPoint", sumPoint); } /* {// 총 사용금액 MjonPayVO mjonPayVO = new MjonPayVO(); mjonPayVO.setUserId(userId); List usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO); model.addAttribute("usedCashTotList", usedCashTotList); } */ {// 사용가능한 금액 MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); model.addAttribute("mberManageVO", mberManageVO); } {//발신번호 리스트 조회하기 MjPhoneMemberVO phoneMemberVO = new MjPhoneMemberVO(); phoneMemberVO.setUserId(userId); phoneMemberVO.setSearchSortCnd("phmId"); phoneMemberVO.setSearchSortOrd("desc"); phoneMemberVO.setPhmType("01");//발신번호 타입의 번호만 조회 phoneMemberVO.setFirstIndex(0);//페이징 처리에서 값이 없으면 1이 넘어가서 데이터를 못불러 오는 오류가 있어서 0으로 셋팅. List sendNumberList = mjonMsgService.selectSendNumberList(phoneMemberVO); MJUtil mjUtil = new MJUtil(); for(int i=0; i < sendNumberList.size(); i++) { String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber()); sendNumberList.get(i).setPhoneNumber(phoneNumber); } int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0; model.addAttribute("countNum", countNum); model.addAttribute("sendNumberList", sendNumberList); } {//최근 발송 문자 내용 불러오기 - 최근 3개 내역만 List mjonMsgSentList = mberManageService.selectMberMsgSentLatestListNew20240320(userId); model.addAttribute("mjonMsgSentList", mjonMsgSentList); } /* * 2024-03-22 페이지 로딩 속도 개선을 위해 ajax로 처리 {//최근 발송 알림톡 내용 불러오기 - 최근 3개 내역만 KakaoSentVO kakaoSentVO = new KakaoSentVO(); kakaoSentVO.setUserId(userId); kakaoSentVO.setTabType("at"); kakaoSentVO.setRecordCountPerPage(3); kakaoSentVO.setFirstIndex(0); kakaoSentVO.setListType("groupList"); kakaoSentVO.setStateType("all"); kakaoSentVO.setSearchSortOrd("desc"); kakaoSentVO.setSearchSortCnd("regdate"); List kakaoATSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); model.addAttribute("kakaoATSentList", kakaoATSentList); } */ {//최근 발송 팩스 내용 불러오기 - 최근 3개 내역만 FaxGroupDataVO faxGroupDataVO = new FaxGroupDataVO(); faxGroupDataVO.setUserId(userId); faxGroupDataVO.setRecordCountPerPage(3); faxGroupDataVO.setFirstIndex(0); List faxSendList = faxService.selectMyFaxSendList(faxGroupDataVO); model.addAttribute("faxSendList", faxSendList); } model.addAttribute("pageTab", "myPageIndex"); model.addAttribute("loginVO", loginVO); { /** * 후불제 회원 관련 사용 요금 내역 정보 조회하기 * 20240102 우영두 추가 * 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회 * * */ //누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산) String totSumCashAfterPay = mjonPayService.selectTotalSumCashForAfterPay(userId); model.addAttribute("totSumCashAfterPay", totSumCashAfterPay); //누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용) String totSumPointAfterPay = mjonPayService.selectTotalSumPointForAfterPay(userId); model.addAttribute("totSumPointAfterPay", totSumPointAfterPay); //누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액) String totSumPaymentAfterPay = mjonPayService.selectTotSumPaymentAfterPay(userId); model.addAttribute("totSumPaymentAfterPay", totSumPaymentAfterPay); //누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산) float p_i_re_point = 0; JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); if (sysJoinSetVO != null) { p_i_re_point = sysJoinSetVO.getPointPer(); } int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100)); model.addAttribute("sumPaymentPointAfterPay", paymentPointAfterPay); //당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산) float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay); model.addAttribute("unPaymentAfterPay", unPaymentAfterPay); //당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산) int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100)); model.addAttribute("unPaymentPointAfterPay", unPaymentPointAfterPay); } { /** * 보안인증 본인인증 기능추가 * 20241120 원영현 과장 추가 * */ KmcCertChecker kmcCertCheck = new KmcCertChecker(); //kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if(request.getServerName().contains("192.168.0.60") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://192.168.0.60:8085"; }else{ serverNm = request.getScheme() + "://www.munjaon.co.kr"; } AuthCertVO certVO = kmcCertCheck.authCertCheckNine(serverNm + "/web/user/selectSecurityAuthn.do", loginVO.getId()); model.addAttribute("certVO", certVO); } return "web/user/mberInfoIndex"; } /** * 마이페이지 - 이용내역 - ajax * @param mjonMsgVO * @param model * @return "/web/member/pay/PayUserListAjax.do" * @throws Exception */ @RequestMapping(value="/web/user/subcontent/mberInfo_cash_pointAjax.do") public String mberInfo_cash_pointAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, HttpServletRequest request, ModelMap model) throws Exception{ System.out.println("mberInfo_cash_pointAjax"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); {//캐시 정보 List cashInfoList = mjonPayService.selectCashInfoList(userId); model.addAttribute("cashInfoList", cashInfoList); } {//포인트 정보 List pointInfoList = mjonPayService.selectPointInfoList(userId); model.addAttribute("pointInfoList", pointInfoList); } System.out.println("mberInfo_cash_pointAjax_end"); return "/web/user/subcontent/mberInfo_cash_pointAjax"; } /** * 마이페이지 - 이용내역 - 발송건수/예약건수 ajax * @param mjonMsgVO * @param model * @return "/web/member/pay/PayUserListAjax.do" * @throws Exception */ @RequestMapping(value="/web/user/subcontent/mberInfo_send_reservAjax.do") public String mberInfo_send_reservAjax( HttpServletRequest request, ModelMap model) throws Exception{ System.out.println("mberInfo_cash_pointAjax"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); MjonMsgVO mjonMsgVO = new MjonMsgVO(); mjonMsgVO.setUserId(userId); { // 발송건수 mjonMsgVO.setReserveYn("N"); List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); model.addAttribute("sendTotList", sendTotList); } { // 예약건수 mjonMsgVO.setReserveYn("Y"); List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); model.addAttribute("reservToList", reservToList); } System.out.println("mberInfo_cash_pointAjax_end"); return "/web/user/subcontent/mberInfo_send_reservAjax"; } /** * 마이페이지 - 최근발송내역-알림톡 * @param mjonMsgVO * @param model * @return "/web/member/pay/PayUserListAjax.do" * @throws Exception */ @RequestMapping(value="/web/user/subcontent/mberInfo_kakaoATSentListAjax.do") public String mberInfo_kakaoATSentListAjax( HttpServletRequest request, ModelMap model) throws Exception{ System.out.println("mberInfo_kakaoATSentListAjax"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); {//최근 발송 알림톡 내용 불러오기 - 최근 3개 내역만 KakaoSentVO kakaoSentVO = new KakaoSentVO(); kakaoSentVO.setUserId(userId); kakaoSentVO.setTabType("at"); kakaoSentVO.setRecordCountPerPage(3); kakaoSentVO.setFirstIndex(0); kakaoSentVO.setListType("groupList"); kakaoSentVO.setStateType("all"); kakaoSentVO.setSearchSortOrd("desc"); kakaoSentVO.setSearchSortCnd("regdate"); List kakaoATSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); model.addAttribute("kakaoATSentList", kakaoATSentList); } System.out.println("mberInfo_kakaoATSentListAjax_end"); return "/web/user/subcontent/mberInfo_kakaoATSentListAjax"; } //발송문자 건수 계산하는 함수 public String[] getTotalSendCnt(List mjonMsgSentVO) { int totCnt = 0; //전체건수 int succCnt = 0; //성공건수 int FCnt = 0; //실패, 대기 건수 int WCnt = 0; //실패, 대기 건수 int totalSPrice = 0; //성공, 대기 금액 합산 int totalWPrice = 0; //성공, 대기 금액 합산 int totalFPrice = 0; //실패 금액 합산 for(int i=0; i< mjonMsgSentVO.size(); i++) { String msgResultSts = mjonMsgSentVO.get(i).getMsgResultSts(); int msgResultCnt = Integer.parseInt(mjonMsgSentVO.get(i).getMsgResultCnt()); float msgEachPrice = Float.parseFloat(mjonMsgSentVO.get(i).getEachPrice()); if(msgResultSts.equals("S")) { succCnt = succCnt + msgResultCnt; totalSPrice = totalSPrice + (int)(msgResultCnt * msgEachPrice); }else if(msgResultSts.equals("W")){ WCnt = WCnt + msgResultCnt; totalWPrice = totalWPrice + (int)(msgResultCnt * msgEachPrice); }else { FCnt = FCnt + msgResultCnt; totalFPrice = totalFPrice + (int)(msgResultCnt * msgEachPrice); } totCnt = totCnt + msgResultCnt; } String[] returnArr = {Integer.toString(totCnt), Integer.toString(succCnt), Integer.toString(WCnt), Integer.toString(FCnt), Integer.toString(totalSPrice), Integer.toString(totalWPrice), Integer.toString(totalFPrice)}; return returnArr; } /** * 마이페이지 비밀번호 변경 탭 */ @RequestMapping(value="/web/user/mberInfoChange.do") public String mberInfoChange( @ModelAttribute MberManageVO mberManageVO , ModelMap model , RedirectAttributes redirectAttributes) throws Exception { /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); /*if(!userInfo.getAtchFileId().equals("")) {*/ //사업자등록증 if(!("").equals(userInfo.getAtchFileId())) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(userInfo.getAtchFileId()); List result = fileService.selectFileInfs(fileVO); model.addAttribute("result", result); } //재직증명서 if(!("").equals(userInfo.getWorkAtchFileId())) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(userInfo.getWorkAtchFileId()); List result2 = fileService.selectFileInfs(fileVO); model.addAttribute("result2", result2); } // 이메일 코드조회 ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); voComCode.setCodeId("ITN031"); model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); model.addAttribute("pageTab", "mberInfoChange"); if("c".equals(userInfo.getDept())) { //기업회원 //기업회원 정보변경 신청 상태 확인 - 회원ID로 가장 최근 기업회원 정보 내역 조회 mberManageVO.setSearchHstType("04"); //담당자 변경 조회 MberManageVO cmpPhoneChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); model.addAttribute("cmpPhoneChangeManageVO", cmpPhoneChangeManageVO); mberManageVO.setSearchHstType("03"); //사업장 변경 조회 MberManageVO cmpInfoChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); model.addAttribute("cmpInfoChangeManageVO", cmpInfoChangeManageVO); return "web/user/mberCompanyInfoChange"; } return "web/user/mberInfoChange";//개인회원 } // 회원가입 - 모바일인증 중복 체크 Ajax, 만 18세 체크 @RequestMapping(value = "/web/user/mblDnCheckByIdAjax.do") public ModelAndView selectMblDnCheckByIdAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, @RequestParam Map commandMap) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); //중복체크 // String mblDn = (String) commandMap.get("mblDn"); String Id = (String) commandMap.get("id"); mberManageVO.setMberId(Id); List checkMblDn = new ArrayList(); checkMblDn = mberManageService.selectMblDnCheckById(mberManageVO); modelAndView.addObject("checkMblDnCnt", checkMblDn.size()); //만 나이 String birthDay = (String) commandMap.get("birthDay"); LocalDate now = LocalDate.now(); LocalDate parsedBirthDate = LocalDate.parse(birthDay, DateTimeFormatter.ofPattern("yyyyMMdd")); int age = now.minusYears(parsedBirthDate.getYear()).getYear(); // (1) if (parsedBirthDate.plusYears(age).isAfter(now)) { age = age -1; } modelAndView.addObject("age", age); return modelAndView; } /** * 회원정보 조회 휴대폰 인증 */ @RequestMapping("/web/user/selectKmcMberInfoAjax.do") public String selectKmcMberInfoAjax( HttpServletRequest request, ModelMap model , @RequestParam Map commandMap , @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception { //개인회원일 시 mblDn 비교 후 본인 명의 휴대폰만 변경 가능하게끔 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String mblDn = userManageService.selectUserMblDnById(loginVO.getId()); model.addAttribute("loginVO", loginVO); String errMessage = ""; //에러메세지 String rec_cert = ""; // 결과값(암호화) String certNum = ""; // certNum rec_cert = request.getParameter("rec_cert").trim(); certNum = request.getParameter("certNum").trim(); kmcVO.setRecCert(rec_cert); kmcVO.setCertNum(certNum); // 파라미터 유효성 검증 if( rec_cert.length() == 0 || certNum.length() == 0 ){ errMessage = "비정상"; return returnPage(model , errMessage , kmcVO) ; } // 변수선언 -------------------------------------------------------------------------------------------------------- String k_certNum = ""; // 파라미터로 수신한 요청번호 k_certNum = certNum; String date = ""; // 요청일시 String CI = ""; // 연계정보(CI) String DI = ""; // 중복가입확인정보(DI) String phoneNo = ""; // 휴대폰번호 String phoneCorp = ""; // 이동통신사 String birthDay = ""; // 생년월일 String gender = ""; // 성별 String nation = ""; // 내국인 String name = ""; // 성명 String M_name = ""; // 미성년자 성명 String M_birthDay = ""; // 미성년자 생년월일 String M_Gender = ""; // 미성년자 성별 String M_nation = ""; // 미성년자 내외국인 String result = ""; // 결과값 String certMet = ""; // 인증방법 String ip = ""; // ip주소 String plusInfo = ""; String encPara = ""; String encMsg1 = ""; String encMsg2 = ""; String msgChk = ""; com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager(); //02. 1차 복호화 //수신된 certNum를 이용하여 복호화 rec_cert = seed.getDec(rec_cert, k_certNum); //03. 1차 파싱 int inf1 = rec_cert.indexOf("/",0); int inf2 = rec_cert.indexOf("/",inf1+1); encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터 encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값 //04. 위변조 검증 encMsg2 = seed.getMsg(encPara); kmcVO.setEncMsg2(encMsg2); if(encMsg2.equals(encMsg1)){ msgChk="Y"; } if(!"Y".equals(msgChk)) { errMessage = "비정상접근입니다."; return returnPage(model , errMessage , kmcVO) ; } //05. 2차 복호화 rec_cert = seed.getDec(encPara, k_certNum); kmcVO.setRecCert(rec_cert); //06. 2차 파싱 int info1 = rec_cert.indexOf("/",0); int info2 = rec_cert.indexOf("/",info1+1); int info3 = rec_cert.indexOf("/",info2+1); int info4 = rec_cert.indexOf("/",info3+1); int info5 = rec_cert.indexOf("/",info4+1); int info6 = rec_cert.indexOf("/",info5+1); int info7 = rec_cert.indexOf("/",info6+1); int info8 = rec_cert.indexOf("/",info7+1); int info9 = rec_cert.indexOf("/",info8+1); int info10 = rec_cert.indexOf("/",info9+1); int info11 = rec_cert.indexOf("/",info10+1); int info12 = rec_cert.indexOf("/",info11+1); int info13 = rec_cert.indexOf("/",info12+1); int info14 = rec_cert.indexOf("/",info13+1); int info15 = rec_cert.indexOf("/",info14+1); int info16 = rec_cert.indexOf("/",info15+1); int info17 = rec_cert.indexOf("/",info16+1); int info18 = rec_cert.indexOf("/",info17+1); certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum); date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date); CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI); phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo); phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp); birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay); gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender); nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation); name = rec_cert.substring(info8+1,info9); kmcVO.setName(name); result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result); certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet); ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip); M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name); M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay); M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender); M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation); plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo); DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI); //07. CI, DI 복호화 CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); if("Y".equals(result)) { } //-------------------------------------------------------------- String regex = ""; if( certNum.length() == 0 || certNum.length() > 40){ errMessage = "요청번호 비정상."; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( date.length() != 14 || !paramChk(regex, date) ){ errMessage = "요청일시"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( certMet.length() != 1 || !paramChk(regex, certMet) ){ errMessage = "본인인증방법 비정상" + certMet; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){ errMessage = "휴대폰번호 비정상" ; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){ errMessage = "이동통신사 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){ errMessage = "생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( gender.length() != 1 || !paramChk(regex, gender) ){ errMessage = "성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( nation.length() != 1 || !paramChk(regex, nation) ){ errMessage = "내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-�R.,-]*"; if( name.length() > 60 || !paramChk(regex, name) ){ errMessage = "성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( result.length() != 1 || !paramChk(regex, result) ){ errMessage = "결과값 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-?.,-]*"; if( M_name.length() != 0 ){ if( M_name.length() > 60 || !paramChk(regex, M_name) ){ errMessage = "미성년자 성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_birthDay.length() != 0 ){ if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){ errMessage = "미성년자 생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_Gender.length() != 0 ){ if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){ errMessage = "미성년자 성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_nation.length() != 0 ){ if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){ errMessage = "미성년자 내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } } //KMC 본인인증 로그 AuthCertVO certVO = new AuthCertVO(); certVO.setMberId(kmcVO.getPlusInfo()); certVO.setCertNum(kmcVO.getCertNum()); certVO.setCertDate(kmcVO.getDate()); certVO.setCertDi(kmcVO.getDI()); certVO.setCertPhone(kmcVO.getPhoneNo()); certVO.setCertNation(kmcVO.getNation()); certVO.setCertName(kmcVO.getName()); certVO.setCertResult(kmcVO.getResult()); certVO.setCertType("KMC_회원정보 변경"); certVO.setCertIpaddr(kmcVO.getIp()); certVO.setBirthDay(kmcVO.getBirthDay()); certVO.setSexdstnCode(kmcVO.getGender()); //디비 테이블에 저장하기 mberManageService.insertCertInfoLog(certVO); //개인회원일 시 기존 DN가 본인인증 DN비고하여 본인 명의만 번호 변경 가능하게 if("p".equals(loginVO.getDept())) { if(!mblDn.equals(DI)) { kmcVO.setDnChk("N"); } } //LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); // model.addAttribute("loginVO", loginVO); model.addAttribute("kmcVO", kmcVO); return "web/user/mberInfoKmcReqPage"; } /** * 마이페이지 개인정보 변경 */ @RequestMapping(value="/web/user/updateUserInfoAjax.do") public ModelAndView updateUserInfoAjax(@ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response , final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { userManageService.updateUserInfo(mberManageVO); //이메일, 이벤트 수신 여부와 개인회원의 휴대폰 변경 시 회원 테이블 update if("c".equals(mberManageVO.getDept()) && "Y".equals(mberManageVO.getMoblphonNoChangeYn())) { //기업회원의 휴대폰 변경 시 기업 회원 히스토리 테이블에 insert 후 관리자의 승인 반려 처리 String cAtchFileId = mberManageVO.getWorkAtchFileId(); final Map files = multiRequest.getFileMap(); Map fileW = new LinkedHashMap<>(); //재직증명서 if (!files.isEmpty()){ Iterator> it = files.entrySet().iterator(); int cIndex = 0; int wIndex = 0; while(it.hasNext()) { Map.Entry entry = it.next(); MultipartFile mFile = entry.getValue(); if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name fileW.put("fileW" + wIndex, mFile); wIndex++; } } if(fileW != null) { // 재직증명서 첨부파일 List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", ""); cAtchFileId = fileMngService.insertFileInfs(resultW); mberManageVO.setWorkAtchFileId(cAtchFileId); } } mberManageVO.setHstType("04"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 4.기업회원 담당자 변경(공통코드) mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드) LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); mberManageVO.setUniqId( user.getUniqId()); mberManageVO.setAtchFileId(""); //담당자변경은 사업자등록증 첨부X //회원정보 조회해서 histy에 insert에 추가 MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); mberManageVO.setBizType(userInfo.getBizType()); mberManageVO.setMberNm(userInfo.getMberNm()); mberManageVO.setBizNo(userInfo.getBizNo()); mberManageVO.setCeoNm(userInfo.getCeoNm()); mberManageService.insertCmpUsrHst(mberManageVO); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { String emailTitle = "회원관리 > 기업회원 담당자변경 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { String smsTitle = "기업회원 담당자변경 요청"; // CS관리자 SMS 알림전송 mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 기업회원 담당자변경 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")"; mjonCommon.sendSimpleSlackMsg(msg); } } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 마이페이지 기업정보 변경 */ @RequestMapping(value="/web/user/updateCmpUserInfoAjax.do") public ModelAndView updateCmpUserInfoAjax(@ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response , final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { String wAtchFileId = mberManageVO.getAtchFileId(); String cAtchFileId = mberManageVO.getWorkAtchFileId(); final Map files = multiRequest.getFileMap(); Map fileC = new LinkedHashMap<>(); //사업자등록증 Map fileW = new LinkedHashMap<>(); //재직증명서 if (!files.isEmpty()){ Iterator> it = files.entrySet().iterator(); int cIndex = 0; int wIndex = 0; while(it.hasNext()) { Map.Entry entry = it.next(); MultipartFile mFile = entry.getValue(); if(entry.getKey().equals("file")) { //사업자등록증 - jsp에서 넘겨준 input type="file"의 name fileC.put("fileC" + cIndex, mFile); cIndex++; } if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name fileW.put("fileW" + wIndex, mFile); wIndex++; } } if(fileC != null) { // 사업자등록증 List resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", ""); wAtchFileId = fileMngService.insertFileInfs(resultC); mberManageVO.setAtchFileId(wAtchFileId); } if(fileW != null) { // 재직증명서 첨부파일 List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", ""); cAtchFileId = fileMngService.insertFileInfs(resultW); mberManageVO.setWorkAtchFileId(cAtchFileId); } } mberManageVO.setHstType("03"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드) mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드) LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); mberManageVO.setUniqId( user.getUniqId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); //회원정보 조회해서 histy에 insert에 추가 mberManageVO.setManagerNm(userInfo.getManagerNm()); mberManageVO.setMoblphonNo(userInfo.getMoblphonNo()); mberManageService.insertCmpUsrHst(mberManageVO); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { String emailTitle = "회원관리 > 기업회원 정보변경 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { String smsTitle = "기업회원 정보변경 요청"; // CS관리자 SMS 알림전송 mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 기업회원 정보변경 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")"; mjonCommon.sendSimpleSlackMsg(msg); } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 마이페이지 기업정보 변경 취소 처리 */ @RequestMapping(value="/web/user/updateCmpUserInfoCancelAjax.do") public ModelAndView updateCmpUserInfoCancelAjax(@ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { modelAndView.addObject("result", "loginFail"); return modelAndView; } try { //취소 회원 아이디 셋팅 mberManageVO.setLastUpdusrId(loginVO.getId()); //기업회원 변경 취소 Update 처리 hstType = 05, hstSttus = 04로 변경 mberManageService.updateCmpUserInfoCancel(mberManageVO); modelAndView.addObject("result", "success"); } catch (Exception e) { System.out.println("updateCmpUserInfoCancelAjax Controller Error!!!! " + e); modelAndView.addObject("message", "기업회원 정보변경 취소요청 처리 중 오류가 발생하였습니다."); modelAndView.addObject("result", "fail"); return modelAndView; } return modelAndView; } /* *//** * 마이페이지 기업정보 변경 *//* @RequestMapping(value="/web/user/updateCmpUserInfoAjax.do") public ModelAndView updateCmpUserInfoAjax(@ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response , final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { String atchFileId = mberManageVO.getAtchFileId(); String isThumbFile = ""; final Map files = multiRequest.getFileMap(); if (!files.isEmpty()){ if ("".equals(atchFileId)) { List result = fileUtil.parseFileInf(files, "MY_", 0, atchFileId , "", isThumbFile); atchFileId = fileMngService.insertFileInfs(result); mberManageVO.setAtchFileId(atchFileId); }else { FileVO fvo = new FileVO(); fvo.setAtchFileId(atchFileId); int cnt = fileMngService.getMaxFileSN(fvo); List result = fileUtil.parseFileInf(files, "MY_", cnt, atchFileId, "", isThumbFile); fileMngService.updateFileInfs(result); } } userManageService.updateUserInfo(mberManageVO); modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } */ /** * 기업회원 전환 */ @RequestMapping(value="/web/user/membershipChange.do") public String membershipChange(ModelMap model) throws Exception { /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); // 이메일 코드조회 ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); voComCode.setCodeId("ITN031"); model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); model.addAttribute("pageTab", "membershipChange"); //기업회원전환 신청 상태 확인 - 회원ID로 가장 최근 기업회원 정보 내역 조회 MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); if(null != cmpChangeManageVO) { if("02".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원전환일 시 if("01".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 신청 상태일 시 model.addAttribute("cmpChangeManageVO", cmpChangeManageVO); return "web/user/membershipChanging"; }else if("03".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 반려 상태일 시 model.addAttribute("cmpChangeManageVO", cmpChangeManageVO); return "web/user/membershipChangeReturn"; }else if("02".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 승인 상태일 시 model.addAttribute("cmpChangeManageVO", cmpChangeManageVO); return "web/user/membershipChangeOk"; } } } return "web/user/membershipChange"; } /** * 기업회원 전환 변경 */ @RequestMapping(value="/web/user/updateMembershipChangeAjax.do") public ModelAndView updateMembershipChangeAjax(@ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response , final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); if("Y".equals(mberManageVO.getAtchFileSttus())) { //사업자등록증 문제 없을 시 - 재직증명서만 새로 제출하며 사업자등록증은 기존에 첨부파일 ID를 사용 mberManageVO.setAtchFileId(mberManageVO.getBeforeAtchFileId()); } if("Y".equals(mberManageVO.getWorkAtchFileSttus())) { //재직증명서 문제 없을 시 - 사업자등록증 새로 제출하며 재직증명서는 기존에 첨부파일 ID를 사용 mberManageVO.setWorkAtchFileId(mberManageVO.getBeforeWorkAtchFileId()); } try { String wAtchFileId = mberManageVO.getAtchFileId(); String cAtchFileId = mberManageVO.getWorkAtchFileId(); final Map files = multiRequest.getFileMap(); Map fileC = new LinkedHashMap<>(); //사업자등록증 Map fileW = new LinkedHashMap<>(); //재직증명서 if (!files.isEmpty()){ Iterator> it = files.entrySet().iterator(); int cIndex = 0; int wIndex = 0; while(it.hasNext()) { Map.Entry entry = it.next(); MultipartFile mFile = entry.getValue(); if(entry.getKey().equals("file")) { //사업자등록증 - jsp에서 넘겨준 input type="file"의 name fileC.put("fileC" + cIndex, mFile); cIndex++; } if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name fileW.put("fileW" + wIndex, mFile); wIndex++; } } if(fileC.size() > 0) { // 사업자등록증 List resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", ""); wAtchFileId = fileMngService.insertFileInfs(resultC); mberManageVO.setAtchFileId(wAtchFileId); } if(fileW.size() > 0) { // 재직증명서 첨부파일 List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", ""); cAtchFileId = fileMngService.insertFileInfs(resultW); mberManageVO.setWorkAtchFileId(cAtchFileId); } } //디비 테이블에 저장하기 //22.05.11 - 회원테이블 update에서 기업회원 히스토리 테이블 insert로 수정 //관리자가 승인 시 기업회원 히스토리 테이블의 데이터로 회원테이블 update //mberManageService.updateMembershipChange(mberManageVO); mberManageVO.setHstType("02"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드) mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드) LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); mberManageVO.setUniqId( user.getUniqId()); //기업회원 전환 시 휴대폰을 따로 입력 받지 않아, 회원 테이블의 전화번호 조회 후 설정 MberManageVO mberManageVO2 = mberManageService.selectMber(user.getId()); mberManageVO.setMoblphonNo(mberManageVO2.getMoblphonNo()); mberManageService.insertCmpUsrHst(mberManageVO); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { String emailTitle = "회원관리 > 기업회원 전환승인 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { String smsTitle = "기업회원 전환승인 요청"; // CS관리자 SMS 알림전송 mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 기업회원 전환승인 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")"; mjonCommon.sendSimpleSlackMsg(msg); } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 비밀번호 변경 페이지 */ @RequestMapping(value="/web/user/passwordChange.do") public String passwordChange(ModelMap model) throws Exception { /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); model.addAttribute("pageTab", "passwordChange"); return "web/user/passwordChange"; } /** * 기존 비밀번호 조회 */ @RequestMapping(value="/web/user/selectPasswordCheckAjax.do") public ModelAndView selectPasswordCheckAjax(@ModelAttribute UserManageVO userManageVO , HttpServletRequest request ,HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); userManageVO.setUniqId(loginVO.getId()); int pwCheck = mberManageService.selectPasswordCheck(userManageVO); modelAndView.addObject("pwCheck", pwCheck); modelAndView.addObject("result", "success"); // 요청페이지가 개인정보 변경 펴이지 일경우 if(userManageVO.getUserTy().equals("userInfoCh")){ //System.out.println("휴대폰 인증 ***********************************************"); KmcCertChecker kmcCertCheck = new KmcCertChecker(); //kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://219.240.88.15:8095"; }else{ serverNm = request.getScheme() + "://www.munjaon.co.kr"; } AuthCertVO certVO = kmcCertCheck.authCertCheckFive(serverNm + "/web/user/selectKmcMberInfoAjax.do", loginVO.getId()); modelAndView.addObject("certVO", certVO); } }catch (Exception e){ modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 비밀번호 변경 */ @RequestMapping(value="/web/user/updatePasswordCheckAjax.do") public ModelAndView updatePasswordCheckAjax(@ModelAttribute UserManageVO userManageVO , HttpServletRequest request ,HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); UserManageVO userCheckVO = new UserManageVO(); userCheckVO.setUniqId(loginVO.getId()); userCheckVO.setPassword(userManageVO.getOldPassword()); int pwCheck = mberManageService.selectPasswordCheck(userCheckVO); if(pwCheck == 0) { modelAndView.addObject("errType", "01"); modelAndView.addObject("message", "현재 비밀번호를 확인해 주세요"); modelAndView.addObject("result", "fail"); return modelAndView; } if(!userManageVO.getPassword().equals(userManageVO.getRsaPasswd())) { modelAndView.addObject("errType", "02"); modelAndView.addObject("message", "새 비밀번호와 확인 비밀번호가 같지 않습니다."); modelAndView.addObject("result", "fail"); return modelAndView; } // 해당 정보의 등록 페스워드 조회 userManageVO.setEmplyrId(loginVO.getId()); int beforePwCheck = mberManageService.selectMberPWOverlapCheck(userManageVO); if (beforePwCheck != 0) { modelAndView.addObject("errType", "03"); modelAndView.addObject("message", "사용한 적 있는 비밀번호 입니다. 다른 비밀번호를 입력해주세요."); modelAndView.addObject("result", "fail"); return modelAndView; } //비밀번호 규칙섬 검증 추가 - 취약점 조치 userManageVO.setPassword(userManageVO.getPassword().trim()); String passWord = userManageVO.getPassword(); Pattern digitPattern = Pattern.compile("[0-9]"); Matcher digitMatcher = digitPattern.matcher(passWord); boolean hasDigit = digitMatcher.find(); Pattern letterPattern = Pattern.compile("[a-zA-Z]"); Matcher letterMatcher = letterPattern.matcher(passWord); boolean hasLetter = letterMatcher.find(); Pattern specialPattern = Pattern.compile("[`~!@@#$%^&*|\\\\'\";:/?]"); Matcher specialMatcher = specialPattern.matcher(passWord); boolean hasSpecialCharacter = specialMatcher.find(); if(hasDigit == false || hasLetter == false || hasSpecialCharacter == false || passWord.length() < 8 || passWord.length() > 20) { modelAndView.addObject("errType", "04"); modelAndView.addObject("message", "비밀번호 규칙을 확인해주세요."); modelAndView.addObject("result", "fail"); return modelAndView; } userManageVO.setEmplyrId(loginVO.getId()); userManageService.updateUserPWAjax(userManageVO); modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "Error : " + e.getLocalizedMessage()); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 신규 발신번호 관리 등록 */ @RequestMapping(value="/web/user/sendNumberManageRegister.do") public String sendNumberManageRegister( @ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , RedirectAttributes redirectAttributes , ModelMap model) throws Exception { /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); if(loginVO == null) { return "redirect:/web/user/login/login.do"; }else { /** * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 * 현재 로그인 세션도 만료 처리함 * */ boolean mberSttus = userManageService.selectUserStatusInfo(userId); if(!mberSttus) { request.getSession().invalidate(); redirectAttributes.addFlashAttribute("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 발신번호 등록을 할 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/main/mainPage.do"); return redirectUrlMaker.getRedirectUrl(); } } model.addAttribute("loginVO", loginVO); model.addAttribute("pageTab", "sendNumberManage"); mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); return "web/user/sendNumberManageRegister"; } /** * 발신번호 관리 */ @RequestMapping(value="/web/user/sendNumberManage.do") public String sendNumberManage( @ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , ModelMap model, RedirectAttributes redirectAttributes) throws Exception { /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { /*model.addAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");*/ //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); model.addAttribute("pageTab", "sendNumberManage"); mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); return "web/user/sendNumberManage"; } /** * 발신번호 리스트 Ajax */ @RequestMapping(value="/web/user/sendNumberListAjax.do") public String sendNumberListAjax( @ModelAttribute("searchVO") MjPhoneMemberVO searchVO , HttpServletRequest request , ModelMap model) throws Exception { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); searchVO.setPhmType("01"); //발신조회 searchVO.setUserId(userId); searchVO.setFirstIndex(0); searchVO.setRecordCountPerPage(1000); if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List searchVO.setSearchSortCnd("phmId"); searchVO.setSearchSortOrd("desc"); } if(!"".equals(searchVO.getSearchKeyword())) { searchVO.setSearchKeyword(searchVO.getSearchKeyword().replaceAll("-", "")); } //발신번호 리스트 조회 searchVO.setPhmType("01"); //발신조회 List sendNumberList = mjonMsgService.selectSendNumberList(searchVO); MJUtil mjUtil = new MJUtil(); int rejectCnt = 0; //발신번호 반려 건수 int compCnt = 0; //인증완료 건수 for(int i=0; i < sendNumberList.size(); i++) { String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber()); sendNumberList.get(i).setPhoneNumber(phoneNumber); //발신번호 반려 건수 체크 if(sendNumberList.get(i).getAuthYn().equals("C")) { rejectCnt++; } if(sendNumberList.get(i).getAuthYn().equals("Y")) { compCnt++; } } int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0; model.addAttribute("countNum", countNum); model.addAttribute("sendNumberList", sendNumberList); model.addAttribute("rejectCnt", rejectCnt); model.addAttribute("compCnt", compCnt); MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); model.addAttribute("mberManageVO", mberManageVO); return "web/user/sendNumberListAjax"; } /** * 발신번호 등록 여부 확인 */ @RequestMapping(value = "/web/user/updateSendNumberAjax.do") public ModelAndView updateSendNumberAjax( @ModelAttribute("searchVO") MjPhoneMemberVO mjPhoneMemberVO , HttpServletRequest request ,HttpServletResponse response ,final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); int resultCnt = 0; MjPhoneMemberVO resultPhoneInfo = new MjPhoneMemberVO(); try { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); mjPhoneMemberVO.setUserId(userId); String atchFileId = ""; String isThumbFile = ""; String phmId = mjPhoneMemberVO.getPhmId(); String certId = ""; //회원 발신번호 정보 불러오기 resultPhoneInfo = mjonMsgService.selectSendPhoneNumberByPhmId(phmId); final Map files = multiRequest.getFileMap(); if (!files.isEmpty()){ atchFileId = mjPhoneMemberVO.getAtchFileId(); if ("".equals(atchFileId)) {//신규 첨부파일 처리 List result = fileUtil.parseFileInf(files, "CERT_", 0, atchFileId, "", ""); atchFileId = fileMngService.insertFileInfs(result); //resultPhoneInfo = mjonMsgService.selectSendPhoneNumberByPhmId(phmId); //인증서류 데이터 입력하기 CertVO certVO = new CertVO(); certId = egovCertEtcIdGnrService.getNextStringId(); mjPhoneMemberVO.setCertId(certId); certVO.setCertId(certId); //인증 파일 아이디 certVO.setSentPhoneNumber(resultPhoneInfo.getPhoneNumber()); //발신번호 certVO.setCertType("01"); //인증종류 : 발신 타입(01) certVO.setAtchFileId(atchFileId); //첨부파일 아이디 certVO.setUserId(loginVO.getId()); //사용자 아이디 certVO.setFrstRegisterId(loginVO.getId()); //최초등록자 certService.insertCertFile(certVO); } else {//기존 첨부파일 업데이트 FileVO fvo = new FileVO(); fvo.setAtchFileId(atchFileId); int cnt = fileMngService.getMaxFileSN(fvo); List result = fileUtil.parseFileInf(files, "CERT_", cnt, atchFileId, "", ""); fileMngService.updateFileInfs(result); } } //발신번호 수정에 따른 상태값을 심사로 변경. resultCnt = mjonMsgService.updateSendPhoneNumberAuthType(mjPhoneMemberVO); if(resultCnt > 0) { /*String title = "번호관리 > 발신번호 재승인 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), title);*/ modelAndView.addObject("result", "success"); modelAndView.addObject("message", "발신번호 수정 요청이 접수 되었습니다."); }else { modelAndView.addObject("result", "fail"); modelAndView.addObject("message", "발신번호 수정 요청 접수에 오류가 발생하였습니다."); } }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); return modelAndView; } /** * 발신번호 등록시 반려후 재승인 심사가 필요한 경우 * 관리자에게 재승인 신청 접수 내역을 알리는 * 메일 발송 및 문자 발송을 진행한다. * 2022.09.26 우영두 수정 * * 에러가 발생시 오류 메세지만 로그 기록하고 완료 처리함 * */ try { // 즉시승인이 아닌경우 문자온 법인폰으로 알림 문자 발송하기. if (resultCnt > 0) { String title = "번호관리 > 발신번호 재승인 요청"; String userNm = resultPhoneInfo.getUserName(); String userId = resultPhoneInfo.getUserId(); String phoneNum = resultPhoneInfo.getPhoneNumber(); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(userNm, userId, title); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { MjonCommon mjCommon = new MjonCommon(); MjonMsgVO mjonMsgVO = new MjonMsgVO(); //발신번호 등록(관리자에게 알림이기에 발신번호도 법인폰 번호로 한다. 15518011 ) mjonMsgVO.setCallFrom("15518011"); //발송 문자 내용 등록 String smsTxt = "[발신번호 재승인 요청] "+ userNm +"(" + userId + ")/발신번호 " + phoneNum + "/재승인 요청"; mjonMsgVO.setSmsTxt(smsTxt); //발송 문자 타입(단/장문) 등록 //문자열 길이 체크 해주기 String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 smsTxt = smsTxt.replace("\r\n", "\n"); int FrBytes = smsTxt.getBytes(charset).length; String msgType = "4"; //90바이트를 초과하는 경우 장문으로 발송 if(FrBytes > 90){ msgType = "6"; } mjonMsgVO.setMsgType(msgType); //그림이미지 첨부파일 갯수 0으로 셋팅 mjonMsgVO.setFileCnt("0"); // 문자타입 구분 if (mjonMsgVO.getMsgType().equals("4")) { mjonMsgVO.setMsgDiv("S"); // 단문 } else if (mjonMsgVO.getMsgType().equals("6")) { if (mjonMsgVO.getFileCnt().equals("0")) { mjonMsgVO.setMsgDiv("L"); // 장문 } else { mjonMsgVO.setMsgDiv("P"); // 그림 } } // 문자타입별 대표전송사 정보 MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 // 전송금액 mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 //문자발송을 위한 데이터 셋팅 함수 호출해주기 MjonMsgVO resultCom = mjCommon.getAdminPhoneSendMsgDataComm(mjonMsgVO); //문자온 법인폰으로 문자 발송 처리 mjonMsgDataService.insertAdmToMberMsgDataInfo(resultCom); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 발신번호 재승인 요청 - " + userNm +"("+ userId + ")"; mjonCommon.sendSimpleSlackMsg(msg); } } } catch (Exception e) { System.out.println("+++++++++++++++++++++++++++++ 발신번호 등록 재승인 요청문자온 법인폰으로 문자 발송 및 이메일 알림 발송 Function Error !!!" + e); } return modelAndView; } /** * 발신번호 등록 여부 확인 */ @RequestMapping(value = "/web/user/selectSendNumberAjax.do") public ModelAndView selectSendNumberAjax( @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO , HttpServletRequest request ,HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { //발신번호 차단 리스트 체크(아이디 상관없이 모든 번호에 대한 차단번호 체크 20220616) int sendBlockNumberCheck = 0; sendBlockNumberCheck = mjonMsgService.selectSendBlockPhonNumCheck(mjonMsgVO); if(sendBlockNumberCheck != 0){ String message = "입력하신 발신번호는 차단된 발신번호 입니다."; modelAndView.addObject("message", message); modelAndView.addObject("result", "fail"); return modelAndView; } int sendNumberCheck = 0; //발신번호 등록 중복 체크 sendNumberCheck = mjonMsgService.selectSendPhonNumCheck(mjonMsgVO); if(sendNumberCheck != 0) { String message = "이미 등록되어 있는 발신번호 입니다."; modelAndView.addObject("message", message); modelAndView.addObject("result", "fail"); }else { //System.out.println(mjonMsgVO.getPhmAuthType() + " : ***********************************************"); //if(mjonMsgVO.getPhmAuthType().equals("01") || mjonMsgVO.getPhmAuthType() == "01") { // phone //System.out.println("휴대폰 인증 ***********************************************"); LoginVO loginVO = new LoginVO(); loginVO.setId(mjonMsgVO.getUserId()); loginVO = loginService.selectKMCInfo(loginVO); modelAndView.addObject("loginVO", loginVO); mjonMsgVO.getCallFrom(); // 신규 등록할 발신번호 String name = loginVO.getMberNm(); // 이름 if(loginVO.getDept().equals("c")) { name = loginVO.getManagerNm(); } KmcCertChecker kmcCertCheck = new KmcCertChecker(); //kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if(request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://119.193.215.98:8882"; }else{ serverNm = request.getScheme() + "://www.munjaon.co.kr"; } //AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/insertPhoneSendNumber.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), name); AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/selectPhoneNumberCertChkAjax.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), "", mjonMsgVO.getMyNameFlag()); modelAndView.addObject("certVO", certVO); /*}else if(mjonMsgVO.getPhmAuthType().equals("02") || mjonMsgVO.getPhmAuthType() == "02") { // ARS System.out.println("ARS 인증 ***********************************************"); } else if(mjonMsgVO.getPhmAuthType().equals("03") || mjonMsgVO.getPhmAuthType() == "03") { // ARS System.out.println("서류인증 ***********************************************"); } */ modelAndView.addObject("result", "success"); } }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 휴대폰 인증 본인, 타인 정보 확인 */ @RequestMapping("/web/user/selectPhoneNumberCertChkAjax.do") public String selectPhoneNumberCertChk( HttpServletRequest request, ModelMap model , @RequestParam Map commandMap , @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception { String errMessage = ""; //에러메세지 String rec_cert = ""; // 결과값(암호화) String certNum = ""; // certNum rec_cert = request.getParameter("rec_cert").trim(); certNum = request.getParameter("certNum").trim(); kmcVO.setRecCert(rec_cert); kmcVO.setCertNum(certNum); // 파라미터 유효성 검증 if( rec_cert.length() == 0 || certNum.length() == 0 ){ errMessage = "비정상"; return returnPage(model , errMessage , kmcVO) ; } // 변수선언 -------------------------------------------------------------------------------------------------------- String k_certNum = ""; // 파라미터로 수신한 요청번호 k_certNum = certNum; String date = ""; // 요청일시 String CI = ""; // 연계정보(CI) String DI = ""; // 중복가입확인정보(DI) String phoneNo = ""; // 휴대폰번호 String phoneCorp = ""; // 이동통신사 String birthDay = ""; // 생년월일 String gender = ""; // 성별 String nation = ""; // 내국인 String name = ""; // 성명 String M_name = ""; // 미성년자 성명 String M_birthDay = ""; // 미성년자 생년월일 String M_Gender = ""; // 미성년자 성별 String M_nation = ""; // 미성년자 내외국인 String result = ""; // 결과값 String certMet = ""; // 인증방법 String ip = ""; // ip주소 String plusInfo = ""; String encPara = ""; String encMsg1 = ""; String encMsg2 = ""; String msgChk = ""; IcertSecuManager seed = new IcertSecuManager(); //02. 1차 복호화 //수신된 certNum를 이용하여 복호화 rec_cert = seed.getDec(rec_cert, k_certNum); //03. 1차 파싱 int inf1 = rec_cert.indexOf("/",0); int inf2 = rec_cert.indexOf("/",inf1+1); encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터 encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값 //04. 위변조 검증 encMsg2 = seed.getMsg(encPara); kmcVO.setEncMsg2(encMsg2); if(encMsg2.equals(encMsg1)){ msgChk="Y"; } if(!"Y".equals(msgChk)) { errMessage = "비정상접근입니다."; return returnPage(model , errMessage , kmcVO) ; } //05. 2차 복호화 rec_cert = seed.getDec(encPara, k_certNum); kmcVO.setRecCert(rec_cert); //06. 2차 파싱 int info1 = rec_cert.indexOf("/",0); int info2 = rec_cert.indexOf("/",info1+1); int info3 = rec_cert.indexOf("/",info2+1); int info4 = rec_cert.indexOf("/",info3+1); int info5 = rec_cert.indexOf("/",info4+1); int info6 = rec_cert.indexOf("/",info5+1); int info7 = rec_cert.indexOf("/",info6+1); int info8 = rec_cert.indexOf("/",info7+1); int info9 = rec_cert.indexOf("/",info8+1); int info10 = rec_cert.indexOf("/",info9+1); int info11 = rec_cert.indexOf("/",info10+1); int info12 = rec_cert.indexOf("/",info11+1); int info13 = rec_cert.indexOf("/",info12+1); int info14 = rec_cert.indexOf("/",info13+1); int info15 = rec_cert.indexOf("/",info14+1); int info16 = rec_cert.indexOf("/",info15+1); int info17 = rec_cert.indexOf("/",info16+1); int info18 = rec_cert.indexOf("/",info17+1); certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum); date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date); CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI); phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo); phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp); birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay); gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender); nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation); name = rec_cert.substring(info8+1,info9); kmcVO.setName(name); result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result); certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet); ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip); M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name); M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay); M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender); M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation); plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo); DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI); //07. CI, DI 복호화 CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); if("Y".equals(result)) { } //-------------------------------------------------------------- String regex = ""; if( certNum.length() == 0 || certNum.length() > 40){ errMessage = "요청번호 비정상."; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( date.length() != 14 || !paramChk(regex, date) ){ errMessage = "요청일시"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( certMet.length() != 1 || !paramChk(regex, certMet) ){ errMessage = "본인인증방법 비정상" + certMet; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){ errMessage = "휴대폰번호 비정상" ; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){ errMessage = "이동통신사 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){ errMessage = "생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( gender.length() != 1 || !paramChk(regex, gender) ){ errMessage = "성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( nation.length() != 1 || !paramChk(regex, nation) ){ errMessage = "내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-�R.,-]*"; if( name.length() > 60 || !paramChk(regex, name) ){ errMessage = "성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( result.length() != 1 || !paramChk(regex, result) ){ errMessage = "결과값 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-?.,-]*"; if( M_name.length() != 0 ){ if( M_name.length() > 60 || !paramChk(regex, M_name) ){ errMessage = "미성년자 성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_birthDay.length() != 0 ){ if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){ errMessage = "미성년자 생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_Gender.length() != 0 ){ if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){ errMessage = "미성년자 성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_nation.length() != 0 ){ if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){ errMessage = "미성년자 내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } } /* * plusInfo(본인인증 추가파라미터) * 구분지 "§" * [0] = mberId * [1] = 개인 혹은 법인 회원 본인인증일 경우 flag * * */ String tmp = kmcVO.getPlusInfo(); String[] tmpResult = tmp.split("§"); //KMC 본인인증 로그 AuthCertVO certVO = new AuthCertVO(); certVO.setMberId(tmpResult[0]); certVO.setCertNum(kmcVO.getCertNum()); certVO.setCertDate(kmcVO.getDate()); certVO.setCertDi(kmcVO.getDI()); certVO.setCertPhone(kmcVO.getPhoneNo()); certVO.setCertNation(kmcVO.getNation()); certVO.setCertName(kmcVO.getName()); certVO.setCertResult(kmcVO.getResult()); certVO.setCertType("KMC_발신번호 등록 인증"); certVO.setCertIpaddr(kmcVO.getIp()); certVO.setBirthDay(kmcVO.getBirthDay()); certVO.setSexdstnCode(kmcVO.getGender()); //디비 테이블에 저장하기 mberManageService.insertCertInfoLog(certVO); LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String mblDn = userManageService.selectUserMblDnById(loginVO.getId()); String resultDnFlag = "N"; if(DI.equals(mblDn)) { resultDnFlag = "Y"; } model.addAttribute("resultDnFlag", resultDnFlag); System.out.println("START 휴대폰인증"); System.out.println("휴대폰인증 => myNameFlag : " + tmpResult[1]); /* * 개인회원 - 본인명의 본인인증의 경우 * 휴대폰 본인인증 시 회원가입자 이름과 동일해야만 승인 * 법인회원 - 본인명의 본인인증의 경우 * 휴대폰 본인인증 시 회원가입자 이름과 동일해야만 승인 * 이준호_230314 * http://pms.iten.co.kr:9999/issues/3088 */ //=======================시작========================= //개인 본인명의 - Y //법인 대표 - Y MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); mberManageVO = userManageService.selectUserInfo(mberManageVO); String ceoNm = mberManageVO.getCeoNm() == null ? "" : mberManageVO.getCeoNm(); String managerNm = mberManageVO.getManagerNm() == null ? "" : mberManageVO.getManagerNm(); String resultNameChk = ""; //본인인증 호출부에서 myNameFlag값 == tmpResult[1] if("Y".equals(tmpResult[1])) { if("p".equals(mberManageVO.getDept())) { //개인회원일경우 //이름에 본인인증결과(이름)이 같을 경우 if(kmcVO.getName().trim().equals(loginVO.getName().trim())) { resultNameChk = "Y"; } else { resultNameChk = "N"; } System.out.println("휴대폰인증 => 개인회원 회원이름 : " + loginVO.getName().trim()); System.out.println("휴대폰인증 => 개인회원 인증이름 : " + kmcVO.getName().trim()); System.out.println("휴대폰인증 => 개인회원 resultNameChk : " + resultNameChk); } if("c".equals(mberManageVO.getDept())) { //법인회원 일 경우 if(ceoNm.contains(kmcVO.getName().trim())) { resultNameChk = "Y"; } //대표자명에 본인인증결과(이름)이 포함 되지 않을 경우 else { resultNameChk = "N"; } System.out.println("휴대폰인증 => 기업회원(대표) 대표이름 : " + ceoNm); System.out.println("휴대폰인증 => 기업회원(대표) 인증이름 : " + kmcVO.getName().trim()); System.out.println("휴대폰인증 => 기업회원(대표) resultNameChk : " + resultNameChk); } } else { /* // 기업회원>직원 인경우 if("c".equals(mberManageVO.getDept())) { //법인회원 일 경우 if(managerNm.equals(kmcVO.getName().trim())) { resultNameChk = "Y"; } //대표자명에 본인인증결과(이름)이 포함 되지 않을 경우 else { resultNameChk = "N"; } System.out.println("휴대폰인증 => 기업회원(직원) 직원이름 : " + managerNm); System.out.println("휴대폰인증 => 기업회원(직원) 인증이름 : " + kmcVO.getName().trim()); System.out.println("휴대폰인증 => 기업회원(직원) resultNameChk : " + resultNameChk); } */ } System.out.println("END 휴대폰인증"); model.addAttribute("resultNameChk", resultNameChk); //=======================끝========================= String birthDay_tmp = ""; try { birthDay_tmp = kmcVO.getMBirthDay().length() != 0 ? kmcVO.getMBirthDay() : kmcVO.getBirthDay(); } catch (Exception e) { birthDay_tmp = birthDay; } model.addAttribute("CI", kmcVO.getCI()); model.addAttribute("birthDay", birthDay_tmp); return "web/user/selectPhoneNumberCertChkReq"; } /** * 휴대폰 인증 발신번호 등록 */ @RequestMapping("/web/user/testtest.do") public String test222( HttpServletRequest request, ModelMap model , @RequestParam Map commandMap , @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception { model.addAttribute("resultDnFlag", "Y"); return "web/user/selectPhoneNumberCertChkReq"; } /** * 휴대폰 인증 발신번호 등록 */ @RequestMapping("/web/user/insertPhoneSendNumber.do") public String insertPhoneSendNumber( HttpServletRequest request, ModelMap model , @RequestParam Map commandMap , @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception { String errMessage = ""; //에러메세지 String rec_cert = ""; // 결과값(암호화) String certNum = ""; // certNum rec_cert = request.getParameter("rec_cert").trim(); certNum = request.getParameter("certNum").trim(); kmcVO.setRecCert(rec_cert); kmcVO.setCertNum(certNum); // 파라미터 유효성 검증 if( rec_cert.length() == 0 || certNum.length() == 0 ){ errMessage = "비정상"; return returnPage(model , errMessage , kmcVO) ; } // 변수선언 -------------------------------------------------------------------------------------------------------- String k_certNum = ""; // 파라미터로 수신한 요청번호 k_certNum = certNum; String date = ""; // 요청일시 String CI = ""; // 연계정보(CI) String DI = ""; // 중복가입확인정보(DI) String phoneNo = ""; // 휴대폰번호 String phoneCorp = ""; // 이동통신사 String birthDay = ""; // 생년월일 String gender = ""; // 성별 String nation = ""; // 내국인 String name = ""; // 성명 String M_name = ""; // 미성년자 성명 String M_birthDay = ""; // 미성년자 생년월일 String M_Gender = ""; // 미성년자 성별 String M_nation = ""; // 미성년자 내외국인 String result = ""; // 결과값 String certMet = ""; // 인증방법 String ip = ""; // ip주소 String plusInfo = ""; String encPara = ""; String encMsg1 = ""; String encMsg2 = ""; String msgChk = ""; IcertSecuManager seed = new IcertSecuManager(); //02. 1차 복호화 //수신된 certNum를 이용하여 복호화 rec_cert = seed.getDec(rec_cert, k_certNum); //03. 1차 파싱 int inf1 = rec_cert.indexOf("/",0); int inf2 = rec_cert.indexOf("/",inf1+1); encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터 encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값 //04. 위변조 검증 encMsg2 = seed.getMsg(encPara); kmcVO.setEncMsg2(encMsg2); if(encMsg2.equals(encMsg1)){ msgChk="Y"; } if(!"Y".equals(msgChk)) { errMessage = "비정상접근입니다."; return returnPage(model , errMessage , kmcVO) ; } //05. 2차 복호화 rec_cert = seed.getDec(encPara, k_certNum); kmcVO.setRecCert(rec_cert); //06. 2차 파싱 int info1 = rec_cert.indexOf("/",0); int info2 = rec_cert.indexOf("/",info1+1); int info3 = rec_cert.indexOf("/",info2+1); int info4 = rec_cert.indexOf("/",info3+1); int info5 = rec_cert.indexOf("/",info4+1); int info6 = rec_cert.indexOf("/",info5+1); int info7 = rec_cert.indexOf("/",info6+1); int info8 = rec_cert.indexOf("/",info7+1); int info9 = rec_cert.indexOf("/",info8+1); int info10 = rec_cert.indexOf("/",info9+1); int info11 = rec_cert.indexOf("/",info10+1); int info12 = rec_cert.indexOf("/",info11+1); int info13 = rec_cert.indexOf("/",info12+1); int info14 = rec_cert.indexOf("/",info13+1); int info15 = rec_cert.indexOf("/",info14+1); int info16 = rec_cert.indexOf("/",info15+1); int info17 = rec_cert.indexOf("/",info16+1); int info18 = rec_cert.indexOf("/",info17+1); certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum); date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date); CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI); phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo); phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp); birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay); gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender); nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation); name = rec_cert.substring(info8+1,info9); kmcVO.setName(name); result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result); certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet); ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip); M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name); M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay); M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender); M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation); plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo); DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI); //07. CI, DI 복호화 CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); if("Y".equals(result)) { } //-------------------------------------------------------------- String regex = ""; if( certNum.length() == 0 || certNum.length() > 40){ errMessage = "요청번호 비정상."; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( date.length() != 14 || !paramChk(regex, date) ){ errMessage = "요청일시"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( certMet.length() != 1 || !paramChk(regex, certMet) ){ errMessage = "본인인증방법 비정상" + certMet; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){ errMessage = "휴대폰번호 비정상" ; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){ errMessage = "이동통신사 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){ errMessage = "생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( gender.length() != 1 || !paramChk(regex, gender) ){ errMessage = "성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( nation.length() != 1 || !paramChk(regex, nation) ){ errMessage = "내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-�R.,-]*"; if( name.length() > 60 || !paramChk(regex, name) ){ errMessage = "성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( result.length() != 1 || !paramChk(regex, result) ){ errMessage = "결과값 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-?.,-]*"; if( M_name.length() != 0 ){ if( M_name.length() > 60 || !paramChk(regex, M_name) ){ errMessage = "미성년자 성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_birthDay.length() != 0 ){ if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){ errMessage = "미성년자 생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_Gender.length() != 0 ){ if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){ errMessage = "미성년자 성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_nation.length() != 0 ){ if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){ errMessage = "미성년자 내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } } MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO(); mjPhoneMemberVO.setUserId(plusInfo); mjPhoneMemberVO.setPhmType("01"); mjPhoneMemberVO.setPhmAuthType("01"); mjPhoneMemberVO.setFrstRegisterId(plusInfo); mjPhoneMemberVO.setLastUpdusrId(plusInfo); mjPhoneMemberVO.setPhoneNumber(phoneNo); mjPhoneMemberVO.setUserName(name); mjPhoneMemberVO.setAuthYn("Y"); mjonMsgService.insertSendNumber(mjPhoneMemberVO); model.addAttribute("kmcVO", kmcVO); return "web/user/sendNumberKmcReqPage"; } /** * ARS 인증 발신번호 등록 */ @RequestMapping("/web/user/insertArsSendNumberAjax.do") public ModelAndView insertArsSendNumberAjax(CertVO certVO , HttpServletResponse response , HttpServletRequest request) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO(); mjPhoneMemberVO.setPhmType("01"); mjPhoneMemberVO.setUserId(loginVO.getId()); mjPhoneMemberVO.setPhmAuthType("02"); mjPhoneMemberVO.setFrstRegisterId(loginVO.getId()); mjPhoneMemberVO.setLastUpdusrId(loginVO.getId()); mjPhoneMemberVO.setPhoneNumber(certVO.getSentPhoneNumber()); // 발송 전화번호 mjPhoneMemberVO.setUserName(loginVO.getName()); mjPhoneMemberVO.setAuthYn("Y"); mjonMsgService.insertSendNumber(mjPhoneMemberVO); modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 서류인증(통신사 가입 증명서) 등록 */ @SuppressWarnings("unused") @RequestMapping("/web/user/insertDocumentSendNumberAjax.do") public ModelAndView insertDocumentSendNumberAjax( CertVO certVO , HttpServletResponse response , HttpServletRequest request , final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO(); mjPhoneMemberVO.setOwnerName(certVO.getOwnerName()); //본인인증 명의 이름 세팅 LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); // 발신번호 서류관리 등록 [시작] try { String atchFileId = ""; String isThumbFile = ""; final Map files = multiRequest.getFileMap(); if (!files.isEmpty()){ List result = fileUtil.parseFileInf(files, "CERT_", 0, atchFileId , "", isThumbFile); atchFileId = fileMngService.insertFileInfs(result); certVO.setAtchFileId(atchFileId); //인증서류 데이터 입력하기 certVO.setCertId(egovCertEtcIdGnrService.getNextStringId()); certVO.setUserId(loginVO.getId()); certVO.setFrstRegisterId(loginVO.getId()); certService.insertCertFile(certVO); } // 발신번호 서류관리 등록 [끝] // 발신번호 등록 [시작] mjPhoneMemberVO.setPhmType("01"); mjPhoneMemberVO.setUserId(loginVO.getId()); mjPhoneMemberVO.setCertId(certVO.getCertId()); mjPhoneMemberVO.setPhmAuthType(certVO.getCertType()); //번호 인증 타입 01:휴대폰인증, 03: 서류인증 mjPhoneMemberVO.setFrstRegisterId(loginVO.getId()); mjPhoneMemberVO.setLastUpdusrId(loginVO.getId()); mjPhoneMemberVO.setPhoneNumber(certVO.getSentPhoneNumber()); // 발송 전화번호 if(!"".equals(certVO.getSendPhoneNumber()) && certVO.getSendPhoneNumber() != null) { //230530 추가 - 고객이 인증 후 입력 한 발신번호를 수정하면, 수정 한 발신번호가 등록되어서 인증했을 경우 인증한 번호로 발신번호 등록하게끔 추가 mjPhoneMemberVO.setPhoneNumber(certVO.getSendPhoneNumber()); } mjPhoneMemberVO.setUserName(loginVO.getName()); mjPhoneMemberVO.setSendPhoneNumber(certVO.getSendPhoneNumber()); // 확인 전화번호 mjPhoneMemberVO.setPhmValue(certVO.getPhmValue()); //비고 mjPhoneMemberVO.setNameType(certVO.getNameType()); mjPhoneMemberVO.setDept(certVO.getDept()); mjPhoneMemberVO.setCI(certVO.getCI()); // CI값 mjPhoneMemberVO.setBirthDay(certVO.getBirthDay()); // 생년월일 //개인회원 본인 인증인 경우 핸드폰 번호 즉시 승인해주기 String dept = certVO.getDept(); String nameType = certVO.getNameType(); String certType = certVO.getCertType(); if(StringUtil.isNotEmpty(dept) && StringUtil.isNotEmpty(nameType)) { //회원종류 개인, 인증 종류 휴대폰 본인 인증인경우 즉시 승인 if(dept.equals("p") && nameType.equals("5") && certType.equals("01")) { mjPhoneMemberVO.setAuthYn("Y"); }else if(dept.equals("c") && nameType.equals("2") && certType.equals("01")){ //기업회원 중 대표 이면서 휴대폰 인증인 경우 즉시 승인 mjPhoneMemberVO.setAuthYn("Y"); }else { mjPhoneMemberVO.setAuthYn("H"); } }else { mjPhoneMemberVO.setAuthYn("H"); } mjonMsgService.insertSendNumber(mjPhoneMemberVO); // 발신번호 등록 [끝] // 즉시승인이 아닌경우 관리자에게 이메일 발송 /*if (!mjPhoneMemberVO.getAuthYn().equals("Y")) { String title = "번호관리 > 발신번호 승인 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), title); }*/ modelAndView.addObject("result", "success"); }catch (Exception e) { System.out.println("발신번호 등록 오류 아이디 : " + loginVO.getId()); System.out.println("발신번호 등록 오류 내용 : " + e.getMessage()); modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); return modelAndView; } /** * 발신번호 등록시 승인 심사가 필요한 경우 * 관리자에게 승인 신청 접수 내역을 알리는 * 메일 발송 및 문자 발송을 진행한다. * 2022.09.26 우영두 수정 * * 에러가 발생시 오류 메세지만 로그 기록하고 완료 처리함 * */ try { // 즉시승인이 아닌경우 문자온 법인폰으로 알림 문자 발송하기. if (!mjPhoneMemberVO.getAuthYn().equals("Y")) { String title = "번호관리 > 발신번호 승인 요청"; String userNm = mjPhoneMemberVO.getUserName(); String userId = mjPhoneMemberVO.getUserId(); String phoneNum = mjPhoneMemberVO.getPhoneNumber(); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(userNm, userId, title); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { MjonCommon mjCommon = new MjonCommon(); MjonMsgVO mjonMsgVO = new MjonMsgVO(); //발신번호 등록(관리자에게 알림이기에 발신번호도 법인폰 번호로 한다. 15518011 ) mjonMsgVO.setCallFrom("15518011"); //발송 문자 내용 등록 String smsTxt = "[발신번호 승인 요청] "+ userNm +"(" + userId + ")/발신번호 " + phoneNum + "/승인 요청"; mjonMsgVO.setSmsTxt(smsTxt); //발송 문자 타입(단/장문) 등록 //문자열 길이 체크 해주기 String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 smsTxt = smsTxt.replace("\r\n", "\n"); int FrBytes = smsTxt.getBytes(charset).length; String msgType = "4"; //90바이트를 초과하는 경우 장문으로 발송 if(FrBytes > 90){ msgType = "6"; } mjonMsgVO.setMsgType(msgType); //그림이미지 첨부파일 갯수 0으로 셋팅 mjonMsgVO.setFileCnt("0"); // 문자타입 구분 if (mjonMsgVO.getMsgType().equals("4")) { mjonMsgVO.setMsgDiv("S"); // 단문 } else if (mjonMsgVO.getMsgType().equals("6")) { if (mjonMsgVO.getFileCnt().equals("0")) { mjonMsgVO.setMsgDiv("L"); // 장문 } else { mjonMsgVO.setMsgDiv("P"); // 그림 } } // 문자타입별 대표전송사 정보 MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 // 전송금액 mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 //문자발송을 위한 데이터 셋팅 함수 호출해주기 MjonMsgVO resultCom = mjCommon.getAdminPhoneSendMsgDataComm(mjonMsgVO); //문자온 법인폰으로 문자 발송 처리 mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 발신번호 승인 요청 - " + userNm +"("+ userId + ")"; mjonCommon.sendSimpleSlackMsg(msg); } } } catch (Exception e) { System.out.println("+++++++++++++++++++++++++++++ 발신번호 등록 승인 요청 문자온 법인폰으로 문자 발송 및 이메일 알림 발송 Function Error !!!" + e); } return modelAndView; } /** * 발신번호 삭제 */ @RequestMapping(value = "/web/user/deleteSendNumberAjax.do") public ModelAndView deleteSendNumberAjax(@ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); mjPhoneMemberVO.setUserId(loginVO.getId()); //삭제 전 기본번호 조회 String baseYId = mjonMsgService.selectBaseYPhoneNum(mjPhoneMemberVO); try { mjonMsgService.deleteSendNumberDelete(mjPhoneMemberVO); //삭제 번호가 기본번호 일 시 다른번호 기본번호 설정하기 if(baseYId != null && baseYId.equals(mjPhoneMemberVO.getPhmId())) { mjonMsgService.updateBaseYPhoneNumLately(mjPhoneMemberVO); } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 발신번호 일괄 삭제 */ @RequestMapping(value = "/web/user/deleteSendNumberAllAjax.do") public ModelAndView deleteSendNumberAllAjax(@RequestParam("chk") String[] chk, @ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); mjPhoneMemberVO.setUserId(loginVO.getId()); //삭제 전 기본번호 조회 String baseYId = mjonMsgService.selectBaseYPhoneNum(mjPhoneMemberVO); try { for(String id: chk) { mjPhoneMemberVO.setPhmId(id); mjonMsgService.deleteSendNumberDelete(mjPhoneMemberVO); //삭제 번호가 기본번호 일 시 다른번호 기본번호 설정하기 if(baseYId != null && baseYId.equals(mjPhoneMemberVO.getPhmId())) { mjonMsgService.updateBaseYPhoneNumLately(mjPhoneMemberVO); } } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 발신번호 기본번호 설정 */ @RequestMapping(value = "/web/user/updateSendNumberBaseYnAjax.do") public ModelAndView updateSendNumberBaseYnAjax(@RequestParam("baseId") String baseId, @ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); try { mjPhoneMemberVO.setUserId(loginVO.getId()); mjPhoneMemberVO.setPhmId(baseId); //업데이트문 개발 시작 mjonMsgService.updateSendNumberBaseYn(mjPhoneMemberVO); modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 알림설정 */ @RequestMapping(value="/web/user/notifyManage.do") public String notifyManage( @ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , ModelMap model) throws Exception { LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); model.addAttribute("pageTab", "notifyManage"); return "web/user/notifyManage"; } /** * 발송결과 알림 수정 */ @RequestMapping(value = "/web/user/updateSandResultAjax.do") public ModelAndView updateSandResultAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { if(mberManageVO.getUserTy().equals("tab1")) { userManageService.updateSandResul(mberManageVO); }else if(mberManageVO.getUserTy().equals("tab2")) { userManageService.updateNoticet(mberManageVO); } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 회원탈퇴 본인인증 화면 */ @RequestMapping(value="/web/user/mberSecession.do") public String mberSecession(@ModelAttribute MberManageVO mberManageVO , ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception { LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); model.addAttribute("pageTab", "mberSecession"); mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); String name = userInfo.getMberNm(); // 이름 if(loginVO.getDept().equals("c")) { name = userInfo.getManagerNm(); } KmcCertChecker kmcCertCheck = new KmcCertChecker(); //kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://219.240.88.15:8095"; }else{ serverNm = request.getScheme() + "://www.munjaon.co.kr"; } AuthCertVO certVO = kmcCertCheck.authCertCheckSeven(serverNm + "/web/user/selectMberSecessionAjax.do", name); model.addAttribute("certVO", certVO); return "web/user/mberSecession"; } /** * 회원탈퇴 상세정보 화면 */ @RequestMapping(value="/web/user/mberSecessionInfo.do") public String mberSecessionInfo(@ModelAttribute MberManageVO mberManageVO , RedirectAttributes redirectAttributes , ModelMap model) throws Exception { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); model.addAttribute("loginVO", loginVO); model.addAttribute("pageTab", "mberSecession"); //본인인증 했는지 확인 필요 if(mberManageVO.getKeyCheck() == null || !mberManageVO.getKeyCheck().equals("Y")) { redirectAttributes.addFlashAttribute("message", "본인인증 진행 하세요."); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/user/mberSecession.do"); return redirectUrlMaker.getRedirectUrl(); } mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); return "web/user/mberSecessionInfo"; } /** * 회원탈퇴 */ @RequestMapping(value="/web/user/mberDeleteInfoAjax.do") public ModelAndView mberDeleteInfoAjax(MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); mberManageVO.setMberId(loginVO.getId()); userManageService.updateDeleteInfo(mberManageVO); modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 회원탈퇴 본인인증 */ @RequestMapping("/web/user/selectMberSecessionAjax.do") public String selectMberSecessionAjax( HttpServletRequest request, ModelMap model , @RequestParam Map commandMap , @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception { String errMessage = ""; //에러메세지 String rec_cert = ""; // 결과값(암호화) String certNum = ""; // certNum rec_cert = request.getParameter("rec_cert").trim(); certNum = request.getParameter("certNum").trim(); kmcVO.setRecCert(rec_cert); kmcVO.setCertNum(certNum); // 파라미터 유효성 검증 if( rec_cert.length() == 0 || certNum.length() == 0 ){ errMessage = "비정상"; return returnPage(model , errMessage , kmcVO) ; } // 변수선언 -------------------------------------------------------------------------------------------------------- String k_certNum = ""; // 파라미터로 수신한 요청번호 k_certNum = certNum; String date = ""; // 요청일시 String CI = ""; // 연계정보(CI) String DI = ""; // 중복가입확인정보(DI) String phoneNo = ""; // 휴대폰번호 String phoneCorp = ""; // 이동통신사 String birthDay = ""; // 생년월일 String gender = ""; // 성별 String nation = ""; // 내국인 String name = ""; // 성명 String M_name = ""; // 미성년자 성명 String M_birthDay = ""; // 미성년자 생년월일 String M_Gender = ""; // 미성년자 성별 String M_nation = ""; // 미성년자 내외국인 String result = ""; // 결과값 String certMet = ""; // 인증방법 String ip = ""; // ip주소 String plusInfo = ""; String encPara = ""; String encMsg1 = ""; String encMsg2 = ""; String msgChk = ""; com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager(); //02. 1차 복호화 //수신된 certNum를 이용하여 복호화 rec_cert = seed.getDec(rec_cert, k_certNum); //03. 1차 파싱 int inf1 = rec_cert.indexOf("/",0); int inf2 = rec_cert.indexOf("/",inf1+1); encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터 encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값 //04. 위변조 검증 encMsg2 = seed.getMsg(encPara); kmcVO.setEncMsg2(encMsg2); if(encMsg2.equals(encMsg1)){ msgChk="Y"; } if(!"Y".equals(msgChk)) { errMessage = "비정상접근입니다."; return returnPage(model , errMessage , kmcVO) ; } //05. 2차 복호화 rec_cert = seed.getDec(encPara, k_certNum); kmcVO.setRecCert(rec_cert); //06. 2차 파싱 int info1 = rec_cert.indexOf("/",0); int info2 = rec_cert.indexOf("/",info1+1); int info3 = rec_cert.indexOf("/",info2+1); int info4 = rec_cert.indexOf("/",info3+1); int info5 = rec_cert.indexOf("/",info4+1); int info6 = rec_cert.indexOf("/",info5+1); int info7 = rec_cert.indexOf("/",info6+1); int info8 = rec_cert.indexOf("/",info7+1); int info9 = rec_cert.indexOf("/",info8+1); int info10 = rec_cert.indexOf("/",info9+1); int info11 = rec_cert.indexOf("/",info10+1); int info12 = rec_cert.indexOf("/",info11+1); int info13 = rec_cert.indexOf("/",info12+1); int info14 = rec_cert.indexOf("/",info13+1); int info15 = rec_cert.indexOf("/",info14+1); int info16 = rec_cert.indexOf("/",info15+1); int info17 = rec_cert.indexOf("/",info16+1); int info18 = rec_cert.indexOf("/",info17+1); certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum); date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date); CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI); phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo); phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp); birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay); gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender); nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation); name = rec_cert.substring(info8+1,info9); kmcVO.setName(name); result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result); certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet); ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip); M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name); M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay); M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender); M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation); plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo); DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI); //07. CI, DI 복호화 CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); if("Y".equals(result)) { } //-------------------------------------------------------------- String regex = ""; if( certNum.length() == 0 || certNum.length() > 40){ errMessage = "요청번호 비정상."; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( date.length() != 14 || !paramChk(regex, date) ){ errMessage = "요청일시"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( certMet.length() != 1 || !paramChk(regex, certMet) ){ errMessage = "본인인증방법 비정상" + certMet; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){ errMessage = "휴대폰번호 비정상" ; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){ errMessage = "이동통신사 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){ errMessage = "생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( gender.length() != 1 || !paramChk(regex, gender) ){ errMessage = "성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( nation.length() != 1 || !paramChk(regex, nation) ){ errMessage = "내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-�R.,-]*"; if( name.length() > 60 || !paramChk(regex, name) ){ errMessage = "성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( result.length() != 1 || !paramChk(regex, result) ){ errMessage = "결과값 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-?.,-]*"; if( M_name.length() != 0 ){ if( M_name.length() > 60 || !paramChk(regex, M_name) ){ errMessage = "미성년자 성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_birthDay.length() != 0 ){ if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){ errMessage = "미성년자 생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_Gender.length() != 0 ){ if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){ errMessage = "미성년자 성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_nation.length() != 0 ){ if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){ errMessage = "미성년자 내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } } MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO(); mjPhoneMemberVO.setUserId(plusInfo); mjPhoneMemberVO.setPhmType("01"); mjPhoneMemberVO.setPhmAuthType("01"); mjPhoneMemberVO.setFrstRegisterId(plusInfo); mjPhoneMemberVO.setLastUpdusrId(plusInfo); mjPhoneMemberVO.setPhoneNumber(phoneNo); mjPhoneMemberVO.setUserName(name); mjPhoneMemberVO.setAuthYn("Y"); mjonMsgService.insertSendNumber(mjPhoneMemberVO); model.addAttribute("kmcVO", kmcVO); return "web/user/mberSecessionKmcReqPage"; } // 파라미터 유효성 검증 -------------------------------------------- public Boolean paramChk(String patn, String param){ Pattern pattern = Pattern.compile(patn); Matcher matcher = pattern.matcher(param); boolean b = matcher.matches(); return b; } // 파라미터 유효성 검증 -------------------------------------------- public String returnPage(ModelMap model , String errMessage , KmcVO kmcVO){ kmcVO.setErrMessage(errMessage); model.addAttribute("kmcVO", kmcVO); return "web/cop/nicepay/payRequestAjax"; } public Boolean findIdKmcCheck(String DI, String Name, String PhoneNo) throws Exception { UserManageVO userManageVO = new UserManageVO(); userManageVO.setEmplyrNm(Name); userManageVO.setMoblphonNo(PhoneNo); userManageVO.setMblDn(DI); List usedNmList = userManageService.selectUserIdAjax(userManageVO); boolean TorF = usedNmList.size() > 0 ? true : false; return TorF; } /** * KISA 신고 목록 */ @RequestMapping(value="/web/user/kisaReport.do") public String kisaReport( @ModelAttribute KisaVO kisaVO , HttpServletRequest request , ModelMap model) throws Exception { LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO == null) { return "redirect:/web/user/login/login.do"; } model.addAttribute("loginVO", loginVO); kisaVO.setMberId(loginVO.getId()); MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); model.addAttribute("userInfo", userInfo); model.addAttribute("pageTab", "kisaReport"); // List Start if(kisaVO.getPageUnit() != 10) { kisaVO.setPageUnit(kisaVO.getPageUnit()); } /** pageing */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(kisaVO.getPageIndex()); paginationInfo.setRecordCountPerPage(kisaVO.getPageUnit()); paginationInfo.setPageSize(kisaVO.getPageSize()); kisaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); kisaVO.setLastIndex(paginationInfo.getLastRecordIndex()); kisaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); if("".equals(kisaVO.getSearchSortCnd())){ //최초조회시 최신것 조회List kisaVO.setSearchSortCnd("kisaId"); kisaVO.setSearchSortOrd("desc"); } List kisaList = kisaService.selectKisaList(kisaVO); int totCnt = 0; if(kisaList.size() > 0) { totCnt = kisaList.get(0).getTotcnt(); } model.addAttribute("kisaList", kisaList); paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); return "web/user/kisaReport"; } /** * KISA 신고 상세 */ @RequestMapping(value="/web/user/kisaReportDetailAjax.do") public ModelAndView kisaReportDetailAjax(@ModelAttribute KisaVO kisaVO, ModelMap model) throws Exception{ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); boolean isSuccess = true; String msg = ""; List fileList = null; try { kisaVO = kisaService.selectKisaDetail(kisaVO); if(kisaVO.getAtchFileId() !=null) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(kisaVO.getAtchFileId()); fileList = fileService.selectFileInfs(fileVO); } } catch(Exception e) { isSuccess = false; msg = e.getMessage(); } modelAndView.addObject("isSuccess", isSuccess); modelAndView.addObject("msg", msg); modelAndView.addObject("result", kisaVO); model.addAttribute("fileList", fileList); return modelAndView; } /** * KISA 서명자료(첨부파일) 목록 */ @RequestMapping(value="/web/user/kisaSignFileListAjax.do") public ModelAndView kisaSignFileListAjax(@ModelAttribute KisaVO kisaVO, ModelMap model) throws Exception{ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); boolean isSuccess = true; String msg = ""; List fileList = null; try { kisaVO = kisaService.selectKisaDetail(kisaVO); if(kisaVO.getAtchFileId2() !=null) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(kisaVO.getAtchFileId2()); fileList = fileService.selectFileInfs(fileVO); } } catch(Exception e) { isSuccess = false; msg = e.getMessage(); } modelAndView.addObject("isSuccess", isSuccess); modelAndView.addObject("msg", msg); model.addAttribute("fileList", fileList); return modelAndView; } /** * KISA 서명 파일업로드 */ @RequestMapping(value="/web/user/kisaSignFileSaveAjax.do") public ModelAndView kisaSignFileSaveAjax(final MultipartHttpServletRequest multiRequest , KisaVO kisaVO , RedirectAttributes redirectAttributes , HttpServletRequest request) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); kisaVO = kisaService.selectKisaDetail(kisaVO); String atchFileId2 = kisaVO.getAtchFileId2(); final Map files = multiRequest.getFileMap(); if (!files.isEmpty()) { if ("".equals(atchFileId2)) { List result = fileUtil.parseFileInf(files, "KISA_SIGN_", 0, atchFileId2, "", ""); atchFileId2 = fileMngService.insertFileInfs(result); kisaVO.setAtchFileId2(atchFileId2); } else { FileVO fvo = new FileVO(); fvo.setAtchFileId(atchFileId2); int cnt = fileMngService.getMaxFileSN(fvo); List result = fileUtil.parseFileInf(files, "KISA_", cnt, atchFileId2, "", ""); fileMngService.updateFileInfs(result); } } kisaVO.setKisaReceptState("4"); // KISA 소명자료 제출 완료 kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close kisaService.updateKisa(kisaVO); modelAndView.addObject("result", "success"); return modelAndView; } /** * KISA 서명하기 */ @RequestMapping(value="/web/user/kisaSignSaveAjax.do") public ModelAndView kisaSignSaveAjax(final MultipartHttpServletRequest multiRequest , KisaVO kisaVO , RedirectAttributes redirectAttributes , HttpServletRequest request) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); boolean isSuccess = true; String msg = ""; // 날짜 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date now = new Date(); // 서명정보 String kisaSignNm = ""; String kisaSignPhoneNo = ""; String kisaSignPnttm = ""; try { LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(loginVO != null) { // 서명정보 kisaSignNm = loginVO.getName(); kisaSignPhoneNo = loginVO.getMoblphonNo(); kisaSignPnttm = sdf1.format(now); for(String kisaId : kisaVO.getKisaIds()) { kisaVO.setKisaId(kisaId); kisaVO = kisaService.selectKisaDetail(kisaVO); // 업데이트 kisaVO.setKisaSignNm(kisaSignNm); kisaVO.setKisaSignPhoneNo(kisaSignPhoneNo); kisaVO.setKisaSignPnttm(kisaSignPnttm); if (kisaVO.getKisaReportState().equals("1")) { // KISA 서명 요청 kisaVO.setKisaReceptState("2"); // KISA 서명 서명 완료 kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close } else if (kisaVO.getKisaReportState().equals("3")) { // 당사경고 서명 요청 kisaVO.setKisaReceptState("2"); // KISA 서명 서명 완료 kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close } else { // KISA 소명자료 요청 kisaVO.setKisaReceptState("3"); // KISA 소명자료 미제출 } kisaService.updateKisa(kisaVO); } } else { isSuccess = false; msg = "로그인후 이용해주세요."; } } catch(Exception e) { isSuccess = false; msg = e.getMessage(); } modelAndView.addObject("isSuccess", isSuccess); modelAndView.addObject("msg", msg); return modelAndView; } @RequestMapping(value = "/web/user/selectRejectAjax.do") public ModelAndView selectRejectAjax(@ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); try { MjPhoneMemberVO rejectInfo = mjonMsgService.selectSendPhoneNumberByPhmId(mjPhoneMemberVO.getPhmId()); modelAndView.addObject("rejectInfo", rejectInfo); modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 회원정보 조회 휴대폰 인증 */ @RequestMapping("/web/user/selectSecurityAuthn.do") public String selectSecurityAuthn( HttpServletRequest request, ModelMap model , @RequestParam Map commandMap , @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception { //개인회원일 시 mblDn 비교 후 본인 명의 휴대폰만 변경 가능하게끔 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String mblDn = userManageService.selectUserMblDnById(loginVO.getId()); model.addAttribute("loginVO", loginVO); String errMessage = ""; //에러메세지 String rec_cert = ""; // 결과값(암호화) String certNum = ""; // certNum rec_cert = request.getParameter("rec_cert").trim(); certNum = request.getParameter("certNum").trim(); kmcVO.setRecCert(rec_cert); kmcVO.setCertNum(certNum); // 파라미터 유효성 검증 if( rec_cert.length() == 0 || certNum.length() == 0 ){ errMessage = "비정상"; return returnPage(model , errMessage , kmcVO) ; } // 변수선언 -------------------------------------------------------------------------------------------------------- String k_certNum = ""; // 파라미터로 수신한 요청번호 k_certNum = certNum; String date = ""; // 요청일시 String CI = ""; // 연계정보(CI) String DI = ""; // 중복가입확인정보(DI) String phoneNo = ""; // 휴대폰번호 String phoneCorp = ""; // 이동통신사 String birthDay = ""; // 생년월일 String gender = ""; // 성별 String nation = ""; // 내국인 String name = ""; // 성명 String M_name = ""; // 미성년자 성명 String M_birthDay = ""; // 미성년자 생년월일 String M_Gender = ""; // 미성년자 성별 String M_nation = ""; // 미성년자 내외국인 String result = ""; // 결과값 String certMet = ""; // 인증방법 String ip = ""; // ip주소 String plusInfo = ""; String encPara = ""; String encMsg1 = ""; String encMsg2 = ""; String msgChk = ""; com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager(); //02. 1차 복호화 //수신된 certNum를 이용하여 복호화 rec_cert = seed.getDec(rec_cert, k_certNum); //03. 1차 파싱 int inf1 = rec_cert.indexOf("/",0); int inf2 = rec_cert.indexOf("/",inf1+1); encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터 encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값 //04. 위변조 검증 encMsg2 = seed.getMsg(encPara); kmcVO.setEncMsg2(encMsg2); if(encMsg2.equals(encMsg1)){ msgChk="Y"; } if(!"Y".equals(msgChk)) { errMessage = "비정상접근입니다."; return returnPage(model , errMessage , kmcVO) ; } //05. 2차 복호화 rec_cert = seed.getDec(encPara, k_certNum); kmcVO.setRecCert(rec_cert); //06. 2차 파싱 int info1 = rec_cert.indexOf("/",0); int info2 = rec_cert.indexOf("/",info1+1); int info3 = rec_cert.indexOf("/",info2+1); int info4 = rec_cert.indexOf("/",info3+1); int info5 = rec_cert.indexOf("/",info4+1); int info6 = rec_cert.indexOf("/",info5+1); int info7 = rec_cert.indexOf("/",info6+1); int info8 = rec_cert.indexOf("/",info7+1); int info9 = rec_cert.indexOf("/",info8+1); int info10 = rec_cert.indexOf("/",info9+1); int info11 = rec_cert.indexOf("/",info10+1); int info12 = rec_cert.indexOf("/",info11+1); int info13 = rec_cert.indexOf("/",info12+1); int info14 = rec_cert.indexOf("/",info13+1); int info15 = rec_cert.indexOf("/",info14+1); int info16 = rec_cert.indexOf("/",info15+1); int info17 = rec_cert.indexOf("/",info16+1); int info18 = rec_cert.indexOf("/",info17+1); certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum); date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date); CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI); phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo); phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp); birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay); gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender); nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation); name = rec_cert.substring(info8+1,info9); kmcVO.setName(name); result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result); certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet); ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip); M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name); M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay); M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender); M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation); plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo); DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI); //07. CI, DI 복호화 CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); if("Y".equals(result)) { } //-------------------------------------------------------------- String regex = ""; if( certNum.length() == 0 || certNum.length() > 40){ errMessage = "요청번호 비정상."; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( date.length() != 14 || !paramChk(regex, date) ){ errMessage = "요청일시"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( certMet.length() != 1 || !paramChk(regex, certMet) ){ errMessage = "본인인증방법 비정상" + certMet; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){ errMessage = "휴대폰번호 비정상" ; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){ errMessage = "이동통신사 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){ errMessage = "생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( gender.length() != 1 || !paramChk(regex, gender) ){ errMessage = "성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[0-9]*"; if( nation.length() != 1 || !paramChk(regex, nation) ){ errMessage = "내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-�R.,-]*"; if( name.length() > 60 || !paramChk(regex, name) ){ errMessage = "성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[A-Z]*"; if( result.length() != 1 || !paramChk(regex, result) ){ errMessage = "결과값 비정상"; return returnPage(model , errMessage , kmcVO) ; } regex = "[\\sA-Za-z가-?.,-]*"; if( M_name.length() != 0 ){ if( M_name.length() > 60 || !paramChk(regex, M_name) ){ errMessage = "미성년자 성명 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_birthDay.length() != 0 ){ if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){ errMessage = "미성년자 생년월일 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_Gender.length() != 0 ){ if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){ errMessage = "미성년자 성별 비정상"; return returnPage(model , errMessage , kmcVO) ; } } regex = "[0-9]*"; if( M_nation.length() != 0 ){ if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){ errMessage = "미성년자 내/외국인 비정상"; return returnPage(model , errMessage , kmcVO) ; } } //KMC 본인인증 로그 AuthCertVO certVO = new AuthCertVO(); certVO.setMberId(kmcVO.getPlusInfo()); certVO.setCertNum(kmcVO.getCertNum()); certVO.setCertDate(kmcVO.getDate()); certVO.setCertDi(kmcVO.getDI()); certVO.setCertPhone(kmcVO.getPhoneNo()); certVO.setCertNation(kmcVO.getNation()); certVO.setCertName(kmcVO.getName()); certVO.setCertResult(kmcVO.getResult()); certVO.setCertType("KMC_회원정보 변경"); certVO.setCertIpaddr(kmcVO.getIp()); certVO.setBirthDay(kmcVO.getBirthDay()); certVO.setSexdstnCode(kmcVO.getGender()); model.addAttribute("kmcVO", kmcVO); return "web/user/securityAuthnPage"; } }