From 987ca4eec57640a5ec3a79ac57eb7aa3ea0b1a07 Mon Sep 17 00:00:00 2001 From: myname Date: Fri, 5 Dec 2025 11:31:14 +0900 Subject: [PATCH] =?UTF-8?q?2025-12-05=2011:31=202factor=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/kcc/com/cmm/LoginVO.java | 2 +- .../let/uat/uia/web/EgovLoginController.java | 286 ++++++++++++++++-- .../uss/umt/web/EgovUserManageController.java | 18 ++ .../sspnIdtmt/service/SspnIdtmtService.java | 3 +- .../service/impl/SspnIdtmtServiceImpl.java | 105 ++++++- .../uat/uia/EgovLoginUsr_SQL_Postgresql.xml | 22 +- .../jsp/cmm/uss/umt/EgovUserInsert.jsp | 9 + .../jsp/cmm/uss/umt/EgovUserSelectUpdt.jsp | 12 + .../cmm/uss/umt/EgovUserSelectUpdt4Self.jsp | 12 + .../adultVisitEdu/instrAplctMngDetail.jsp | 14 +- .../oprtn/adultVisitEdu/instrAplctMngList.jsp | 8 +- .../oprtn/adultVisitEdu/instrMngDetail.jsp | 20 +- .../jsp/oprtn/adultVisitEdu/instrMngList.jsp | 16 +- .../jsp/oprtn/cndtnSspnIdtmt/trgtList.jsp | 4 +- .../WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp | 138 ++++++++- 15 files changed, 599 insertions(+), 70 deletions(-) diff --git a/src/main/java/kcc/com/cmm/LoginVO.java b/src/main/java/kcc/com/cmm/LoginVO.java index cbc0cde4..8918bddd 100644 --- a/src/main/java/kcc/com/cmm/LoginVO.java +++ b/src/main/java/kcc/com/cmm/LoginVO.java @@ -60,7 +60,7 @@ public class LoginVO implements Serializable{ private String siteNm; private String authority; - + /** 로그인 후 리턴 url */ private String beforeUrl; /** 회원탈퇴 사유 */ diff --git a/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java b/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java index 914cbe89..1b751164 100644 --- a/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java @@ -1,31 +1,20 @@ package kcc.let.uat.uia.web; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.math.BigInteger; -import java.net.URLEncoder; -import java.security.SecureRandom; -import java.util.*; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import java.util.Locale; +import java.util.Map; import javax.annotation.Resource; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; -import javax.script.ScriptEngineManager; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import kcc.ve.cmm.crt.CertPhoneResultUtill; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpClient; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.message.BasicNameValuePair; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.slf4j.Logger; @@ -40,12 +29,10 @@ import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.SavedRequest; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -53,17 +40,12 @@ import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - import egovframework.rte.fdl.cmmn.trace.LeaveaTrace; import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.psl.dataaccess.util.EgovMap; import kcc.com.cmm.EgovMessageSource; import kcc.com.cmm.LoginVO; -import kcc.com.cmm.captcha.CaptchaUtil; -import kcc.com.cmm.spring.data.util.ProfileUtil; import kcc.com.cmm.util.StringUtil; import kcc.com.cmm.util.WebUtil; import kcc.com.utl.user.service.CheckLoginUtil; @@ -79,13 +61,14 @@ import kcc.let.uat.uia.service.SsoLoginVO; import kcc.let.uss.umt.service.EgovMberManageService; import kcc.let.uss.umt.service.EgovUserManageService; import kcc.let.uss.umt.service.MberManageConfigVO; -import kcc.let.uss.umt.service.UserDefaultVO; import kcc.let.uss.umt.service.UserGuestVO; import kcc.let.uss.umt.service.UserManageVO; import kcc.let.utl.fcc.service.EgovCryptoUtil; import kcc.let.utl.sim.service.EgovClntInfo; -import kcc.let.utl.sim.service.EgovNewPasswordUtil; +import kcc.ve.aplct.sspnIdtmt.service.SspnIdtmtService; +import kcc.ve.cmm.crt.CertPhoneResultUtill; import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailVO; +import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrMixService; import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrService; /** @@ -159,6 +142,14 @@ public class EgovLoginController { @Resource(name = "egovCryptoUtil") EgovCryptoUtil egovCryptoUtil; + //온라인콘텐츠과정 관리 + @Resource(name = "sspnIdtmtService") + private SspnIdtmtService sspnIdtmtService; + + //강사 정보 MIX + @Resource(name="vEInstrMixService") + private VEInstrMixService vEInstrMixService; + /** 구동 환경 */ @Value("#{property['Globals.prod.islocal']}") private String environment; @@ -432,6 +423,178 @@ public class EgovLoginController { return "redirect:/web/main/mainPage.do"; } + /** + * (사용자) 아이디 중복 확인 + * + * @return model + * @throws Exception + */ + @RequestMapping(value = "/uat/uia/actionSecurityLoginAjax.do") + public ModelAndView selectActionSecurityLoginAjax(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + //로그인 사전 체크 + String s_result = _checkLoginPart1(loginVO, loginService); + + if (s_result.indexOf("fail")>-1) { + modelAndView.addObject("result", s_result); + return modelAndView; + } + + + //step3.로그인 처리 + LoginVO resultVO = loginService.actionLogin(loginVO); + + + //로그인 사후 체크 + s_result = _checkLoginPart2(loginVO, loginService, resultVO); + + if (s_result.indexOf("fail")>-1) { + modelAndView.addObject("result", s_result); + return modelAndView; + } + + + + + /* + // Step1.로그인 정보 check - 아이디, 비번 입력 확인 + if (loginVO.getId() == null || loginVO.getPassword() == null) { // 로그인 최초 화면 로딩 + modelAndView.addObject("result", "fail0"); + return modelAndView; + + } + + + //step2.아이디가 DB에 없거나, 권한이 관리자가 아닌 경우 체크 + // 사용자일 경우 로그인 안되게 + if (null == loginService.getUserAuth(loginVO)) { // 아이디 없음. + modelAndView.addObject("result", "fail1"); + return modelAndView; + + } else { + String s_authority = loginService.getUserAuth(loginVO).getAuthority(); + if ("ROLE_USER_MEMBER".equals(s_authority)) { // 일반사용자 로그인 + modelAndView.addObject("result", "fail2"); + return modelAndView; + + } else if ("ROLE_USER_MANAGER".equals(s_authority)) { + modelAndView.addObject("result", "fail3"); + return modelAndView; + + } + } + + + //step3.로그인 처리 + LoginVO resultVO = loginService.actionLogin(loginVO); + //System.out.println("UserWork :: "+resultVO.getUserWork()); + + if (loginService.getUserAuth(resultVO) != null) { + resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority()); + } + + if (null == resultVO.getId()) { // 로그인 실패 + modelAndView.addObject("result", "fail4"); + return modelAndView; + + } else { + if (resultVO.getPassMiss() > 5) { //비밀번호 실패 5회 이상 + modelAndView.addObject("result", "fail5"); + return modelAndView; + + } else { // 초기화 + loginService.updatePassMissReset(loginVO); + } + } + */ + + + + //step4.2FACTOR인가? + //2FACTOR 설정된 경우는 인증번호를 발송한다. + if ("Y".equals(resultVO.getOrgnztId())) { + sspnIdtmtService.sendCertSMS(resultVO.getMembCelnum(), resultVO.getUniqId()); + } + + modelAndView.addObject("result", "success"); + modelAndView.addObject("factor", resultVO.getOrgnztId()); + return modelAndView; + } + + /** + * (관리자) 로그인을 위한 2FACTOR 인증 체크 + * + * @return model + * @throws Exception + */ + @RequestMapping(value = "/uat/uia/actionSecurityLoginAjaxNum.do") + public ModelAndView selectActionSecurityLoginAjaxNum(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + //로그인 사전 체크 + String s_result = _checkLoginPart1(loginVO, loginService); + + if (s_result.indexOf("fail")>-1) { + modelAndView.addObject("result", s_result); + return modelAndView; + } + + + //step3.로그인 처리 + LoginVO resultVO = loginService.actionLogin(loginVO); + + + //로그인 사후 체크 + s_result = _checkLoginPart2(loginVO, loginService, resultVO); + + if (s_result.indexOf("fail")>-1) { + modelAndView.addObject("result", s_result); + return modelAndView; + } + + //step4.인증번호 검증 + + //로그인 정보 가져오기 + //LoginVO loginVO = new checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기 + VEInstrDetailVO vEInstrDetailVO = new VEInstrDetailVO(); + vEInstrDetailVO.setUserId(resultVO.getUniqId()); + vEInstrDetailVO.setCrtfdNumber(loginVO.getMembCelnum()); + + //crtfdNumber + + String resultMsg = "success"; + vEInstrDetailVO = vEInstrMixService.selectInstrEmailCrtfdNumber(vEInstrDetailVO); + + + + if(vEInstrDetailVO == null) { + resultMsg = "fail"; + } + + modelAndView.addObject("result", resultMsg); + + /* + //step4.2FACTOR인가? + System.out.println("resultVO"); + System.out.println(resultVO); + System.out.println(resultVO.getOrgnztId()); + + //2FACTOR 설정된 경우는 인증번호를 발송한다. + if ("Y".equals(resultVO.getOrgnztId())) { + sspnIdtmtService.sendCertSMS(resultVO.getMembCelnum(), resultVO.getUniqId()); + } + */ + + //modelAndView.addObject("result", "fail"); + //modelAndView.addObject("factor", resultVO.getOrgnztId()); + return modelAndView; + } + /** * (관리자) 일반(스프링 시큐리티) 로그인을 처리한다(관리자) * @@ -1500,6 +1663,77 @@ public class EgovLoginController { return "redirect:/"; } + + //@SuppressWarnings("unused") + private String _checkLoginPart1( + LoginVO p_loginVO + , EgovLoginService p_loginService) throws Exception { + // Step1.로그인 정보 check - 아이디, 비번 입력 확인 + if (p_loginVO.getId() == null || p_loginVO.getPassword() == null) { // 로그인 최초 화면 로딩 + //p_modelAndView.addObject("result", "fail0"); + return "fail0"; + + } + + //step2.아이디가 DB에 없거나, 권한이 관리자가 아닌 경우 체크 + // 사용자일 경우 로그인 안되게 + if (null == p_loginService.getUserAuth(p_loginVO)) { // 아이디 없음. + //p_modelAndView.addObject("result", "fail1"); + return "fail1"; + //return p_modelAndView; + + } else { + String s_authority = p_loginService.getUserAuth(p_loginVO).getAuthority(); + if ("ROLE_USER_MEMBER".equals(s_authority)) { // 일반사용자 로그인 + //p_modelAndView.addObject("result", "fail2"); + return "fail2"; + //return p_modelAndView; + + } else if ("ROLE_USER_MANAGER".equals(s_authority)) { + //p_modelAndView.addObject("result", "fail3"); + return "fail3"; + //return p_modelAndView; + + } + } + + //return p_modelAndView; + return "success"; + } + + private String _checkLoginPart2( + LoginVO p_loginVO + , EgovLoginService p_loginService + , LoginVO p_resultVO + ) throws Exception { + + //step3.로그인 처리 + //LoginVO resultVO = p_loginService.actionLogin(p_loginVO); + //System.out.println("UserWork :: "+resultVO.getUserWork()); + + if (p_loginService.getUserAuth(p_resultVO) != null) { + p_resultVO.setAuthority(p_loginService.getUserAuth(p_resultVO).getAuthority()); + } + + if (null == p_resultVO.getId()) { // 로그인 실패 + //p_modelAndView.addObject("result", "fail4"); + return "fail4"; + //return p_modelAndView; + + } else { + if (p_resultVO.getPassMiss() > 5) { //비밀번호 실패 5회 이상 + //p_modelAndView.addObject("result", "fail5"); + return "fail5"; + //return p_modelAndView; + + } else { // 초기화 + p_loginService.updatePassMissReset(p_loginVO); + } + } + + //return p_modelAndView; + return "success"; + } } class RequestWrapperForSecurity extends HttpServletRequestWrapper { @@ -1533,5 +1767,5 @@ class RequestWrapperForSecurity extends HttpServletRequestWrapper { } return super.getParameter(name); - } + } } \ No newline at end of file diff --git a/src/main/java/kcc/let/uss/umt/web/EgovUserManageController.java b/src/main/java/kcc/let/uss/umt/web/EgovUserManageController.java index d486e5b1..12d4b0ea 100644 --- a/src/main/java/kcc/let/uss/umt/web/EgovUserManageController.java +++ b/src/main/java/kcc/let/uss/umt/web/EgovUserManageController.java @@ -556,6 +556,13 @@ public class EgovUserManageController { */ userManageVO = egovCryptoUtil.encryptUserManageVO(userManageVO); + + if ("on".equals(userManageVO.getAreaNo())) { + userManageVO.setAreaNo("Y"); + }else { + userManageVO.setAreaNo("N"); + } + userManageService.insertUser(userManageVO); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); }catch(Exception e){ @@ -1050,6 +1057,17 @@ public class EgovUserManageController { userManageService.insertUserHistory(userManageVO); userManageVO = egovCryptoUtil.encryptUserManageVO(userManageVO); + + System.out.println("userManageVO.getAreaNo()"); + System.out.println(userManageVO.getAreaNo()); + System.out.println(userManageVO.getAreaNo()); + + if ("on".equals(userManageVO.getAreaNo())) { + userManageVO.setAreaNo("Y"); + }else { + userManageVO.setAreaNo("N"); + } + userManageService.updateUser(userManageVO); //권한업데이트 - null 이 아닌 경우에만 update //System.out.println("System.out.println(authorGroup.getAuthorCode());"); diff --git a/src/main/java/kcc/ve/aplct/sspnIdtmt/service/SspnIdtmtService.java b/src/main/java/kcc/ve/aplct/sspnIdtmt/service/SspnIdtmtService.java index 5fba13ac..a49df03c 100644 --- a/src/main/java/kcc/ve/aplct/sspnIdtmt/service/SspnIdtmtService.java +++ b/src/main/java/kcc/ve/aplct/sspnIdtmt/service/SspnIdtmtService.java @@ -21,6 +21,7 @@ public interface SspnIdtmtService { //교육대상자 확인 - new ModelAndView checkSspnIdtmt(CndtnTrgtMngVO cndtnTrgtInfoMngVO); - + //교육대상자 확인 - new + ModelAndView sendCertSMS(String p_Clphone, String p_uniqId); } diff --git a/src/main/java/kcc/ve/aplct/sspnIdtmt/service/impl/SspnIdtmtServiceImpl.java b/src/main/java/kcc/ve/aplct/sspnIdtmt/service/impl/SspnIdtmtServiceImpl.java index 951ab964..d86deaa3 100644 --- a/src/main/java/kcc/ve/aplct/sspnIdtmt/service/impl/SspnIdtmtServiceImpl.java +++ b/src/main/java/kcc/ve/aplct/sspnIdtmt/service/impl/SspnIdtmtServiceImpl.java @@ -282,14 +282,24 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService { } //핸드폰으로 인증번호 발송 chkYn-본인인증 여부 Y-본인인증 완료된 경우 - if ("Y".equals(smsYn) && !"Y".equals(cndtnTrgtInfoMngVO.getChkYn())) { + if ("Y".equals(smsYn) && !"Y".equals(cndtnTrgtInfoMngVO.getChkYn())) { + //데이터 암호화 + cndtnTrgtInfoMngVO = egovCryptoUtil.decryptCndtnTrgtMngVOInfo(cndtnTrgtInfoMngVO); //핸드폰번호 복호화 + //인증번호 생성 String code = RandomStringUtils.randomNumeric(6); + + LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); + + //발송 및 log 남기기 - result code 값 + _sendSMSNLog(code, "교육 대상자 인증", "안녕하세요. 한국지식재산보호원입니다.\n인증번호는 " + code + " 입니다.", cndtnTrgtInfoMngVO.getClphone(), loginVO.getUniqId()); + + /* VEEduAplctVO vEEduAplctVO = new VEEduAplctVO(); VeSendSMS sendSMS = new VeSendSMS(); cndtnTrgtInfoMngVO = egovCryptoUtil.decryptCndtnTrgtMngVOInfo(cndtnTrgtInfoMngVO); //핸드폰번호 복호화 - vEEduAplctVO.setEduAplctOrd("기소유예 대상자 인증"); - vEEduAplctVO.setSndCn("안녕하세요. 저작권배움터 기소유예 담당자입니다.\n인증번호는 " + code + " 입니다."); + vEEduAplctVO.setEduAplctOrd("교육 대상자 인증"); + vEEduAplctVO.setSndCn("안녕하세요. 한국지식재산보호원입니다.\n인증번호는 " + code + " 입니다."); vEEduAplctVO.setClphone(cndtnTrgtInfoMngVO.getClphone()); vEEduAplctVO.setSndFlag("B"); Map resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag()); @@ -315,6 +325,7 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService { vEInstrMixService.insertInstrEmailCrtfd(vEInstrDetailVO); } + */ //인증번호 임시노출 실서버 운영 시 삭제_이준호_251030 modelAndView.addObject("crtfdNumber", code); @@ -353,4 +364,92 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService { return modelAndView; } + + @Override + public ModelAndView sendCertSMS(String p_Clphone, String p_uniqId) { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + String result=""; + String msg=""; + String id=""; + + try { + result=""; + + //인증번호 생성 + String code = RandomStringUtils.randomNumeric(6); + + //발송 및 log 남기기 - result code 값 + _sendSMSNLog(code, "교육 대상자 인증", "안녕하세요. 한국지식재산보호원입니다.\n인증번호는 " + code + " 입니다.", p_Clphone, p_uniqId); + + } catch (Exception e) { + result="fail"; + msg = "오류가 발생하였습니다 관리자에게 문의하세요. "; + + e.printStackTrace(); + // TODO: handle exception + } + + modelAndView.addObject("msg", msg); + modelAndView.addObject("id", id); + modelAndView.addObject("result", result); + + return modelAndView; + } + + /////////////////////////////////////////////////////////////////////////////////// + // + // PRIVATE + // + ///////////////////////////////////////////////////////////////////////////////// + + private String _sendSMSNLog(String p_code, String p_title, String p_cn, String p_clphone, String p_uniqId) throws Exception{ + //인증번호 생성 + //String code = RandomStringUtils.randomNumeric(6); + VEEduAplctVO vEEduAplctVO = new VEEduAplctVO(); + VeSendSMS sendSMS = new VeSendSMS(); + //p_cndtnTrgtInfoMngVO = egovCryptoUtil.decryptCndtnTrgtMngVOInfo(p_cndtnTrgtInfoMngVO); //핸드폰번호 복호화 + /* + vEEduAplctVO.setEduAplctOrd("교육 대상자 인증"); + vEEduAplctVO.setSndCn("안녕하세요. 한국지식재산보호원입니다.\n인증번호는 " + code + " 입니다."); + vEEduAplctVO.setClphone(p_cndtnTrgtInfoMngVO.getClphone()); + */ + + vEEduAplctVO.setEduAplctOrd(p_title); + vEEduAplctVO.setSndCn(p_cn); + vEEduAplctVO.setClphone(p_clphone); + + vEEduAplctVO.setSndFlag("B"); + Map resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag()); + + //문자 발송 성공 시 + if("1".equals(resultMap.get("result_code"))){ + //발송 로그 + //LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); + String snd_ord = sndGnrService.getNextStringId(); + vEEduAplctVO.setSndHstryOrd(snd_ord); + vEEduAplctVO.setSndId(p_uniqId); + vEEduAplctVO.setTrgt(vEEduAplctVO.getClphone()); + vEEduAplctVO.setSndCd("10"); + vEEduAplctVO.setTrgtId(p_uniqId); + vEEduAplctSndHstryService.insert(vEEduAplctVO); + + + //인증번호 row 생성 (기존 강사인증 테이블 사용) + VEInstrDetailVO vEInstrDetailVO = new VEInstrDetailVO(); + vEInstrDetailVO.setEmail(vEEduAplctVO.getClphone()); + vEInstrDetailVO.setCrtfdNumber(p_code); + vEInstrDetailVO.setUserId(p_uniqId); + vEInstrMixService.deleteInstrEmailCrtfd(vEInstrDetailVO); + vEInstrMixService.insertInstrEmailCrtfd(vEInstrDetailVO); + + } + + //인증번호 임시노출 실서버 운영 시 삭제_이준호_251030 + //modelAndView.addObject("crtfdNumber", code); + + return p_code; + } } diff --git a/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Postgresql.xml b/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Postgresql.xml index a4b5697f..429823f2 100644 --- a/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Postgresql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uat/uia/EgovLoginUsr_SQL_Postgresql.xml @@ -60,7 +60,10 @@ , IHIDNUM AS ihidNum , EMAIL_ADRES AS email , 'USR' AS userSe + /* , ORGNZT_ID AS orgnztId + */ + , AREA_NO AS orgnztId , ESNTL_ID AS uniqId , PASS_MISS AS passMiss , EMPLYR_STTUS_CODE AS emplyrSttusCode @@ -80,7 +83,7 @@ /*loginDAO.actionLoginMberId*/ - + SELECT mber_id AS id @@ -428,11 +436,15 @@ diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserInsert.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserInsert.jsp index b70133e3..42ac65a6 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserInsert.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserInsert.jsp @@ -466,6 +466,15 @@ function wrapWindowByMask(){ + + + 추가인증 + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt.jsp index d96adaf9..8f5a7929 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt.jsp @@ -76,6 +76,10 @@ $( document ).ready(function(){ } _chgAuthorSelect("${userManageVO.authorCode}"); + + //핸드폰인증 + if ("${userManageVO.areaNo}" == "Y") $("input[name='areaNo']").prop("checked", true); + /* if("${userManageVO.authorCode}" == "ROLE_ADR_JRSDC"){ $('#userWork_case1').hide(); @@ -508,6 +512,14 @@ function _chgAuthorSelect(p_obj_selectedIndex){ + + 추가인증 + + + + + + <%-- 비밀번호확인 diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt4Self.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt4Self.jsp index 6abd62a7..06c40329 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt4Self.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovUserSelectUpdt4Self.jsp @@ -76,6 +76,10 @@ $( document ).ready(function(){ } _chgAuthorSelect("${userManageVO.authorCode}"); + + //핸드폰인증 + if ("${userManageVO.areaNo}" == "Y") $("input[name='areaNo']").prop("checked", true); + /* if("${userManageVO.authorCode}" == "ROLE_ADR_JRSDC"){ $('#userWork_case1').hide(); @@ -512,6 +516,14 @@ function _chgAuthorSelect(p_obj_selectedIndex){ + + 추가인증 + + + + + + <%-- 비밀번호확인 diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngDetail.jsp index 7d4430db..7fc5e88f 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngDetail.jsp @@ -170,7 +170,7 @@ $.ajax({ type: "POST", //enctype: 'multipart/form-data', - url: "${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctApptAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctApptAjax.do", data: { "userId" : $("#userId").val() , "instrDiv" : $("#instrDiv").val() , @@ -207,7 +207,7 @@ $.ajax({ type: "POST", enctype: 'multipart/form-data', - url: "/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMdfyAjax.do", + url: "/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMdfyAjax.do", data: data, dataType:'json', async: false, @@ -234,7 +234,7 @@ $.ajax({ type: "POST", enctype: 'multipart/form-data', - url: "${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngDetailDeleteAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngDetailDeleteAjax.do", data: data, dataType:'json', async: false, @@ -257,7 +257,7 @@ function fncGoList(){ var detailForm = document.detailForm; detailForm.userId.value=""; - detailForm.action = ""; + detailForm.action = ""; detailForm.submit(); } @@ -266,11 +266,11 @@ $("#aprvlCd").val(rpplTy); $("#rqstType").val(rqstType); var pop = document.detailForm; - commonPopWindowopenForm("${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctCmpnnPopup.do", "750", "660", "instrMdfyRqstPop", $('#detailForm')); + commonPopWindowopenForm("${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctCmpnnPopup.do", "750", "660", "instrMdfyRqstPop", $('#detailForm')); } function fncAreaList(paramObj) { - commonPopWindowopenForm("${pageContext.request.contextPath}/ve/oprtn/instr/tngrVisitEdu/popup/instrInfo/rsdncPopList.do", "750", "660", "securityPop", $('#detailForm')); + commonPopWindowopenForm("${pageContext.request.contextPath}/kccve/oprtn/instr/tngrVisitEdu/popup/instrInfo/rsdncPopList.do", "750", "660", "securityPop", $('#detailForm')); } //위촉년도 최근년도 뿌려주기 @@ -343,7 +343,7 @@ $.ajax({ type: "POST", enctype: 'multipart/form-data', - url: "${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngDetailUpdateAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngDetailUpdateAjax.do", data: data, dataType:'json', async: false, diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngList.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngList.jsp index f222c8be..5f33835a 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngList.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrAplctMngList.jsp @@ -43,7 +43,7 @@ return; } */ - listForm.action = ""; + listForm.action = ""; listForm.submit(); } @@ -52,21 +52,21 @@ listForm.userId.value = userId ; listForm.instrDiv.value = instrDiv ; listForm.instrDetailOrd.value = instrDetailOrd ; - listForm.action = ""; + listForm.action = ""; listForm.submit(); } function fncGoReg(){ var listForm = document.listForm ; listForm.instrDiv.value = "10" ; - listForm.action = ""; + listForm.action = ""; listForm.submit(); } function fncGoRegExcel(){ var listForm = document.listForm ; listForm.instrDiv.value = "10" ; - listForm.action = ""; + listForm.action = ""; listForm.submit(); } diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngDetail.jsp index 29824e46..969e75f8 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngDetail.jsp @@ -177,14 +177,14 @@ function getYears(getYear){ if(confirm("강사"+ment+" 처리하시겠습니까?")){ var detailForm = document.detailForm; detailForm.qlfctEndYn.value = qlfctEndYn; - detailForm.action = ""; + detailForm.action = ""; detailForm.submit(); } } function fncGoList(){ var detailForm = document.detailForm; - detailForm.action = ""; + detailForm.action = ""; detailForm.submit(); } @@ -192,17 +192,17 @@ function getYears(getYear){ //수정요청 팝업 function fncRqstPopup() { var pop = document.detailForm; - commonPopWindowopenForm("${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyRqstPopup.do", "1300", "700", "instrMdfyRqstPopup", $('#detailForm')); + commonPopWindowopenForm("${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyRqstPopup.do", "1300", "700", "instrMdfyRqstPopup", $('#detailForm')); } //강의설정 승인팝업 function fncLctrAprvlPopup() { var pop = document.detailForm; - commonPopWindowopenForm("${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrLctrStngConfirmPopup.do", "900", "700", "instrMdfyRqstPopup", $('#detailForm')); + commonPopWindowopenForm("${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrLctrStngConfirmPopup.do", "900", "700", "instrMdfyRqstPopup", $('#detailForm')); } function changeYear(year) { - $("#importDiv").load(""); + $("#importDiv").load(""); } function fncLctrSave(){ @@ -219,7 +219,7 @@ function getYears(getYear){ if(confirm("강의설정을 수정하시겠습니까?")){ $.ajax({ type: "POST", - url: "${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/lctrStngMdfyAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/lctrStngMdfyAjax.do", data: data1, dataType:'json', async: false, @@ -276,7 +276,7 @@ function getYears(getYear){ if(confirm("강사정보를 수정하시겠습니까?")){ $.ajax({ type: "POST", - url: "${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyAjax.do", data: data1, dataType:'json', async: false, @@ -327,7 +327,7 @@ function getYears(getYear){ if(confirm("해당 이력을 삭제하시겠습니까?)")){ $.ajax({ type:"POST", - url: "${pageContext.request.contextPath}/ve/oprtn/instr/tngrVisitEdu/instrInfo/popup/instrHstryDelAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/tngrVisitEdu/instrInfo/popup/instrHstryDelAjax.do", data: data1, dataType:'json', async: false, @@ -386,7 +386,7 @@ function getYears(getYear){ if(confirm("이수증 강사 정보를 수정하시겠습니까?")){ $.ajax({ type: "POST", - url: "${pageContext.request.contextPath}/ve/oprtn/instr/adultVisitEdu/instrInfo/instrCmpltMdfyAjax.do", + url: "${pageContext.request.contextPath}/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrCmpltMdfyAjax.do", data: data1, dataType:'json', async: false, @@ -1074,7 +1074,7 @@ function getYears(getYear){ -<%-- --%> +<%-- --%> <%--

월별 교육시간 배정 정보

diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngList.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngList.jsp index ff7333b4..acab697a 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngList.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/adultVisitEdu/instrMngList.jsp @@ -55,7 +55,7 @@ listForm.rsdne.value = $('#searchEduSlctAreaCd option:selected').text(); } */ - listForm.action = ""; + listForm.action = ""; listForm.submit(); } @@ -65,7 +65,7 @@ listForm.instrDiv.value = instrDiv ; listForm.instrDetailOrd.value = instrDetailOrd ; listForm.rqstCnt.value = rqstCnt ; - listForm.action = ""; + listForm.action = ""; listForm.submit(); } @@ -74,12 +74,12 @@ var popupForm = document.popupForm; popupForm.userId.value = userId popupForm.instrDiv.value = instrDiv - popupForm.action = ""; + popupForm.action = ""; window.open("#", "_instrMdfyRqstPopup", "scrollbars = no, top=100px, left=100px, height=750px, width=1300px"); popupForm.target = "_instrMdfyRqstPopup"; popupForm.submit(); -// commonPopWindowopenForm("/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyRqstPopup.do", "900", "700", "instrMdfyRqstPopup", $('#listForm')); +// commonPopWindowopenForm("/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyRqstPopup.do", "900", "700", "instrMdfyRqstPopup", $('#listForm')); event.stopImmediatePropagation(); } function fncReset(thisObj){ @@ -116,7 +116,7 @@ return false; } listForm.userIdList.value=userIdList; - listForm.action = ""; + listForm.action = ""; listForm.submit(); } @@ -369,19 +369,19 @@ viewer.hideToolbarItem(["save"]); viewer.showToolbarItem(["print_pdf"]); - viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://119.193.215.98:9989/ipedu/ve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']'); */ + viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://119.193.215.98:9989/ipedu/kccve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']'); */ //운영 or 개발 서버 구분 if(isLocal == 'real'){ //운영 var viewer = new m2soft.crownix.Viewer('https://www.edu-copyright.or.kr/ipedu/ReportingServer/service'); viewer.hideToolbarItem(["save"]); viewer.showToolbarItem(["print_pdf"]); - viewer.openFile('adult_instrs_20231107.mrd', '/rf [https://www.edu-copyright.or.kr/ipedu/ve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']'); + viewer.openFile('adult_instrs_20231107.mrd', '/rf [https://www.edu-copyright.or.kr/ipedu/kccve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']'); }else{ //개발 var viewer = new m2soft.crownix.Viewer('http://119.193.215.98:8093/ReportingServer/service'); viewer.hideToolbarItem(["save"]); viewer.showToolbarItem(["print_pdf"]); - viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://119.193.215.98:9989/ipedu/ve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']'); + viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://119.193.215.98:9989/ipedu/kccve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']'); } } \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/trgtList.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/trgtList.jsp index c9139150..397913ec 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/trgtList.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/trgtList.jsp @@ -667,7 +667,6 @@

