package seed.com.user.check; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; import java.util.Map; import java.util.Random; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.sci.v2.ipin.secu.SciSecuManager; import com.sci.v2.ipin.secu.hmac.SciHmac; import kcc.com.utl.fcc.service.EgovNumberUtil; import kcc.com.utl.fcc.service.EgovStringUtil; import seed.com.gtm.util.JSONView; import seed.utils.SeedUtils; @Controller public class UserCheckController { @RequestMapping("/user/case/userCheck/mediation/auth.do") public String setMediationAuth(ModelMap map, HttpServletRequest req, HttpServletResponse response, HttpSession session, // @PathVariable(value="siteIdx") String siteIdx, @RequestParam Map paramMap){ /*----권한체크----*/ // setSessionMessageRemove(session); // Integer memberIdx = Integer.valueOf(SeedUtils.setReplaceNull(session.getAttribute("memberIdx"),"0")); // String memberGrant = (memberIdx == 0) ? "N" : SeedUtils.setReplaceNull(managerMemberService.getMemberMapForm(memberIdx, new String[] {"memberGrant"}).get("_memberGrant"), "N"); // boolean memberAuthM = managerSiteManagerService.getSiteManagerListCnt(siteIdx, memberIdx); // boolean memberAuth = managerSiteMenuManagerService.getSiteMenuManagerListCnt(siteMenuIdx, memberIdx); memberAuthM = true; memberAuth = true; System.out.println("/user/case/userCheck/mediation/auth.do"); session.setAttribute("hpName", "김기복"); session.setAttribute("hpBirYMD", "19871230"); session.setAttribute("hpDi", "test2017"); session.setAttribute("hpCi1", ""); session.setMaxInactiveInterval(10); map.put("siteIdx", "case"); return "/_extra/user/mediation/mediationAuth"; } @RequestMapping("/user/case/userCheck/setCheckCode/sessioncheck.do") public ModelAndView setCheckCodeAndAlert(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, HttpSession session, Map map ){ session.setAttribute("hpName", "김기복"); session.setAttribute("hpBirYMD", "19871230"); session.setAttribute("hpDi", "test2017"); session.setAttribute("hpCi1", ""); session.setMaxInactiveInterval(10); System.out.println("session interval 10 sec !!!"); HashMap hashMap = new HashMap(); if(session.getAttribute("hpName") == null || session.getAttribute("hpName").equals("")){ hashMap.put("status", false); hashMap.put("message", "세션이 만료되었습니다 \n본인인증을 다시해주세요"); }else{ hashMap.put("status", true); hashMap.put("message", "세션유효"); } ModelAndView mavjson = new ModelAndView(new JSONView()); mavjson.addAllObjects(hashMap); return mavjson; } @RequestMapping("/user/case/userCheck/setCheckCode/check.do") public String setCheckCodeAndRedirect(ModelMap map, HttpServletRequest req, HttpServletResponse response, HttpSession session, @RequestParam Map paramMap){ String nextUrl = req.getParameter("nextUrl"); String commandCode = req.getParameter("commandCode"); String srvNo = ""; String hpSrvNo = ""; String agreeCheck = ""; String personalCheck = ""; String mediType = ""; String retUrl = "";//아이핀 인증후 리턴 페이지 String hpRetUrl = "";//모바일 인증후 리턴 페이지 String sServerName = req.getServerName(); if(commandCode.equals("medi")){//분쟁조정신청 본인인증 //개발서버 // srvNo = "007001";// 아이핀 코드 // hpSrvNo = "008001";//휴대폰 코드 //실서버 srvNo = "009001";// 아이핀 코드 hpSrvNo = "012001";//휴대폰 코드 agreeCheck = req.getParameter("agreeCheck"); personalCheck = req.getParameter("personalCheck"); mediType = req.getParameter("mediType"); //개발서버 // retUrl = "23http://ServerName:8080/user/extra/case/siren/ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); // hpRetUrl = "32http://ServerName:8080/user/extra/case/siren/hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); //실서버 retUrl = "23http://fairnet.kofair.or.kr/user/extra/case/siren/ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); hpRetUrl = "32http://fairnet.kofair.or.kr/user/extra/case/siren/hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); session.setAttribute("agreeCheck", agreeCheck); session.setAttribute("personalCheck", personalCheck); session.setAttribute("mediType", mediType); //hpName존재하면 이미 본인인증을 거쳤기 때문에 다음으로 바로 넘어간다. if(!SeedUtils.setReplaceNull(session.getAttribute("hpName")).equals("")){ // nextUrl = "/user/mediation/case/05/154/mediationStep04Ftc.do"; nextUrl = "/user/mediation/case/05/154/mediationStep04.do"; } }else if(commandCode.equals("my")){//마이페이지 본인인증 //개발서버 // srvNo = "007002"; // hpSrvNo = "008002"; //실서버 srvNo = "009002"; hpSrvNo = "012002"; //개발서버 // retUrl = "23http://ServerName:8080/user/extra/case/siren/myPage_ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); // hpRetUrl = "32http://ServerName:8080/user/extra/case/siren/myPage_hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); //실서버 retUrl = "23http://fairnet.kofair.or.kr/user/extra/case/siren/myPage_ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); hpRetUrl = "32http://fairnet.kofair.or.kr/user/extra/case/siren/myPage_hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); }else if(commandCode.equals("online")){//온라인 분쟁조정 상담 본인인증 //개발서버 srvNo = "007003"; hpSrvNo = "008003"; //실서버 // srvNo = "009003"; // hpSrvNo = "012003"; personalCheck = req.getParameter("personalCheck"); session.setAttribute("personalCheck", personalCheck); //개발서버 // retUrl = "23http://ServerName:8080/user/extra/case/siren/onlineCounsel_ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); // hpRetUrl = "32http://ServerName:8080/user/extra/case/siren/onlineCounsel_hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); //실서버 retUrl = "23http://fairnet.kofair.or.kr/user/extra/case/siren/onlineCounsel_ipin_popup_seed/jsp/Page.do"; hpRetUrl = "32http://fairnet.kofair.or.kr/user/extra/case/siren/onlineCounsel_hpParamPop/jsp/Page.do"; //hpName존재하면 이미 본인인증을 거쳤기 때문에 다음으로 바로 넘어간다. if(!SeedUtils.setReplaceNull(session.getAttribute("hpName")).equals("")){ nextUrl = "/user/onlineCounsel/case/01/158/write.do"; } }else if(commandCode.equals("law")){ //개발서버 // srvNo = "007004"; // hpSrvNo = "008005"; //실서버 srvNo = "009004"; hpSrvNo = "012004"; personalCheck = req.getParameter("personalCheck"); session.setAttribute("personalCheck", personalCheck); //개발서버 // retUrl = "23http://ServerName:8080/user/extra/case/siren/lawCounsel_ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); // hpRetUrl = "32http://ServerName:8080/user/extra/case/siren/lawCounsel_hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); //실서버 retUrl = "23http://fairnet.kofair.or.kr/user/extra/case/siren/lawCounsel_ipin_popup_seed/jsp/Page.do"; hpRetUrl = "32http://fairnet.kofair.or.kr/user/extra/case/siren/lawCounsel_hpParamPop/jsp/Page.do"; //hpName존재하면 이미 본인인증을 거쳤기 때문에 다음으로 바로 넘어간다. if(!SeedUtils.setReplaceNull(session.getAttribute("hpName")).equals("")){ nextUrl = "/user/lawCounsel/case/02/159/lawWrite.do"; } }else if(commandCode.equals("medi_check")){ //개발서버 // srvNo = "007005"; // hpSrvNo = "008006"; //실서버 srvNo = "009005"; hpSrvNo = "012005"; String caseNo = req.getParameter("caseNo"); String checkPass = req.getParameter("checkPass"); session.setAttribute("caseNo", caseNo); session.setAttribute("checkPass", checkPass); //개발서버 // retUrl = "23http://ServerName:8080/user/extra/case/siren/checkMedi_ipin_popup_seed/jsp/Page.do"; // retUrl = retUrl.replaceAll("ServerName", sServerName); // hpRetUrl = "32http://ServerName:8080/user/extra/case/siren/checkMedi_hpParamPop/jsp/Page.do"; // hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); //실서버 retUrl = "23http://fairnet.kofair.or.kr/user/extra/case/siren/checkMedi_ipin_popup_seed/jsp/Page.do"; hpRetUrl = "32http://fairnet.kofair.or.kr/user/extra/case/siren/checkMedi_hpParamPop/jsp/Page.do"; //hpName존재하면 이미 본인인증을 거쳤기 때문에 다음으로 바로 넘어간다. /* if(!SeedUtils.setReplaceNull(session.getAttribute("hpName")).equals("")){ nextUrl = "/user/mediation/case/03/155/checkMediationStep03.do"; }*/ } //나중에 메인 페이지 나오면 튕겨내기 if(nextUrl == null || agreeCheck == null){ map.put("siteIdx", "case"); map.put("url", "/case/index.do"); map.put("message", "잘못된 접근 입니다."); map.put("opener", ""); map.put("append", ""); map.put("self", ""); return "/_common/jsp/umessage"; } /** * 아이핀 인증 시작 */ //String sServerName = req.getServerName(); //회원사 ID : KFA001 String id = "KFA001"; //회원가입화면용 결과 수신 URL : 23http:/211.43.219.170/hp/meb/pinSignupView.do //String retUrl = "23http://ServerName/user/extra/case/siren/ipin_popup_seed/jsp/Page.do"; //retUrl = retUrl.replaceAll("ServerName", sServerName); //분쟁조정신청 서비스 번호 : 006001 // String srvNo = "006001"; //요청번호(유닉크한 랜덤값) : 40 byte까지 String reqNum = "kofair" + EgovStringUtil.getTimeStamp() + EgovNumberUtil.getRandomNum(1000, 9999); session.setAttribute("id", id); session.setAttribute("retUrl", retUrl); session.setAttribute("srvNo", srvNo); session.setAttribute("reqNum", reqNum); //복호화용 임시필드 String exVar = "0000000000000000"; /** * * reqNum 값은 최종 결과값 복호화를 위한 SecuKey로 활용 되므로 중요합니다. * reqNum 은 아이핀 서비스 요청시 항상 새로운 값으로 중복 되지 않게 생성 해야 합니다. * 쿠키 또는 Session및 기타 방법을 사용해서 reqNum 값을 * ipin_result_seed.jsp에서 가져 올 수 있도록 해야 함. * 샘플을 위해서 쿠키를 사용한 것이므로 참고 하시길 바랍니다. * */ /* Cookie c = new Cookie("reqNum", reqNum); //c.setMaxAge(1800); // <== 필요시 설정(초단위로 설정됩니다) response.addCookie(c);*/ session.setAttribute("reqNumKey", reqNum); // 암호화 모듈 선언 SciSecuManager seed = new SciSecuManager(); // 1차 암호화 String encStr = ""; String reqInfo = reqNum + "/" + id + "/" + srvNo + "/" + exVar; encStr = seed.getEncPublic(reqInfo); // 위변조 검증 값 등록 SciHmac hmac = new SciHmac(); String hmacMsg = SciHmac.HMacEncriptPublic(encStr); // 2차 암호화 reqInfo = seed.getEncPublic(encStr + "/" + hmacMsg + "/" + "00000000"); session.setAttribute("reqInfo", reqInfo); /** * 아이핀 인증 끝 */ /** * 핸드폰 인증 시작 */ //날짜 생성 Calendar today = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String day = sdf.format(today.getTime()); java.util.Random ran = new Random(); //랜덤 문자 길이 int numLength = 6; String randomStr = ""; for (int i = 0; i < numLength; i++) { //0 ~ 9 랜덤 숫자 생성 randomStr += ran.nextInt(10); } //reqNum은 최대 40byte 까지 사용 가능 String hpId = "SKFA001"; // 본인실명확인 회원사 아이디 //String hpSrvNo = "005001"; // 본인실명확인 서비스번호 String hpReqNum = day + randomStr; // 본인실명확인 요청번호 String hpExVar = "0000000000000000"; // 복호화용 임시필드 String hpCertDate = day; // 본인실명확인 요청시간 String hpCertGb = "H"; // 본인실명확인 본인확인 인증수단 String hpAddVar = ""; // 본인실명확인 추가 파라메터 //String hpRetUrl = "32http://ServerName/kmcis/kmcisIdSearch.jsp"; // 본인인증서비스 결과수신 POPUP URL //String hpRetUrl = "32http://ServerName/user/extra/case/siren/hpParamPop/jsp/Page.do"; //hpRetUrl = "32http://kofair2.global-it.co.kr/kmcis/kmcisIdSearch.jsp"; //hpRetUrl = hpRetUrl.replaceAll("ServerName", sServerName); //오픈할 때 주석으로 교체해줘야함 /** * * reqNum 값은 최종 결과값 복호화를 위한 SecuKey로 활용 되므로 중요합니다. * reqNum 은 본인 확인 요청시 항상 새로운 값으로 중복 되지 않게 생성 해야 합니다. * 쿠키 또는 Session및 기타 방법을 사용해서 reqNum 값을 * pcc_V3_result_seed.jsp에서 가져 올 수 있도록 해야 함. * 샘플을 위해서 쿠키를 사용한 것이므로 참고 하시길 바랍니다. * */ /*Cookie hpC = new Cookie("hpReqNum", hpReqNum); //c.setMaxAge(1800); // <== 필요시 설정(초단위로 설정됩니다) response.addCookie(hpC);*/ session.setAttribute("hpReqNumKey", hpReqNum); //01. 암호화 모듈 선언 com.sci.v2.pcc.secu.SciSecuManager hpSeed = new com.sci.v2.pcc.secu.SciSecuManager(); //02. 1차 암호화 String hpEncStr = ""; String hpReqInfo = hpId+"^"+hpSrvNo+"^"+hpReqNum+"^"+hpCertDate+"^"+hpCertGb+"^"+hpAddVar+"^"+hpExVar; // 데이터 암호화 hpEncStr = hpSeed.getEncPublic(hpReqInfo); //03. 위변조 검증 값 생성 com.sci.v2.pcc.secu.hmac.SciHmac hpHmac = new com.sci.v2.pcc.secu.hmac.SciHmac(); String hpHmacMsg = hpHmac.HMacEncriptPublic(hpEncStr); //03. 2차 암호화 hpReqInfo = hpSeed.getEncPublic(hpEncStr + "^" + hpHmacMsg + "^" + "0000000000000000"); //2차암호화 session.setAttribute("hpRetUrl", hpRetUrl); session.setAttribute("hpReqInfo", hpReqInfo); /** * 핸드폰 인증 끝 */ return "redirect:" + nextUrl; } //"/user/check/case/01/154/getCheckCode/check.do" ///user/case/userCheck/getCheckCode/check.do @RequestMapping("/user/siren/case/04/154/check.do") public String getCheckCodeAndRedirect(ModelMap map, HttpServletRequest req, HttpServletResponse response, HttpSession session, @RequestParam("retInfo") String retInfo, @RequestParam("nextUrl") String nextUrl){ String hpName = ""; //성명 String hpSex = ""; //성별 String hpBirYMD = ""; //생년월일 String hpFgnGbn = ""; //내외국인 구분값 String hpDi = ""; //DI String hpCi1 = ""; //CI String hpCi2 = ""; //CI String hpResult = ""; // 본인확인결과 (Y/N) String hpCertDate = ""; // 검증시간 String hpCertGb = ""; // 인증수단 String hpCellNo = ""; // 핸드폰 번호 String hpCellCorp = ""; // 이동통신사 String hpAddVar = ""; //복화화용 변수 String hpEncPara = ""; String hpEncMsg = ""; String hpMsgChk = "N"; //----------------------------------------------------------------------------------------------------------------- //쿠키값 가져 오기 /* Cookie[] cookies = req.getCookies(); String cookiename = ""; String cookiereqNum = ""; if(cookies!=null){ for (int i = 0; i < cookies.length; i++){ Cookie hpC = cookies[i]; cookiename = hpC.getName(); cookiereqNum = hpC.getValue(); if(cookiename.compareTo("hpReqNum")==0) break; cookiereqNum = null; } }*/ String hpReqNumKey = (String)session.getAttribute("hpReqNumKey"); // 1. 암호화 모듈 (jar) Loading com.sci.v2.pcc.secu.SciSecuManager sciSecuMg = new com.sci.v2.pcc.secu.SciSecuManager(); //쿠키에서 생성한 값을 Key로 생성 한다. retInfo = sciSecuMg.getDec(retInfo, hpReqNumKey); // 2.1차 파싱--------------------------------------------------------------- String[] aRetInfo1 = retInfo.split("\\^"); hpEncPara = aRetInfo1[0]; //암호화된 통합 파라미터 hpEncMsg = aRetInfo1[1]; //암호화된 통합 파라미터의 Hash값 String encMsg2 = sciSecuMg.getMsg(hpEncPara); // 3.위/변조 검증 --------------------------------------------------------------- if(encMsg2.equals(hpEncMsg)){ hpMsgChk="Y"; } if(hpMsgChk.equals("N")){ map.put("siteIdx", "case"); map.put("url", "/case/index.do"); map.put("message", "잘못된 접근 입니다."); map.put("opener", ""); map.put("append", ""); map.put("self", ""); return "/_common/jsp/umessage"; } retInfo = sciSecuMg.getDec(hpEncPara, hpReqNumKey); String[] aRetInfo = retInfo.split("\\^"); hpName = aRetInfo[0]; hpBirYMD = aRetInfo[1]; hpSex = aRetInfo[2]; hpFgnGbn = aRetInfo[3]; hpDi = aRetInfo[4]; hpCi1 = aRetInfo[5]; hpCi2 = aRetInfo[6]; hpResult = aRetInfo[9]; hpCellNo = aRetInfo[11]; hpCellCorp = aRetInfo[12]; hpAddVar = aRetInfo[14]; /* String[] valList = hpAddVar.split(","); String agreeCheck = ""; String personalCheck = ""; String mediType = ""; if(valList.length > 1){ agreeCheck = valList[0]; personalCheck = valList[1]; mediType = valList[2]; }*/ //이름은 인코딩되서 날라옴 try { hpName = URLDecoder.decode(hpName, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } session.setAttribute("hpName", hpName); session.setAttribute("hpBirYMD", hpBirYMD); session.setAttribute("hpSex", hpSex); session.setAttribute("hpFgnGbn", hpFgnGbn); session.setAttribute("hpDi", hpDi); session.setAttribute("hpCi1", hpCi1); session.setAttribute("hpCi2", hpCi2); session.setAttribute("hpResult", hpResult); session.setAttribute("hpCellNo", hpCellNo); session.setAttribute("hpCellCorp", hpCellCorp); session.setAttribute("hpAddVar", hpAddVar); /* session.setAttribute("agreeCheck", agreeCheck); session.setAttribute("personalCheck", personalCheck); session.setAttribute("mediType", mediType);*/ //세션유지 2시간 session.setMaxInactiveInterval(60*60*2); return "redirect:" + nextUrl; } @RequestMapping("/user/siren/case/04/154/check2.do") public String getCheckCodeAndRedirect2(ModelMap map, HttpServletRequest req, HttpServletResponse response, HttpSession session, @RequestParam("retInfo") String retInfo, @RequestParam("nextUrl") String nextUrl){ String encPara = ""; String decPara = ""; String encMsg = ""; // HMAC 메세지 String reqNum = "";// 요청번호(복호화) String vDiscrNo = "";// 가상식별번호 String name = ""; // 성명 String result = "";// 결과값 (1인경우에만 정상) String age = ""; String sex = ""; String ip = ""; String authInfo = ""; // 발급수단정보 String birth = ""; String fgn = ""; // 외국인구분 String discrHash = "";// 중복가입확인정보 String msgChk = "N"; // 위조/변조 검증 결과 //쿠키값 가져 오기 /* Cookie[] cookies = req.getCookies(); String tranjectionName = "";*/ String tranjectionReqNum = ""; /* if (cookies != null) { for (int i = 0; i < cookies.length; ++i) { Cookie c = cookies[i]; tranjectionName = c.getName(); tranjectionReqNum = c.getValue(); if (tranjectionName.compareTo("reqNum") == 0) break; tranjectionReqNum = ""; } }*/ tranjectionReqNum = (String)session.getAttribute("reqNumKey"); // 1. 암호화 모듈 (jar) Loading SciSecuManager sciSecuMg = new SciSecuManager(); retInfo = sciSecuMg.getDec(retInfo, tranjectionReqNum); 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")) { map.put("siteIdx", "case"); map.put("url", "/case/index.do"); map.put("message", "잘못된 접근 입니다."); map.put("opener", ""); map.put("append", ""); map.put("self", ""); return "/_common/jsp/umessage"; } // 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); reqNum = decPara.substring(0, info1); vDiscrNo = decPara.substring(info1 + 1, info2); try { name = URLDecoder.decode(decPara.substring(info2 + 1, info3), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 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); discrHash = decPara.substring(info10 + 1, info11); discrHash = sciSecuMg.getDec(discrHash, tranjectionReqNum); //중복가입확인정보는 한번더 복호화 session.setAttribute("hpName", name); session.setAttribute("hpBirYMD", birth); session.setAttribute("hpDi", discrHash); session.setAttribute("hpCi1", ""); //세션유지 2시간 session.setMaxInactiveInterval(60*60*2); return "redirect:" + nextUrl; } }