File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package egovframework.com.cmm.selfauth;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.sci.v2.ipinv2.secu.SciSecuManager;
import egovframework.com.cmm.UserVO;
import egovframework.let.cop.bbs.service.BoardVO;
/**
* 휴대폰 인증 처리를 위한 컨트롤러 클래스
* @author 공통 서비스 개발팀 이삼섭
* @since 2009.03.19
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.19 이삼섭 최초 생성
* 2009.06.29 한성곤 2단계 기능 추가 (댓글관리, 만족도조사)
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
* </pre>
*/
@Controller
public class IpinauthController {
@Value("#{globalSettings['Globals.Site.URL']}")
private String SITE_URL;
@Value("#{globalSettings['Globals.ipinauth.siteId']}")
private String IPINAUTH_SITE_ID;
@Value("#{globalSettings['Globals.ipinauth.srvNo']}")
private String IPINAUTH_SRV_NO;
private static final Logger LOGGER = LoggerFactory.getLogger(IpinauthController.class);
/**
* (사용자)아이핀서비스 요청 Sample Page - input 1
*/
@RequestMapping("/web/cop/bbs/ipinInputSeedV2.do")
public String ipinInputSeedV2(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
return "web/cop/selfauth/ipin_input_seed";
}
/**
* (사용자)아이핀서비스 요청 Sample Page - request 2
*/
@RequestMapping("/web/cop/bbs/ipinRequestSeedV2.do")
public String ipinRequestSeedV2(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
return "web/cop/selfauth/ipin_request_seed";
}
/**
* (사용자)아이핀서비스 요청 Sample Page - popup 3
*/
@RequestMapping("/web/cop/bbs/ipinPopupSeedV2.do")
public String ipinPopupSeedV2(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
return "web/cop/selfauth/ipin_popup_seed";
}
/**
* (사용자)아이핀서비스 요청 Sample Page - result 4
*/
@RequestMapping("/web/cop/bbs/ipinResultSeedV2.do")
public String ipinResultSeedV2(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
return "web/cop/selfauth/ipin_result_seed";
}
/**
* (사용자)아이핀인증 안내 화면
*
* @param
* @return
* @throws Exception
*/
// @RequestMapping("/web/cop/selfauth/authentication.do")
// public String authentication(ModelMap model) throws Exception {
//
// model.addAttribute("SITE_URL", SITE_URL);
// return "web/cop/selfauth/authentication";
// }
/**
* (사용자) 아이핀 본인인증 요청 1 pop
*
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/cop/selfauth/ipinauth.do")
public String ipinauth(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
// 사이렌 요청 URL 등록 : /web/cop/selfauth/ipinauth.do
// test 서버 서비스 번호 001003
java.util.Random ran = new Random();
//랜던 문자 길이
int numLength = 16;
String randomStr = "";
for (int i = 0; i < numLength; i++) {
//0 ~ 9 랜덤 숫자 생성
randomStr += ran.nextInt(10);
}
String reqNum = randomStr;
String exVar = "0000000000000000"; // 복호화용 임시필드
request.getSession().setAttribute("reqNum", reqNum); // 결과값 복호화시 필요
//01. 암호화 모듈 선언
SciSecuManager seed = new SciSecuManager();
// 아이핀 모듈 암호화 키
seed.setInfoPublic(IPINAUTH_SITE_ID,"BA92414622515048479AB7B12A6DBD3A");
String encStr = "";
String reqInfo = reqNum+"/"+IPINAUTH_SITE_ID+"/"+IPINAUTH_SRV_NO+"/"+exVar; // 데이터 암호화
// 1차 암호화
encStr = seed.getEncPublic(reqInfo);
// 위변조 검증 값 등록
String hmacMsg = seed.getEncReq(encStr,"HMAC");
// 2차 암호화
reqInfo = seed.getEncPublic(encStr + "/" + hmacMsg + "/" + "00000000"); //2차암호화
//암호화키 값을 위한 아이디
reqInfo = seed.EncPublic(reqInfo + "/" + IPINAUTH_SITE_ID + "/" + "00000000");
// request.getSession().setAttribute("encReqNum", seed.getEncPublic(seed.getEncReq(reqNum,"HMAC"))); // ?
request.getSession().setAttribute("reqInfo", reqInfo); // 본인확인 요청 정보
request.getSession().setAttribute("SITE_URL", SITE_URL); // 사이트 URL
request.getSession().setAttribute("reqNum", reqNum); // 요청번호 복호화 시 사용
return "web/cop/selfauth/ipinauth";
}
/**
* (사용자)아이핀인증 결과 리턴 2
*
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/cop/selfauth/ipinResultSeed.do")
public String ipinResultSeed(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
String retInfo = request.getParameter("retInfo").trim();
String tranjectionReqNum = (String)request.getSession().getAttribute("reqNum");
//복화화용 변수
String encPara = "";
String decPara = "";
String encMsg = ""; // HMAC 메세지
String discrHash = ""; // 중복가입확인정보
String name = ""; // 성명
// String reqNum = ""; // 요청번호(복호화)
// String vDiscrNo = ""; // 가상식별번호
// String result = ""; // 결과값 (1인경우에만 정상)
// String age = "";
// String sex = "";
// String ip = "";
// String authInfo = ""; // 발급수단정보
// String birth = "";
// String fgn = ""; // 외국인구분
// String ciVersion = ""; // 연계정보 버젼
// String ciscrHash = ""; // 연계정보
String msgChk = "N"; // 위조/변조 검증 결과
// 1. 암호화 모듈 (jar) Loading
SciSecuManager sciSecuMg = new SciSecuManager();
sciSecuMg.setInfoPublic("YYY001","BA92414622515048479AB7B12A6DBD3A");
retInfo = sciSecuMg.getDec(retInfo, tranjectionReqNum);
// 2.1차 파싱---------------------------------------------------------------
int inf1 = retInfo.indexOf("/",0);
int inf2 = retInfo.indexOf("/",inf1+1);
encPara = retInfo.substring(0,inf1); //암호화된 통합 파라미터
encMsg = retInfo.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
if(sciSecuMg.getMsg(encPara).equals(encMsg)){
msgChk="Y";
}
// 비정상 접근 처리
if(msgChk.equals("N")) {
model.addAttribute("msgChk", msgChk);
return "web/cop/selfauth/ipinResultSeed";
}
// 4.파라미터별 값 가져오기 ---------------------------------------------------------------
decPara = sciSecuMg.getDec(encPara, tranjectionReqNum);
int info1 = decPara.indexOf("/",0);
int info2 = decPara.indexOf("/",info1+1);
int info3 = decPara.indexOf("/",info2+1);
int info4 = decPara.indexOf("/",info3+1);
int info5 = decPara.indexOf("/",info4+1);
int info6 = decPara.indexOf("/",info5+1);
int info7 = decPara.indexOf("/",info6+1);
int info8 = decPara.indexOf("/",info7+1);
int info9 = decPara.indexOf("/",info8+1);
int info10 = decPara.indexOf("/",info9+1);
int info11 = decPara.indexOf("/",info10+1);
int info12 = decPara.indexOf("/",info11+1);
int info13 = decPara.indexOf("/",info12+1);
name = decPara.substring(info2+1,info3);
discrHash = decPara.substring(info10+1,info11);
// reqNum = decPara.substring(0,info1);
// vDiscrNo = decPara.substring(info1+1,info2);
// result = decPara.substring(info3+1,info4);
// age = decPara.substring(info4+1,info5);
// sex = decPara.substring(info5+1,info6);
// ip = decPara.substring(info6+1,info7);
// authInfo = decPara.substring(info7+1,info8);
// birth = decPara.substring(info8+1,info9);
// fgn = decPara.substring(info9+1,info10);
// ciVersion = decPara.substring(info11+1,info12); //CI관련 데이터는 계약시 설정하는 값입니다.
// ciscrHash = decPara.substring(info12+1,info13); //데이터를 원하실 경우 영업팀을 통해 승인받으신후 주석제거 해주십시요
discrHash = sciSecuMg.getDec(discrHash, tranjectionReqNum); //중복가입확인정보는 한번더 복호화
// ciscrHash = sciSecuMg.getDec(ciscrHash, tranjectionReqNum); //연계정보는 한번더 복호화
// 사용자 세션생성
UserVO userVO = new UserVO();
userVO.setName(name);
userVO.setMblDn(discrHash);
request.getSession().setAttribute("userVO", userVO);
String returnType = (String)request.getSession().getAttribute("returnType");
String returnUrl = (String)request.getSession().getAttribute("returnUrl");
// if (!("resveAdd").equals(returnType) && !("resveInqire").equals(returnType)) {
// BoardVO searchVO = (BoardVO)request.getSession().getAttribute("searchVO");
// model.addAttribute("searchVO", searchVO);
// }
model.addAttribute("returnType", returnType);
model.addAttribute("returnUrl", returnUrl);
model.addAttribute("name", name);
return "web/cop/selfauth/resultSeed";
}
}