2025-12-05 11:31 2factor 인증 완료

This commit is contained in:
myname 2025-12-05 11:31:14 +09:00
parent 19cfebd258
commit 987ca4eec5
15 changed files with 599 additions and 70 deletions

View File

@ -60,7 +60,7 @@ public class LoginVO implements Serializable{
private String siteNm;
private String authority;
/** 로그인 후 리턴 url */
private String beforeUrl;
/** 회원탈퇴 사유 */

View File

@ -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);
}
}
}

View File

@ -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());");

View File

@ -21,6 +21,7 @@ public interface SspnIdtmtService {
//교육대상자 확인 - new
ModelAndView checkSspnIdtmt(CndtnTrgtMngVO cndtnTrgtInfoMngVO);
//교육대상자 확인 - new
ModelAndView sendCertSMS(String p_Clphone, String p_uniqId);
}

View File

@ -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<String, Object> 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<String, Object> 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;
}
}

View File

@ -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 @@
<!-- 비밀번호비교를 위한 데이터 가져오기 용 -->
<select id="loginDAO.actionLoginNew" resultMap="login">
/*loginDAO.actionLogin*/
/*loginDAO.loginDAO.actionLoginNew*/
<!-- 일반회원 -->
<isNotNull property="userSe">
<isEqual property="userSe" compareValue="GNR">
@ -90,6 +93,7 @@
, ihidNum AS ihidNum
, mber_email_adres AS email
, 'GNR' AS userSe
, OFFM_TELNO AS membCelnum
, '-' AS orgnztId
, ESNTL_ID AS uniqId
, 0 AS passMiss
@ -109,7 +113,11 @@
, IHIDNUM AS ihidNum
, EMAIL_ADRES AS email
, 'USR' AS userSe
/*
, ORGNZT_ID AS orgnztId
*/
, OFFM_TELNO AS membCelnum
, AREA_NO AS orgnztId
, ESNTL_ID AS uniqId
, PASS_MISS AS passMiss
, EMPLYR_STTUS_CODE AS emplyrSttusCode
@ -177,7 +185,7 @@
<!-- e배움터 연동 후 mber_seq가 아닌 mber_id로 로그인 -->
<select id="loginDAO.actionLoginMberId" resultMap="login">
/*loginDAO.actionLoginMberId*/
<!-- 일반회원 loginDAO.actionLoginDev -->
<!-- 일반회원 loginDAO.loginDAO.actionLoginMberId -->
<isNotNull property="userSe">
<isEqual property="userSe" compareValue="GNR">
SELECT mber_id AS id
@ -428,11 +436,15 @@
<!-- 사용자 권한 조회 -->
<select id="loginDAO.getUserAuth" parameterClass="loginVO" resultClass="loginVO" >
/* loginDAO.getUserAuth */
<![CDATA[
SELECT A.SCRTY_DTRMN_TRGET_ID id, A.AUTHOR_CODE AUTHORITY
FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID
AND B.USER_ID = #id#
, c.area_no orgnztId
FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
LEFT OUTER JOIN LETTNEMPLYRINFO C
ON (1=1 and b.esntl_id = c.esntl_id)
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID
AND B.USER_ID = #id#
]]>
</select>

View File

@ -466,6 +466,15 @@ function wrapWindowByMask(){
<form:errors path="emailAdres" cssClass="error" />
</td>
</tr>
<tr>
<th>추가인증</th>
<td colspan="3">
<input type="checkbox" id="areaNo" name="areaNo">
<label for="areaNo">핸드폰인증</label>
</td>
</tr>
</tbody>
</table>
</div>

View File

@ -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){
</td>
</tr>
<tr>
<th>추가인증</th>
<td colspan="3">
<input type="checkbox" id="areaNo" name="areaNo">
<label for="areaNo">핸드폰인증</label>
</td>
</tr>
<%-- <c:if test="${empty isAdmin and empty isMember}">
<tr>
<th>비밀번호확인</th>

View File

@ -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){
</td>
</tr>
<tr>
<th>추가인증</th>
<td colspan="3">
<input type="checkbox" id="areaNo" name="areaNo">
<label for="areaNo">핸드폰인증</label>
</td>
</tr>
<%-- <c:if test="${empty isAdmin and empty isMember}">
<tr>
<th>비밀번호확인</th>

View File

@ -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 = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngList.do'/>";
detailForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngList.do'/>";
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,

View File

@ -43,7 +43,7 @@
return;
}
*/
listForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngList.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngList.do'/>";
listForm.submit();
}
@ -52,21 +52,21 @@
listForm.userId.value = userId ;
listForm.instrDiv.value = instrDiv ;
listForm.instrDetailOrd.value = instrDetailOrd ;
listForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngDetail.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctMngDetail.do'/>";
listForm.submit();
}
function fncGoReg(){
var listForm = document.listForm ;
listForm.instrDiv.value = "10" ;
listForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctReg.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctReg.do'/>";
listForm.submit();
}
function fncGoRegExcel(){
var listForm = document.listForm ;
listForm.instrDiv.value = "10" ;
listForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctRegExcel.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrAplctRegExcel.do'/>";
listForm.submit();
}

