diff --git a/src/main/java/kcc/let/uat/uia/web/APILoginContoller.java b/src/main/java/kcc/let/uat/uia/web/APILoginContoller.java index a7a94872..cecd9dd5 100644 --- a/src/main/java/kcc/let/uat/uia/web/APILoginContoller.java +++ b/src/main/java/kcc/let/uat/uia/web/APILoginContoller.java @@ -117,7 +117,8 @@ public class APILoginContoller { resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority()); } resultVO.setUrl(returnUrl); - request.getSession().setAttribute("APILoginVO", resultVO); // LoginVO세션 생성 + request.getSession().setAttribute("LoginVO", resultVO); // LoginVO세션 생성 + request.getSession().setAttribute("SSOLoginVO", resultVO); // SSOLogin세션 사용 유지 UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter(); ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); @@ -228,21 +229,22 @@ public class APILoginContoller { Map response = new HashMap<>(); try { loginVO = loginService.selectOffeduMberChk(loginVO); - System.out.println("@@@찾교api - ID :"+loginVO.getId()+"key:"+loginVO.getKey()); if(loginVO != null) { response.put("result_code", "1"); response.put("message", ""); + System.out.println("@@@찾교api - ID :"+loginVO.getId()+"key:"+loginVO.getKey()); + loginService.updateMberSeqKeyNull(loginVO); }else { response.put("result_code", "-1"); response.put("message", "인증오류입니다."); } //찾교 mber_seq key 값 파기 System.out.println("@@@@@찾교 key 파기@@@@@@@@@@"); - loginService.updateMberSeqKeyNull(loginVO); return ResponseEntity.ok(response); }catch (Exception e) { response.put("result_code", "error"); - response.put("message", "Internal Server Error: " + e.getMessage()); + //response.put("message", "Internal Server Error: " + e.getMessage()); + response.put("message", "오류발생"); return ResponseEntity.ok(response); // return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } @@ -289,4 +291,88 @@ public class APILoginContoller { } } + /** + 로그인 세션 테스트용 + */ + @RequestMapping(value = "/web/chkloginKeyForOffeduTest.do") + public String chkloginKeyForOffeduTest(RedirectAttributes redirectAttributes, HttpServletRequest request, HttpServletResponse response,HttpSession session) throws Exception { + String userId = request.getParameter("user_id"); + String key = request.getParameter("key"); + //String returnUrl = paramRequest.get("returnUrl"); //e-배움터 문의결과 returnUrl 컨트롤은 불가능하다고 함 + String returnUrl = ""; + + //테스트를 위한 값 선언 + /*userId = "std02@forwiz.com"; + key = "std02@forwiz.comxpnBtqsev3nh9mryXRdL9QRSR72XuNc08ese5iXHb0Waq1dMnSdkHHqKCgoSFeyH.amV1c19kb21haW4vTE1T"; + returnUrl = "/web/main/mainPage.do";*/ + + if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(key)) { + return "redirect:/web/main/mainPage.do"; + } + + Map result = loginKeytoEEdu(userId, key); + String resultCode = "1"; + String message = "성공"; + userId = "test@naver.com"; + + if(resultCode.equals("1")) { //API 성공 + System.out.println("@@@@@@@@@@API성공@@@@@@@@"); + returnUrl = "/web/main/mainPage.do";//임시 url + //회원테이블에 없던 회원이면 insert, 있던 회원이면 update + UserManageVO userManageVO = new UserManageVO(); + userManageVO.setMberId(userId); + UserManageVO userManageChk = userManageService.selectOffeduUser(userManageVO); + if(userManageChk == null) { + userManageVO.setAuthorCode("ROLE_USER_MEMBER"); + userManageService.insertOffeduUser(userManageVO); + System.out.println("@@@@@@@@@@찾교에 계정생성@@@@@@@@@@"); + } + //로그인 처리 시작 + LoginVO loginVO = new LoginVO(); + loginVO.setId(userId); + loginVO.setPassword("1"); //사용자 로그인만 처리함으로 password 1고정 + loginVO.setUserSe("GNR"); + loginVO.setIp(EgovClntInfo.getClntIP(request)); + + LoginVO resultVO = loginService.APIActionLogin(loginVO); + if (loginService.getUserAuth(resultVO) != null) { + resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority()); + } + resultVO.setUrl(returnUrl); + request.getSession().setAttribute("LoginVO", resultVO); // LoginVO세션 생성 + UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter(); + ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); + Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); + if (beans.size() > 0) { + springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; + springSecurity.setUsernameParameter("egov_security_username"); + springSecurity.setPasswordParameter("egov_security_password"); + springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST")); + + } else { + throw new IllegalStateException("No AuthenticationProcessingFilter"); + } + springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); + //doFilter 처리 시 redirect가 불가능하여, context-security.xml에서 login url로 이동 후 redirect 처리 + System.out.println("@@@@@@@@@@@@@@로그인 처리 완료@@@@@@@@@@@"); + return "blank"; + }else if(resultCode.equals("-101")) { //세션 값 만료 + redirectAttributes.addFlashAttribute("message", message); + returnUrl = "/web/main/mainPage.do"; + return "redirect:" + returnUrl; + }else if(resultCode.equals("-102")) { //회원정보 확인불가 + redirectAttributes.addFlashAttribute("message", message); + returnUrl = "/web/main/mainPage.do"; + return "redirect:" + returnUrl; + }else if(resultCode.equals("-1")) { //API 통신 오류 + redirectAttributes.addFlashAttribute("message", message); + returnUrl = "/web/main/mainPage.do"; + return "redirect:" + returnUrl; + }else { //알 수 없는 오류 + redirectAttributes.addFlashAttribute("message", message); + returnUrl = "/web/main/mainPage.do"; + return "redirect:" + returnUrl; + } + } + } \ No newline at end of file diff --git a/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java b/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java index d5435ff3..61bf3c36 100644 --- a/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java @@ -1588,10 +1588,12 @@ public class EgovLoginController { // e-배움터 연동 로그인 시 - LoginVO 세션의 return url로 이동 try { - LoginVO eEduLoginVO = (LoginVO) session.getAttribute("APILoginVO"); - if(eEduLoginVO.getUrl() != null) { - return "redirect:" + eEduLoginVO.getUrl(); - } + LoginVO eEduLoginVO = (LoginVO) session.getAttribute("LoginVO"); + if(eEduLoginVO != null) { + if(eEduLoginVO.getUrl() != null) { + return "redirect:" + eEduLoginVO.getUrl(); + } + } }catch(Exception ex) { ex.printStackTrace(); } diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index c4dac02e..f37b82a4 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -53,14 +53,14 @@ - +