diff --git a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java index 16e0c9c8..39af3de7 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java +++ b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java @@ -94,6 +94,7 @@ public interface MjonMsgDataService { //시스템 문자발송 로그 조회 public SendLogVO selectSysMsgLog(SendLogVO sendLogVO) throws Exception; + public SendLogVO selectSysMsgLogCheck(SendLogVO sendLogVO) throws Exception; //주소록 그룹의 저장 주소 리스트 불러오기 public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception; diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index 7177d40f..3701a684 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -202,6 +202,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { return (SendLogVO) select("mjonMsgDAO.selectSysMsgLog",sendLogVO); } + public SendLogVO selectSysMsgLogCheck(SendLogVO sendLogVO) throws Exception{ + return (SendLogVO) select("mjonMsgDAO.selectSysMsgLogCheck",sendLogVO); + } + @SuppressWarnings("unchecked") public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception{ diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index 14834912..cd307bfe 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -2092,6 +2092,11 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return mjonMsgDataDAO.selectSysMsgLog(sendLogVO); } + @Override + public SendLogVO selectSysMsgLogCheck(SendLogVO sendLogVO) throws Exception { + return mjonMsgDataDAO.selectSysMsgLogCheck(sendLogVO); + } + public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception{ return mjonMsgDataDAO.selectMsgAddrListAjax(addrVO); diff --git a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java index 33526052..854cd46e 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java @@ -1463,7 +1463,596 @@ public class EgovLoginController { * @return result - 로그인결과(세션정보) * @exception Exception */ - @RequestMapping(value = "/web/user/login/actionSecurityLogin.do") + @RequestMapping(value = "/web/user/login/actionSecurityLogin_bak_00.do") + public String selectActionSecurityLoginWeb_bak(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, + HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, + HttpSession session, RedirectAttributes redirectAttributes) throws Exception { + + String userIp = EgovClntInfo.getClntIP(request); + HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setAccessIp(userIp); + hackIpVO.setBlockYn("Y"); + if (null != hackIpService.selectHackIpVO(hackIpVO)) { + String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; + redirectAttributes.addFlashAttribute("message", message); + return "redirect:/"; + } + + /*ScriptEngineManager engine = new ScriptEngineManager();*/ + + loginVO.setUserSe("USR"); + // 로그인 정보 check + + if (loginVO.getId() == null || loginVO.getPassword() == null) { + // 회원가입 시 로그인 처리 + LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); + if (pLoginVO == null) { + // RSA 키 생성 + initRsa(request); + /* return "redirect:/web/user/login/login.do"; */ + return "redirect:/"; + } else { + loginVO.setId(pLoginVO.getId()); + loginVO.setPassword(pLoginVO.getPassword()); + loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); + loginVO.setMessage(pLoginVO.getMessage()); + } + } + + // 1. 일반 로그인 처리 + PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); + if (privateKey == null) { + initRsa(request); + /*return "web/site/login/EgovLoginGnrlUsr";*/ + String message = "아이디와 비밀번호를 확인해주세요."; + redirectAttributes.addFlashAttribute("message", message); + System.out.println("======================================================"); + System.out.println("= RSA privateKey is null ="); + System.out.println("======================================================"); + return "redirect:/web/main/mainPage.do"; + } + + LoginVO resultVO; + // 복호화 + String id = ""; + try { + //아이디 복호화 후 소문자 변환 + id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); + } catch (Exception e) { + initRsa(request); + // return "redirect:/web/user/login/login.do"; + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + redirectAttributes.addFlashAttribute("fail", true); + return "redirect:/web/user/login/login.do"; + } + return "redirect:/"; + + } + String password = decryptRsa(privateKey, loginVO.getPassword()); + loginVO.setId(id); + loginVO.setIp(EgovClntInfo.getClntIP(request)); + loginVO.setPassword(password); + loginVO.setUserSe("GNR"); + loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + + //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 + //암호화 2번 방지를 위한 LoginVO 생성 + LoginVO loginCmpChkVO = new LoginVO(); + loginCmpChkVO.setId(id); + loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); + loginCmpChkVO.setPassword(password); + loginCmpChkVO.setUserSe("GNR"); + loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 + LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); + if(null != cmpHstResultVO.getId()) { + //기업회원 정보 마지막 내역 조회 + MberManageVO mberManageVO = new MberManageVO(); + mberManageVO.setMberId(loginVO.getId()); + MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); + if(null != cmpChangeManageVO) { + if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 + if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 + redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); + //addFlashAttribute 일회성으로 인하여 membershipAttachDocBefore.do 이동 후 + //membershipAttachDoc.do로 바로 submit하여 새로고침 시 정보 유지되게 끔 처리 + return "redirect:/web/user/login/membershipAttachDocBefore.do"; + } + } + } + } + //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 + LoginVO loginSmiChkVO = new LoginVO(); + loginSmiChkVO.setId(id); + loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); + loginSmiChkVO.setPassword(password); + loginSmiChkVO.setUserSe("GNR"); + loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 + LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); + if(null != smiResultVO.getId()) { + MberManageVO spamMberManageVO = new MberManageVO(); + spamMberManageVO.setMberId(loginVO.getId()); + MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); + if(null != spamMemberInfoVO) { + redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); + return "redirect:/web/user/login/loginRestrictionUseBefore.do"; + } + } + resultVO = loginService.actionLogin(loginVO); + LoginVO passMissVO = loginService.selectPassMiss(loginVO); + + String alertMessage = ""; + if (!"admin".equals(loginVO.getId())) { + //아이디가 존재 + if(passMissVO != null) { + // 로그인 실패 ( + if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { + loginService.updatePassMissPlus(loginVO); + alertMessage = egovMessageSource.getMessage("fail.common.login"); + + // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 + /// HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setHackUserId(loginVO.getId()); + hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); + hackIpService.insertHackIp(hackIpVO); + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + redirectAttributes.addFlashAttribute("fail", true); + return "redirect:/web/user/login/login.do"; + } + + return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); + } else { + if (passMissVO.getPassMiss() >= 5) { + alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; + return goUserPassMissPage(redirectAttributes, loginVO, request, model, alertMessage); + } /* + * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = + * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, + * request, model, alertMessage); }else + * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = + * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, + * request, model, alertMessage); } + */ + loginService.updatePassMissReset(loginVO); + } + } + //아이디 미존재 + else { + alertMessage = egovMessageSource.getMessage("fail.common.login"); + + // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 + /// HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setHackUserId(loginVO.getId()); + hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); + hackIpService.insertHackIp(hackIpVO); + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + redirectAttributes.addFlashAttribute("fail", true); + return "redirect:/web/user/login/login.do"; + } + + return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); + } + } + + + /* 일시 : 2023.07.26 + * 내용 : 로그인시 휴먼고객 redirect 기능 추가 + * 작업자 : 원영현 과장 + */ + + if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { + + return "redirect:/web/user/humanPage.do"; + } + + + + + boolean loginPolicyYn = true; + + // 접속IP + // userIp = EgovClntInfo.getClntIP(request); + + // resultVO.siteId 의 각 로그인 ip를 조회함 + if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { + // 세션에다 ip 등록 + resultVO.setIp(userIp); + // 2. spring security 연동 + request.getSession().setAttribute("LoginVO", resultVO); + UsernamePasswordAuthenticationFilter springSecurity = null; + ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); + Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); + + if (beans.size() > 0) { + springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; + springSecurity.setUsernameParameter("egov_security_username"); + springSecurity.setPasswordParameter("egov_security_password"); + springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST")); + } else { + throw new IllegalStateException("No AuthenticationProcessingFilter"); + } + + springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); + { // 관리자 로그인 log 저장 + String uniqId = ""; + String ip = ""; + + /* Authenticated */ + LoginLog loginLog = new LoginLog(); + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated.booleanValue()) { + LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + uniqId = user.getUniqId(); + ip = EgovClntInfo.getClntIP(request); + + HttpSession httpSession = request.getSession(true); + { + List siteManageList = new ArrayList(); + SiteManagerVO siteManagerVO = new SiteManagerVO(); + siteManagerVO.setFirstIndex(0); + siteManagerVO.setRecordCountPerPage(100); + siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); + httpSession.setAttribute("siteManageList", siteManageList); + httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 + httpSession.setAttribute("esntlId", user.getPassword()); + + // 최근검색어 조회 후 세션에 넣어줌 + /* + * UserManageVO tempUserManageVO = new UserManageVO(); + * tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO = + * userManageService.selectRecentSearchWord(tempUserManageVO); + * + * List lisRecentSearch = new ArrayList(); if(null != + * tempUserManageVO){ //ArrayList 로 세션 저장 + * Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split("," + * )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ; + */ + } + } + /* + * loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip); + * loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N"); + * loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("U"); //사용자 + * loginLog.setDeviceType("P"); //PC loginLog.setProgrmFileNm("adminLogin"); + * loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog); + */ + + loginVO.getId(); + loginVO.getIp(); + loginVO.setMessage("로그인 성공되었습니다."); + loginVO.setLoginYn("Y"); + loginService.insertActionLoginLog(loginVO); + } + + // 등급제 Start + // 회원별 등급 적용 + MberGrdVO mberGrdVO = new MberGrdVO(); + mberGrdVO.setMberId(loginVO.getId()); + mberGrdVO.setAmt("0"); + mberGrdVO.setMoid(""); + mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO); + // End + + // 이벤트 결제 바로가기 로직 체크 Start + String goEventPay = (String) commandMap.get("goEventPay"); + System.out.println("goEventPay : " + goEventPay); + if (null != goEventPay && goEventPay.equals("Y")) { + // 이벤트 결제 바로가기 + if (goEventPay(loginVO) == true) { + loginVO.setBeforeUrl("/web/event/member/pay/PayView.do"); + } + } + // End + + String beforeUrl = (String) commandMap.get("beforeUrl"); + + // 로그인 전 URL 호출 시 + if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) { + request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl()); + // 회원가입 시 메세지 처리 + if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) { + request.getSession().setAttribute("registMessage", loginVO.getMessage()); + } + } + + // 개인키 삭제 + // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. + request.getSession().setAttribute("pageType", "web"); + + return "blank"; // 성공 시 페이지.. (redirect 불가) + + // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. + // return "forward:/web/main/mainPage.do"; + } else { + String message = egovMessageSource.getMessage("fail.common.login"); + redirectAttributes.addFlashAttribute("beforeUrl", loginVO.getBeforeUrl()); + redirectAttributes.addFlashAttribute("message", message); + return "redirect:/"; + } + } + + /** + * @Method Name : selectUserSttusAjax + * @작성일 : 2024. 3. 27. + * @작성자 : WYH + * @변경이력 : + * @Method 설명 : 회원상태 조회 (Y:일반회원, B:이용정지 회원, N:탈퇴회원) + */ + /* + @RequestMapping(value = { "/web/user/login/actionSecurityLoginAjax.do" }) + public ModelAndView actionSecurityLoginAjax(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, + HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, + HttpSession session, RedirectAttributes redirectAttributes) throws Exception { + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + String p_id = ""; + String p_pwd = ""; + + try { + //id, pwd 로그인 하고 결과와 hp 번호를 돌려주면 됨 + p_id = request.getParameter("id"); + p_pwd = request.getParameter("password"); + + + + String userId = mjonMsgVO.getUserId(); + String userSttus = userManageService.selectUserStatusInfoCheck(userId); + + modelAndView.addObject("status", "success"); + modelAndView.addObject("userSttus", userSttus); + + } catch (Exception e) { + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", "인증에 실패하였습니다."); + } + + return modelAndView; + } + */ + + @RequestMapping(value = "/web/user/login/actionSecurityLoginBeforeHpAjax.do") + public ModelAndView selectActionSecurityLoginWebBeforeHp(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, + HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, + HttpSession session, RedirectAttributes redirectAttributes) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + String userIp = EgovClntInfo.getClntIP(request); + HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setAccessIp(userIp); + hackIpVO.setBlockYn("Y"); + if (null != hackIpService.selectHackIpVO(hackIpVO)) { + String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + + } + + /*ScriptEngineManager engine = new ScriptEngineManager();*/ + + loginVO.setUserSe("USR"); + // 로그인 정보 check + + if (loginVO.getId() == null || loginVO.getPassword() == null) { + // 회원가입 시 로그인 처리 + LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); + if (pLoginVO == null) { + // RSA 키 생성 + initRsa(request); + /* return "redirect:/web/user/login/login.do"; */ + //return "redirect:/"; + + String message = "로그인 실패했습니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + + } else { + loginVO.setId(pLoginVO.getId()); + loginVO.setPassword(pLoginVO.getPassword()); + loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); + loginVO.setMessage(pLoginVO.getMessage()); + } + } + + // 1. 일반 로그인 처리 + PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); + if (privateKey == null) { + initRsa(request); + /*return "web/site/login/EgovLoginGnrlUsr";*/ + String message = "아이디와 비밀번호를 확인해주세요."; + redirectAttributes.addFlashAttribute("message", message); + System.out.println("======================================================"); + System.out.println("= RSA privateKey is null ="); + System.out.println("======================================================"); + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + + } + + LoginVO resultVO; + // 복호화 + String id = ""; + try { + //아이디 복호화 후 소문자 변환 + id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); + } catch (Exception e) { + initRsa(request); + + String message = "로그인 실패했습니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + + } + String password = decryptRsa(privateKey, loginVO.getPassword()); + loginVO.setId(id); + loginVO.setIp(EgovClntInfo.getClntIP(request)); + loginVO.setPassword(password); + loginVO.setUserSe("GNR"); + loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + + //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 + //암호화 2번 방지를 위한 LoginVO 생성 + LoginVO loginCmpChkVO = new LoginVO(); + loginCmpChkVO.setId(id); + loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); + loginCmpChkVO.setPassword(password); + loginCmpChkVO.setUserSe("GNR"); + loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 + LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); + if(null != cmpHstResultVO.getId()) { + //기업회원 정보 마지막 내역 조회 + MberManageVO mberManageVO = new MberManageVO(); + mberManageVO.setMberId(loginVO.getId()); + MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); + if(null != cmpChangeManageVO) { + if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 + if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 + + String message = "기업회원 신청 또는 반려상태입니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + + } + } + } + } + //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 + LoginVO loginSmiChkVO = new LoginVO(); + loginSmiChkVO.setId(id); + loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); + loginSmiChkVO.setPassword(password); + loginSmiChkVO.setUserSe("GNR"); + loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 + LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); + if(null != smiResultVO.getId()) { + MberManageVO spamMberManageVO = new MberManageVO(); + spamMberManageVO.setMberId(loginVO.getId()); + MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); + if(null != spamMemberInfoVO) { + String message = "신청대기중인 상태입니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + } + } + resultVO = loginService.actionLogin(loginVO); + LoginVO passMissVO = loginService.selectPassMiss(loginVO); + + String alertMessage = ""; + if (!"admin".equals(loginVO.getId())) { + //아이디가 존재 + if(passMissVO != null) { + // 로그인 실패 ( + if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { + loginService.updatePassMissPlus(loginVO); + alertMessage = egovMessageSource.getMessage("fail.common.login"); + + // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 + /// HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setHackUserId(loginVO.getId()); + hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); + hackIpService.insertHackIp(hackIpVO); + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + String message = "로그인 실패했습니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + } + + String message = "로그인 실패했습니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + + } else { + if (passMissVO.getPassMiss() >= 5) { + //alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; + String message = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + } /* + * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = + * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, + * request, model, alertMessage); }else + * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = + * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, + * request, model, alertMessage); } + */ + loginService.updatePassMissReset(loginVO); + } + } + //아이디 미존재 + else { + alertMessage = egovMessageSource.getMessage("fail.common.login"); + + // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 + /// HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setHackUserId(loginVO.getId()); + hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); + hackIpService.insertHackIp(hackIpVO); + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + String message = "로그인 실패했습니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + } + + String message = "로그인 실패했습니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + } + } + + + /* 일시 : 2023.07.26 + * 내용 : 로그인시 휴먼고객 redirect 기능 추가 + * 작업자 : 원영현 과장 + */ + + if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { + + String message = "휴면계정입니다."; + + modelAndView.addObject("status", "fail"); + modelAndView.addObject("msg", message); + return modelAndView; + } + + String message = "로그인 성공했습니다."; + + modelAndView.addObject("status", "success"); + modelAndView.addObject("msg", message); + modelAndView.addObject("data", resultVO); + + return modelAndView; + + + } + + @RequestMapping(value = "/web/user/login/actionSecurityLogin_ori_00.do") public String selectActionSecurityLoginWeb(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { @@ -1772,6 +2361,340 @@ public class EgovLoginController { } } + + + @RequestMapping(value = "/web/user/login/actionSecurityLoginAfterHp.do") + public String selectActionSecurityLoginWebAfterHp(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, + HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, + HttpSession session, RedirectAttributes redirectAttributes) throws Exception { + + String userIp = EgovClntInfo.getClntIP(request); + HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setAccessIp(userIp); + hackIpVO.setBlockYn("Y"); + if (null != hackIpService.selectHackIpVO(hackIpVO)) { + String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; + redirectAttributes.addFlashAttribute("message", message); + return "redirect:/"; + } + + /*ScriptEngineManager engine = new ScriptEngineManager();*/ + + loginVO.setUserSe("USR"); + // 로그인 정보 check + + if (loginVO.getId() == null || loginVO.getPassword() == null) { + // 회원가입 시 로그인 처리 + LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); + if (pLoginVO == null) { + // RSA 키 생성 + initRsa(request); + /* return "redirect:/web/user/login/login.do"; */ + return "redirect:/"; + } else { + loginVO.setId(pLoginVO.getId()); + loginVO.setPassword(pLoginVO.getPassword()); + loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); + loginVO.setMessage(pLoginVO.getMessage()); + } + } + + // 1. 일반 로그인 처리 + PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); + if (privateKey == null) { + initRsa(request); + /*return "web/site/login/EgovLoginGnrlUsr";*/ + String message = "아이디와 비밀번호를 확인해주세요."; + redirectAttributes.addFlashAttribute("message", message); + System.out.println("======================================================"); + System.out.println("= RSA privateKey is null ="); + System.out.println("======================================================"); + return "redirect:/web/main/mainPage.do"; + } + + LoginVO resultVO; + // 복호화 + String id = ""; + try { + //아이디 복호화 후 소문자 변환 + id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); + } catch (Exception e) { + initRsa(request); + // return "redirect:/web/user/login/login.do"; + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + redirectAttributes.addFlashAttribute("fail", true); + return "redirect:/web/user/login/login.do"; + } + return "redirect:/"; + + } + + + //핸드폰 인증번호 확인 + String s_hp = request.getParameter("hp"); + String s_num = request.getParameter("num"); + + System.out.println(s_hp); + System.out.println(s_num); + System.out.println("s_num=============="); + + SendLogVO sendLogVO = new SendLogVO(); + sendLogVO.setSendId(id); + sendLogVO.setReceive(s_hp); + sendLogVO.setCheckNo(s_num); + + sendLogVO = mjonMsgDataService.selectSysMsgLogCheck(sendLogVO); + + if (sendLogVO==null) { + redirectAttributes.addFlashAttribute("fail2", true); + return "redirect:/web/user/login/login.do"; + } + + + String password = decryptRsa(privateKey, loginVO.getPassword()); + loginVO.setId(id); + loginVO.setIp(EgovClntInfo.getClntIP(request)); + loginVO.setPassword(password); + loginVO.setUserSe("GNR"); + loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + + //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 + //암호화 2번 방지를 위한 LoginVO 생성 + LoginVO loginCmpChkVO = new LoginVO(); + loginCmpChkVO.setId(id); + loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); + loginCmpChkVO.setPassword(password); + loginCmpChkVO.setUserSe("GNR"); + loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 + LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); + if(null != cmpHstResultVO.getId()) { + //기업회원 정보 마지막 내역 조회 + MberManageVO mberManageVO = new MberManageVO(); + mberManageVO.setMberId(loginVO.getId()); + MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); + if(null != cmpChangeManageVO) { + if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 + if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 + redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); + //addFlashAttribute 일회성으로 인하여 membershipAttachDocBefore.do 이동 후 + //membershipAttachDoc.do로 바로 submit하여 새로고침 시 정보 유지되게 끔 처리 + return "redirect:/web/user/login/membershipAttachDocBefore.do"; + } + } + } + } + //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 + LoginVO loginSmiChkVO = new LoginVO(); + loginSmiChkVO.setId(id); + loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); + loginSmiChkVO.setPassword(password); + loginSmiChkVO.setUserSe("GNR"); + loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 + loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 + LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); + if(null != smiResultVO.getId()) { + MberManageVO spamMberManageVO = new MberManageVO(); + spamMberManageVO.setMberId(loginVO.getId()); + MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); + if(null != spamMemberInfoVO) { + redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); + return "redirect:/web/user/login/loginRestrictionUseBefore.do"; + } + } + resultVO = loginService.actionLogin(loginVO); + LoginVO passMissVO = loginService.selectPassMiss(loginVO); + + String alertMessage = ""; + if (!"admin".equals(loginVO.getId())) { + //아이디가 존재 + if(passMissVO != null) { + // 로그인 실패 ( + if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { + loginService.updatePassMissPlus(loginVO); + alertMessage = egovMessageSource.getMessage("fail.common.login"); + + // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 + /// HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setHackUserId(loginVO.getId()); + hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); + hackIpService.insertHackIp(hackIpVO); + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + redirectAttributes.addFlashAttribute("fail", true); + return "redirect:/web/user/login/login.do"; + } + + return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); + } else { + if (passMissVO.getPassMiss() >= 5) { + alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; + return goUserPassMissPage(redirectAttributes, loginVO, request, model, alertMessage); + } /* + * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = + * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, + * request, model, alertMessage); }else + * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = + * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, + * request, model, alertMessage); } + */ + loginService.updatePassMissReset(loginVO); + } + } + //아이디 미존재 + else { + alertMessage = egovMessageSource.getMessage("fail.common.login"); + + // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 + /// HackIpVO hackIpVO = new HackIpVO(); + hackIpVO.setHackUserId(loginVO.getId()); + hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); + hackIpService.insertHackIp(hackIpVO); + if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { + redirectAttributes.addFlashAttribute("fail", true); + return "redirect:/web/user/login/login.do"; + } + + return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); + } + } + + + /* 일시 : 2023.07.26 + * 내용 : 로그인시 휴먼고객 redirect 기능 추가 + * 작업자 : 원영현 과장 + */ + + if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { + + return "redirect:/web/user/humanPage.do"; + } + + + + + boolean loginPolicyYn = true; + + // 접속IP + // userIp = EgovClntInfo.getClntIP(request); + + // resultVO.siteId 의 각 로그인 ip를 조회함 + if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { + // 세션에다 ip 등록 + resultVO.setIp(userIp); + // 2. spring security 연동 + request.getSession().setAttribute("LoginVO", resultVO); + UsernamePasswordAuthenticationFilter springSecurity = null; + ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); + Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); + + if (beans.size() > 0) { + springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; + springSecurity.setUsernameParameter("egov_security_username"); + springSecurity.setPasswordParameter("egov_security_password"); + springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST")); + } else { + throw new IllegalStateException("No AuthenticationProcessingFilter"); + } + + springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); + { // 관리자 로그인 log 저장 + String uniqId = ""; + String ip = ""; + + /* Authenticated */ + LoginLog loginLog = new LoginLog(); + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated.booleanValue()) { + LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + uniqId = user.getUniqId(); + ip = EgovClntInfo.getClntIP(request); + + HttpSession httpSession = request.getSession(true); + { + List siteManageList = new ArrayList(); + SiteManagerVO siteManagerVO = new SiteManagerVO(); + siteManagerVO.setFirstIndex(0); + siteManagerVO.setRecordCountPerPage(100); + siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); + httpSession.setAttribute("siteManageList", siteManageList); + httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 + httpSession.setAttribute("esntlId", user.getPassword()); + + // 최근검색어 조회 후 세션에 넣어줌 + /* + * UserManageVO tempUserManageVO = new UserManageVO(); + * tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO = + * userManageService.selectRecentSearchWord(tempUserManageVO); + * + * List lisRecentSearch = new ArrayList(); if(null != + * tempUserManageVO){ //ArrayList 로 세션 저장 + * Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split("," + * )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ; + */ + } + } + /* + * loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip); + * loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N"); + * loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("U"); //사용자 + * loginLog.setDeviceType("P"); //PC loginLog.setProgrmFileNm("adminLogin"); + * loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog); + */ + + loginVO.getId(); + loginVO.getIp(); + loginVO.setMessage("로그인 성공되었습니다."); + loginVO.setLoginYn("Y"); + loginService.insertActionLoginLog(loginVO); + } + + // 등급제 Start + // 회원별 등급 적용 + MberGrdVO mberGrdVO = new MberGrdVO(); + mberGrdVO.setMberId(loginVO.getId()); + mberGrdVO.setAmt("0"); + mberGrdVO.setMoid(""); + mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO); + // End + + // 이벤트 결제 바로가기 로직 체크 Start + String goEventPay = (String) commandMap.get("goEventPay"); + System.out.println("goEventPay : " + goEventPay); + if (null != goEventPay && goEventPay.equals("Y")) { + // 이벤트 결제 바로가기 + if (goEventPay(loginVO) == true) { + loginVO.setBeforeUrl("/web/event/member/pay/PayView.do"); + } + } + // End + + String beforeUrl = (String) commandMap.get("beforeUrl"); + + // 로그인 전 URL 호출 시 + if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) { + request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl()); + // 회원가입 시 메세지 처리 + if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) { + request.getSession().setAttribute("registMessage", loginVO.getMessage()); + } + } + + // 개인키 삭제 + // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. + request.getSession().setAttribute("pageType", "web"); + + return "blank"; // 성공 시 페이지.. (redirect 불가) + + // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. + // return "forward:/web/main/mainPage.do"; + } else { + String message = egovMessageSource.getMessage("fail.common.login"); + redirectAttributes.addFlashAttribute("beforeUrl", loginVO.getBeforeUrl()); + redirectAttributes.addFlashAttribute("message", message); + return "redirect:/"; + } + } + // 이벤트 결제 바로가기 public boolean goEventPay(LoginVO loginVO) throws Exception { boolean goEventPay = false; @@ -2647,7 +3570,7 @@ public class EgovLoginController { String resultBlockSts = "0"; // 비밀번호 찾기 문자내용 - String contents = "[문자온] 비밀번호 변경 인증번호 : %code%"; + String contents = "[문자온] 인증번호 : %code%"; String code = ""; long seed = System.currentTimeMillis(); Random random = new Random(seed); diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 8deaf7af..03f1ee56 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -3702,6 +3702,26 @@ LIMIT 1 + + + +
@@ -294,9 +522,9 @@ function fn_click_banner_add_stat(bannerMenuCode){

문자온에 오신것을 환영합니다.
- 로그인 해주세요. + 로그인1 해주세요.

-
+
아이디
@@ -309,7 +537,7 @@ function fn_click_banner_add_stat(bannerMenuCode){
-
+
비밀번호
@@ -327,15 +555,61 @@ function fn_click_banner_add_stat(bannerMenuCode){
-
+

아이디 또는 비밀번호가 일치하지 않습니다.

-
+ +
+

+ 인증번호가 일치하지 않습니다. +

+
+
+ +
+ + + + +
@@ -367,4 +641,10 @@ function fn_click_banner_add_stat(bannerMenuCode){
+
+ + + + +
\ No newline at end of file