GPKI 인증서 로그인 기능을 구현하려고 하는 경우에는 EgovLoginController.java를 다음과 같이 변경한다.
public String loginUsrView(@ModelAttribute("loginVO") LoginVO loginVO,
HttpServletRequest request,
HttpServletResponse response,
ModelMap model)
throws Exception {
// # GPKI 인증을 처리하는 경우
GPKIHttpServletResponse gpkiresponse = null;
GPKIHttpServletRequest gpkirequest = null;
try{
gpkiresponse=new GPKIHttpServletResponse(response);
gpkirequest= new GPKIHttpServletRequest(request);
gpkiresponse.setRequest(gpkirequest);
model.addAttribute("challenge", gpkiresponse.getChallenge());
return "cmm/uat/uia/EgovLoginUsr";
}catch(Exception e){
return "cmm/egovError";
}
}
public String actionCrtfctLogin(@ModelAttribute("loginVO") LoginVO loginVO,
HttpServletRequest request,
HttpServletResponse response,
ModelMap model)
throws Exception {
// # GPKI 인증을 처리하는 경우
// 접속IP
String userIp = EgovClntInfo.getClntIP(request);
// 1. GPKI 인증
GPKIHttpServletResponse gpkiresponse = null;
GPKIHttpServletRequest gpkirequest = null;
String dn = "";
try{
gpkiresponse = new GPKIHttpServletResponse(response);
gpkirequest = new GPKIHttpServletRequest(request);
gpkiresponse.setRequest(gpkirequest);
X509Certificate cert = null;
byte[] signData = null;
byte[] privatekey_random = null;
String signType = "";
String queryString = "";
cert = gpkirequest.getSignerCert();
dn = cert.getSubjectDN();
java.math.BigInteger b = cert.getSerialNumber();
b.toString();
int message_type = gpkirequest.getRequestMessageType();
if( message_type == gpkirequest.ENCRYPTED_SIGNDATA ||
message_type == gpkirequest.LOGIN_ENVELOP_SIGN_DATA ||
message_type == gpkirequest.ENVELOP_SIGNDATA ||
message_type == gpkirequest.SIGNED_DATA){
signData = gpkirequest.getSignedData();
if(privatekey_random != null) {
privatekey_random = gpkirequest.getSignerRValue();
}
signType = gpkirequest.getSignType();
}
queryString = gpkirequest.getQueryString();
}catch(Exception e){
return "cmm/egovError";
}
// 2. 업무사용자 테이블에서 dn값으로 사용자의 ID, PW를 조회하여
// 이를 일반로그인 형태로 인증하도록 함
if (dn != null && !dn.equals("")) {
loginVO.setDn(dn);
LoginVO resultVO = loginService.actionCrtfctLogin(loginVO);
if (resultVO != null && resultVO.getId() != null &&
!resultVO.getId().equals("")) {
// 3. spring security 연동
return "redirect:/j_spring_security_check?j_username=" +
resultVO.getUserSe() + resultVO.getId() +
"&j_password=" + resultVO.getUniqId();
} else {
model.addAttribute("message",
egovMessageSource.getMessage("fail.common.login"));
return "cmm/uat/uia/EgovLoginUsr";
}
} else {
model.addAttribute("message",
egovMessageSource.getMessage("fail.common.login"));
return "cmm/uat/uia/EgovLoginUsr";
}
}