성별

-
@@ -679,8 +678,7 @@
- - +
diff --git a/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp b/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp index f5ae9d69..3a67faf2 100644 --- a/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp +++ b/src/main/webapp/WEB-INF/jsp/uat/uia/EgovLoginUsr.jsp @@ -90,6 +90,128 @@ function actionLogin() { } } +function actionLoginAjax(){ + + if (document.loginForm.id_text.value =="") { + alert("아이디를 입력하세요"); + return false; + } else if (document.loginForm.password_text.value =="") { + alert("비밀번호를 입력하세요"); + return false; + } else { + var id = $("#id_text").val(); + var pw = $("#password_text").val(); + + $("#id").val(id); + $("#password").val(pw); + + var data1 = new FormData(document.getElementById("loginForm")); + $.ajax({ + type:"POST", + url:"${pageContext.request.contextPath}/uat/uia/actionSecurityLoginAjax.do", + data:data1, + dataType:'json', + async: false, + processData: false, + contentType: false, + cache: false, + success:function(returnData){ + if(returnData.result == "success"){ + ////alert("2FACTOR 인증 시작"); + //alert(returnData.factor); + + if(returnData.factor == "Y"){ //2FACTOR 인증 시작 + alert("2FACTOR 인증 시작-핸드폰으로 인증번호가 발송되었습니다."); + + $("#submit_box_1").hide(); + + $("#id_box_2").show(); + $("#submit_box_2").show(); + + + }else{ //2FACTOR 없음 로그인후 페이지로 + actionLogin(); //2FACTOR 인증 시작 + } + + + //alert("저장 되었습니다."); + //fncGoList(); + }else{ + alert("로그인 정보가 올바르지 않습니다."); + //alert(returnData.result); + } + }, + error:function(request , status, error){ + alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); + } + }); + } +} + +//2FACTOR 인증 - 인증 번호 확인 +function actionLoginAjaxNum(){ + + if (document.loginForm.id_text.value =="") { + alert("아이디를 입력하세요"); + return false; + + } else if (document.loginForm.password_text.value =="") { + alert("비밀번호를 입력하세요"); + return false; + + } else if (document.loginForm.id_num.value =="") { + alert("등록된 전화번호로 전송받은 인증번호를 입력하세요"); + return false; + + } else { + var id = $("#id_text").val(); + var pw = $("#password_text").val(); + var celnum = $("#id_num").val(); + + $("#id").val(id); + $("#password").val(pw); + $("#membCelnum").val(celnum); + + + var data1 = new FormData(document.getElementById("loginForm")); + $.ajax({ + type:"POST", + url:"${pageContext.request.contextPath}/uat/uia/actionSecurityLoginAjaxNum.do", + data:data1, + dataType:'json', + async: false, + processData: false, + contentType: false, + cache: false, + success:function(returnData){ + if(returnData.result == "success"){ + ////alert("2FACTOR 인증 시작"); + //alert(returnData.factor); + + alert("인증 완료"); + + actionLogin(); //2FACTOR 인증 시작 + + + //alert("저장 되었습니다."); + //fncGoList(); + }else{ + alert("로그인 정보가 올바르지 않습니다."); + alert(returnData.result); + } + }, + error:function(request , status, error){ + alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); + } + }); + } +} + +//초기 로그인 화면으로 +function actionLoginAjaxNumFirst(){ + location.reload(); +} + function setCookie (name, value, expires) { document.cookie = name + "=" + escape (value) + "; path=/; expires=" + expires.toGMTString(); } @@ -153,6 +275,7 @@ String ip4 = request.getRemoteAddr() ; <%-- --%> + @@ -198,9 +321,20 @@ String ip4 = request.getRemoteAddr() ;
-
- +
+
+ + +