390 lines
12 KiB
Java
390 lines
12 KiB
Java
package kcc.let.uat.uia.web;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.ui.Model;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
import com.barocert.BarocertException;
|
|
import com.barocert.kakaocert.KakaocertService;
|
|
import com.barocert.navercert.NavercertService;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
import kcc.let.uat.uia.service.CertService;
|
|
import kcc.let.uat.uia.service.CertVO;
|
|
import seed.utils.FairnetUtils;
|
|
import seed.utils.SeedUtils;
|
|
import seed.utils.kCertDecryptor;
|
|
import seed.utils.nCertDecryptor;
|
|
|
|
/**
|
|
* @packageName : kcc.let.uat.uia.web
|
|
* @fileName : SocialCertController.java
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description : 소셜 로그인(네이버, 카카오)
|
|
* ===========================================================
|
|
* DATE AUTHOR NOTE
|
|
* -----------------------------------------------------------
|
|
* 2024.11.21 JunHo Lee 최초 생성
|
|
*/
|
|
/**
|
|
* @packageName : kcc.let.uat.uia.web
|
|
* @fileName : SocialCertController.java
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description :
|
|
* ===========================================================
|
|
* DATE AUTHOR NOTE
|
|
* -----------------------------------------------------------
|
|
* 2024.11.21 JunHo Lee 최초 생성
|
|
*/
|
|
@Controller
|
|
public class SocialCertController {
|
|
|
|
@Autowired
|
|
private NavercertService navercertService;
|
|
|
|
@Autowired
|
|
private KakaocertService kakaocertService;
|
|
|
|
@Autowired
|
|
private CertService certService;
|
|
|
|
@Value("#{NAVER_CONFIG.ClientCode}")
|
|
private String NaverClientCode;
|
|
|
|
@Value("#{KAKAO_CONFIG.ClientCode}")
|
|
private String KakaoClientCode;
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @methodName : nCertStep1
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description :
|
|
* @param m
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
@RequestMapping(value = "/web/user/cert/nCertStep1.do")
|
|
public String nCertStep1(Model m) throws Exception {
|
|
return "uat/uia/NCertStep1";
|
|
}
|
|
|
|
/**
|
|
* @methodName : kCertStep1
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description :
|
|
* @param m
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
@RequestMapping(value = "/web/user/cert/kCertStep1.do")
|
|
public String kCertStep1(Model m) throws Exception {
|
|
return "uat/uia/KCertStep1";
|
|
}
|
|
|
|
|
|
/**
|
|
* @methodName : nCertStep2
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description :
|
|
* @param m
|
|
* @param certVO
|
|
* @return
|
|
* @throws BarocertException
|
|
*/
|
|
@RequestMapping(value = "/web/user/cert/nCertStep2.do")
|
|
public String nCertStep2(Model m, CertVO certVO) throws BarocertException {
|
|
|
|
// 본인인증 요청 정보 객체
|
|
com.barocert.navercert.identity.Identity identity = new com.barocert.navercert.identity.Identity();
|
|
|
|
// 수신자 휴대폰번호 - 11자 (하이픈 제외)
|
|
identity.setReceiverHP(navercertService.encrypt(certVO.getPhone()));
|
|
// 수신자 성명 - 80자
|
|
identity.setReceiverName(navercertService.encrypt(certVO.getName()));
|
|
// 수신자 생년월일 - 8자 (yyyyMMdd)
|
|
identity.setReceiverBirthday(navercertService.encrypt(certVO.getBirth()));
|
|
|
|
// 고객센터 연락처 - 최대 12자
|
|
identity.setCallCenterNum("1600-9854");
|
|
// 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능
|
|
identity.setExpireIn(1000);
|
|
|
|
// AppToApp 인증요청 여부
|
|
// true - AppToApp 인증방식, false - 푸시(Push) 인증방식
|
|
identity.setAppUseYN(false);
|
|
|
|
try {
|
|
com.barocert.navercert.identity.IdentityReceipt request = navercertService.requestIdentity(NaverClientCode, identity);
|
|
|
|
m.addAttribute("request", request);
|
|
} catch (BarocertException ne) {
|
|
m.addAttribute("Exception", "요청에 실패했습니다.");
|
|
return "redirect:/web/user/cert/nCertStep1.do";
|
|
}
|
|
|
|
return "uat/uia/NCertStep2";
|
|
}
|
|
|
|
/**
|
|
* @methodName : kCertStep2
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description :
|
|
* @param m
|
|
* @return
|
|
* @throws BarocertException
|
|
*/
|
|
@RequestMapping(value = "/web/user/cert/kCertStep2.do")
|
|
public String kCertStep2(Model m, CertVO certVO) throws BarocertException {
|
|
|
|
// 본인인증 요청 정보 객체
|
|
com.barocert.kakaocert.identity.Identity identity = new com.barocert.kakaocert.identity.Identity();
|
|
|
|
// 수신자 휴대폰번호 - 11자 (하이픈 제외)
|
|
identity.setReceiverHP(kakaocertService.encrypt(certVO.getPhone()));
|
|
// 수신자 성명 - 80자
|
|
identity.setReceiverName(kakaocertService.encrypt(certVO.getName()));
|
|
// 수신자 생년월일 - 8자 (yyyyMMdd)
|
|
identity.setReceiverBirthday(kakaocertService.encrypt(certVO.getBirth()));
|
|
|
|
// 인증요청 메시지 제목 - 최대 40자
|
|
identity.setReqTitle("분쟁조정사건처리시스템 본인인증");
|
|
// 커스텀 메시지 - 최대 500자
|
|
identity.setExtraMessage(kakaocertService.encrypt("한국공정거래조정원 분쟁조정사건처리시스템 본인인증 요청입니다."));
|
|
// 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능
|
|
identity.setExpireIn(1000);
|
|
// 서명 원문 - 최대 40자 까지 입력가능
|
|
identity.setToken(kakaocertService.encrypt("본인인증 요청 원문"));
|
|
|
|
// AppToApp 인증요청 여부
|
|
// true - AppToApp 인증방식, false - Talk Message 인증방식
|
|
identity.setAppUseYN(false);
|
|
|
|
|
|
try {
|
|
com.barocert.kakaocert.identity.IdentityReceipt request = kakaocertService.requestIdentity(KakaoClientCode, identity);
|
|
m.addAttribute("request", request);
|
|
} catch (BarocertException ke) {
|
|
m.addAttribute("Exception", ke);
|
|
return "redirect:/web/user/cert/kCertStep1.do";
|
|
}
|
|
|
|
return "uat/uia/KCertStep2";
|
|
}
|
|
|
|
|
|
/**
|
|
* @methodName : nCertStep3Ajax
|
|
* @author : JunHo Lee
|
|
* @date : 2024.11.21
|
|
* @description :
|
|
* @param reqeust
|
|
* @param repn
|
|
* @return
|
|
* @throws BarocertException
|
|
*/
|
|
@RequestMapping(value = "/web/user/cert/nCertStep3Ajax.do")
|
|
public ResponseEntity<?> nCertStep3Ajax(HttpServletRequest reqeust, HttpServletResponse repn, CertVO certVO) {
|
|
|
|
Map<String, String> returnData = new HashMap<String, String>();
|
|
|
|
com.barocert.navercert.identity.IdentityStatus status = null;
|
|
try {
|
|
status = navercertService.getIdentityStatus(NaverClientCode, certVO.getReceiptID());
|
|
} catch (BarocertException e) {
|
|
returnData.put("result", "requestFail");
|
|
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}
|
|
|
|
if(status != null && status.getState() == 1) {
|
|
|
|
com.barocert.navercert.identity.IdentityResult result = null;
|
|
try {
|
|
result = navercertService.verifyIdentity(NaverClientCode, certVO.getReceiptID());
|
|
} catch (BarocertException e) {
|
|
returnData.put("result", "requestFail");
|
|
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}
|
|
|
|
returnData.put("result", "success");
|
|
returnData.put("msg", "인증되었습니다.");
|
|
|
|
//세션 등록
|
|
FairnetUtils.setCertSession(reqeust, nDecrypt(result.getReceiverName()), nDecrypt(result.getReceiverHP()), "");
|
|
|
|
certVO.setPhone(nDecrypt(result.getReceiverHP()));
|
|
certVO.setName(nDecrypt(result.getReceiverName()));
|
|
|
|
String ori = "ReceiptID: " + result.getReceiptID()
|
|
+ ", ReceiverDay: " + nDecrypt(result.getReceiverDay())
|
|
+ ", ReceiverEmail: " + nDecrypt(result.getReceiverEmail())
|
|
+ ", ReceiverForeign: " + nDecrypt(result.getReceiverForeign())
|
|
+ ", ReceiverGender: " + nDecrypt(result.getReceiverGender())
|
|
+ ", ReceiverHP: " + nDecrypt(result.getReceiverHP())
|
|
+ ", ReceiverName: " + nDecrypt(result.getReceiverName())
|
|
+ ", ReceiverYear: " + nDecrypt(result.getReceiverYear())
|
|
// + ", SignedData: " + result.getSignedData()
|
|
+ ", State: " + result.getState()
|
|
+ ", Ci: " + nDecrypt(result.getCi());
|
|
|
|
certVO.setCertOri(ori);
|
|
|
|
certVO.setCertType("N");
|
|
|
|
try {
|
|
//인증 사용자 insert
|
|
certService.insertCert(certVO);
|
|
//인증 로그 insert
|
|
certService.insertCertLog(certVO);
|
|
} catch (Exception e) {
|
|
System.out.println("인증 정보 등록 실패!!!!!!!!!");
|
|
}
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}else {
|
|
returnData.put("result", "fail");
|
|
returnData.put("msg", "인증 후 다시 클릭해 주세요.");
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping(value = "/web/user/cert/kCertStep3Ajax.do")
|
|
public ResponseEntity<?> kCertStep3Ajax(HttpServletRequest reqeust, HttpServletResponse repn, CertVO certVO) {
|
|
|
|
Map<String, String> returnData = new HashMap<String, String>();
|
|
|
|
com.barocert.kakaocert.identity.IdentityStatus status = null;
|
|
try {
|
|
status = kakaocertService.getIdentityStatus(KakaoClientCode, certVO.getReceiptID());
|
|
} catch (BarocertException e) {
|
|
returnData.put("result", "requestFail");
|
|
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}
|
|
|
|
if(status != null && status.getState() == 1) {
|
|
|
|
com.barocert.kakaocert.identity.IdentityResult result = null;
|
|
try {
|
|
result = kakaocertService.verifyIdentity(KakaoClientCode, certVO.getReceiptID());
|
|
} catch (BarocertException e) {
|
|
returnData.put("result", "requestFail");
|
|
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}
|
|
|
|
returnData.put("result", "success");
|
|
returnData.put("msg", "인증되었습니다.");
|
|
|
|
//세션 등록
|
|
FairnetUtils.setCertSession(reqeust, kDecrypt(result.getReceiverName()), kDecrypt(result.getReceiverHP()), "");
|
|
|
|
certVO.setPhone(kDecrypt(result.getReceiverHP()));
|
|
certVO.setName(kDecrypt(result.getReceiverName()));
|
|
|
|
String ori = "ReceiptID: " + result.getReceiptID()
|
|
+ ", State: " + result.getState()
|
|
// + ", SignedData: " + result.getSignedData()
|
|
+ ", Ci: " + kDecrypt(result.getCi())
|
|
+ ", ReceiverName: " + kDecrypt(result.getReceiverName())
|
|
+ ", ReceiverYear: " + kDecrypt(result.getReceiverYear())
|
|
+ ", ReceiverDay: " + kDecrypt(result.getReceiverDay())
|
|
+ ", ReceiverHP: " + kDecrypt(result.getReceiverHP())
|
|
+ ", ReceiverGender: " + kDecrypt(result.getReceiverGender());
|
|
|
|
certVO.setCertOri(ori);
|
|
|
|
certVO.setCertType("K");
|
|
|
|
try {
|
|
//인증 사용자 insert
|
|
certService.insertCert(certVO);
|
|
//인증 로그 insert
|
|
certService.insertCertLog(certVO);
|
|
} catch (Exception e) {
|
|
System.out.println("인증 정보 등록 실패!!!!!!!!!");
|
|
}
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}else {
|
|
returnData.put("result", "fail");
|
|
returnData.put("msg", "인증 후 다시 클릭해 주세요.");
|
|
|
|
return new ResponseEntity<>(returnData, HttpStatus.OK);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private String nDecrypt(String param){
|
|
|
|
try {
|
|
// 복호화 키
|
|
String secretKey = "0lOKtGZ_wu";
|
|
|
|
// 초기화 벡터
|
|
String iv = "6C2Syq8tbK3eApue";
|
|
|
|
// 암호문
|
|
String cipherText = SeedUtils.setReplaceNull(param);
|
|
|
|
nCertDecryptor decryptor = new nCertDecryptor();
|
|
String decryptedCI = decryptor.decrypt(secretKey, iv, cipherText);
|
|
|
|
return decryptedCI;
|
|
|
|
} catch (Exception e) {
|
|
System.out.println("복호화 실패!!!");
|
|
return param;
|
|
}
|
|
}
|
|
|
|
private String kDecrypt(String param) {
|
|
// 복호화 키
|
|
String secretKey = "+EJwVvo37PY1v4zcENdmGezYXwCdmtUlbaNVI0kvrFM=";
|
|
// 초기화 벡터
|
|
String iv = "uG+F70tIcBb3z1lh8RcVDQ==";
|
|
// 암호문
|
|
String cipherText = SeedUtils.setReplaceNull(param);
|
|
try {
|
|
// 복호화
|
|
kCertDecryptor decryptor = new kCertDecryptor();
|
|
String decryptedCI = decryptor.decrypt(secretKey, iv, cipherText);
|
|
System.out.println(decryptedCI);
|
|
return decryptedCI;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
System.out.println("복호화 실패!!!");
|
|
return param;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|