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"; } }
반응형
'개발 > JAVA' 카테고리의 다른 글
java RedirectAttributes 사용시 주의점 (0) | 2018.11.26 |
---|---|
java pdf 생성 라이브러리 (0) | 2018.11.26 |
서버에서 OPEN API 연결 예제 (0) | 2018.05.08 |
spring security 적용관련 좋은예제 (0) | 2018.03.13 |
[JAVA/자바] Jad Decompiler 설치 및 사용 (0) | 2018.02.09 |