View File

@ -177,14 +177,14 @@ function getYears(getYear){
if(confirm("강사"+ment+" 처리하시겠습니까?")){
var detailForm = document.detailForm;
detailForm.qlfctEndYn.value = qlfctEndYn;
detailForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrqlfctEndYnMdfy.do'/>";
detailForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrqlfctEndYnMdfy.do'/>";
detailForm.submit();
}
}
function fncGoList(){
var detailForm = document.detailForm;
detailForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMngList.do'/>";
detailForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMngList.do'/>";
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("<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrLctrStngPopup.do'/>");
$("#importDiv").load("<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrLctrStngPopup.do'/>");
}
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){
<!-- <div id="importDiv"> -->
<%-- <c:import url="/ve/oprtn/instr/adultVisitEdu/instrInfo/instrLctrStngPopup.do" charEncoding="utf-8"></c:import> --%>
<%-- <c:import url="/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrLctrStngPopup.do" charEncoding="utf-8"></c:import> --%>
<!-- </div> -->
<%-- <div class="tb_tit01">
<p>월별 교육시간 배정 정보</p>

View File

@ -55,7 +55,7 @@
listForm.rsdne.value = $('#searchEduSlctAreaCd option:selected').text();
}
*/
listForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMngList.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMngList.do'/>";
listForm.submit();
}
@ -65,7 +65,7 @@
listForm.instrDiv.value = instrDiv ;
listForm.instrDetailOrd.value = instrDetailOrd ;
listForm.rqstCnt.value = rqstCnt ;
listForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMngDetail.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMngDetail.do'/>";
listForm.submit();
}
@ -74,12 +74,12 @@
var popupForm = document.popupForm;
popupForm.userId.value = userId
popupForm.instrDiv.value = instrDiv
popupForm.action = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyRqstPopup.do'/>";
popupForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/instrMdfyRqstPopup.do'/>";
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 = "<c:url value='/ve/oprtn/instr/adultVisitEdu/instrInfo/eduAplctExcelDownLoad.do'/>";
listForm.action = "<c:url value='/kccve/oprtn/instr/adultVisitEdu/instrInfo/eduAplctExcelDownLoad.do'/>";
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+']');
}
}
</script>

View File

@ -667,7 +667,6 @@
<p style="margin:0 4px 0 0;">성별</p> <ve:radio codeId="COM014" name="searchSex" id="searchSex" defaultValue="" defaultText="전체" selectedValue="${cndtnTrgtInfoMngVO.searchSex }" />
</div>
</div>
</div>
<div class="list_top_2">
@ -679,8 +678,7 @@
<ve:select codeId="VEA008" name="userWork" id="userWork" styleClass="sel_type1" selectedValue="${cndtnTrgtInfoMngVO.userWork}" defaultValue="" defaultText="선택없음"/>
</div>
</div>
</div>
</div>
<div class="list_top_2">
<div class="util_left">

View File

@ -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() ;
<%-- <input type="hidden" id="RSAExponent" value="${RSAExponent}"/> --%>
<input type="hidden" id="id" name="id">
<input type="hidden" id="password" name="password">
<input type="hidden" id="membCelnum" name="membCelnum">
<input type="text" id="ip1" name="ip1" value="<%=ip1%>">
<input type="text" id="ip2" name="ip2" value="<%=ip2%>">
<input type="text" id="ip3" name="ip3" value="<%=ip3%>">
@ -198,9 +321,20 @@ String ip4 = request.getRemoteAddr() ;
<input type="checkbox" id="checkId" name="checkId">
<label for="checkId">아이디저장</label>
</div>
<div class="submit_box">
<input type="submit" value="로그인" class="submit" id="login_submit" onclick="javascript:actionLogin();return false;">
<div class="submit_box" id="submit_box_1">
<input type="submit" value="로그인" class="submit" id="login_submit" onclick="javascript:actionLoginAjax();return false;">
</div>
<div class="id_box" id="id_box_2" style="display:none;">
<br/>
<p>인증번호</p>
<label for="id_num"></label>
<input type="text" id="id_num" maxlength="13" placeholder="핸드폰으로 받은 인증번호를 입력해주세요" class="id">
</div>
<div class="submit_box" id="submit_box_2" style="display:none;">
<input type="submit" style="width:45%;" value="인증번호확인" class="submit" id="login_submit" onclick="javascript:actionLoginAjaxNum();return false;">
<input type="submit" style="width:45%;color:#000;background:#F1F1F1;" value="로그인초기화면" class="submit" id="login_submit" onclick="javascript:actionLoginAjaxNumFirst();return false;">
</div>
<div class="copyright">
<span class="copy_text">Copyright ⓒ한국지식재산보호원 All Rights Reserved.</span>
</div>