From 206f475b58cb14cabdbc6235612cceda5b353bbe Mon Sep 17 00:00:00 2001 From: KNKIM Date: Thu, 2 Sep 2021 18:33:21 +0900 Subject: [PATCH] =?UTF-8?q?=ED=9C=B4=EB=A9=B4=EA=B3=84=EC=A2=8C=EC=B2=98?= =?UTF-8?q?=EB=A6=AC,=20=EC=8B=A0=EA=B7=9C=20=EB=AC=B8=ED=99=94=EC=9B=90?= =?UTF-8?q?=20=EA=B0=80=EC=9E=85=20=EB=8F=99=EC=9D=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/nlib/user/service/LoginService.java | 3 + .../java/nlib/user/service/NlibLoginVO.java | 2 + .../java/nlib/user/service/impl/LoginDAO.java | 5 + .../user/service/impl/LoginServiceImpl.java | 18 +- .../java/nlib/user/web/LoginController.java | 170 ++++++++++++------ .../mapper/nlib/user/LoginDAO_SQL.xml | 19 ++ .../jsp/nlib/login/activateDormantAcc.jsp | 74 ++++++++ .../WEB-INF/jsp/nlib/login/agreeProvInfo.jsp | 77 ++++++++ .../jsp/nlib/login/agreeProvInfoForm.jsp | 32 ++-- 9 files changed, 326 insertions(+), 74 deletions(-) create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAcc.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfo.jsp diff --git a/src/main/java/nlib/user/service/LoginService.java b/src/main/java/nlib/user/service/LoginService.java index 208669c9..825d1362 100644 --- a/src/main/java/nlib/user/service/LoginService.java +++ b/src/main/java/nlib/user/service/LoginService.java @@ -35,4 +35,7 @@ public interface LoginService public HashMap selectCouncilInfoByDnsHost(String councilDnsHost); public int activateDormantAcc(NlibLoginVO loginVO); + + public int agreeProvInfo(NlibLoginVO loginVO); + } \ No newline at end of file diff --git a/src/main/java/nlib/user/service/NlibLoginVO.java b/src/main/java/nlib/user/service/NlibLoginVO.java index dc566fbe..86e63a8c 100644 --- a/src/main/java/nlib/user/service/NlibLoginVO.java +++ b/src/main/java/nlib/user/service/NlibLoginVO.java @@ -77,6 +77,8 @@ public class NlibLoginVO implements Serializable { private String mobileVrfctNo = null; /* 본인확인 인증번호 */ private String mobileVrfctDd = null; /* 본인확인 인증번호 발송일자 */ + + /** * 로그인인증키값을 리턴한다. 만일 존재하지 않을 경우, userId를 기반으로 인증키를 생성하여 리턴한다. * 로그인되지 않은 자(userId값이 존재하지 않는경우)에 대해서는 null을 리턴한다. diff --git a/src/main/java/nlib/user/service/impl/LoginDAO.java b/src/main/java/nlib/user/service/impl/LoginDAO.java index 72167348..b504392a 100644 --- a/src/main/java/nlib/user/service/impl/LoginDAO.java +++ b/src/main/java/nlib/user/service/impl/LoginDAO.java @@ -36,4 +36,9 @@ public class LoginDAO extends EgovComAbstractDAO { public int activateDormantAcc(NlibLoginVO loginVO) { return update("LoginDAO.activateDormantAcc", loginVO); } + + public int agreeProvInfo(NlibLoginVO loginVO) { + return insert("LoginDAO.agreeProvInfo", loginVO); + } + } \ No newline at end of file diff --git a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java index 52230c3d..269dca02 100644 --- a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java +++ b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java @@ -120,18 +120,20 @@ public class LoginServiceImpl implements LoginService if(nLoginVO == null) { return ERR_CODE_REQ_MEMBERSHIP; } - - // 해당 지방문화원에 미등록된 경우, 정보제공 동의로 이동 처리 필요 - if(StringUtil.isEmpty(nLoginVO.getJoinCouncilCd())) { - return ERR_CODE_REQ_AGREE; - } - + // 휴면계좌 확인 if("P".equals(nLoginVO.getStatus())) { oUser.setNlibVO(nLoginVO); return WRN_CODE_DORMANT; } + // 해당 지방문화원에 미등록된 경우, 정보제공 동의로 이동 처리 필요 + if(StringUtil.isEmpty(nLoginVO.getJoinCouncilCd())) { + oUser.setNlibVO(nLoginVO); + return ERR_CODE_REQ_AGREE; + } + + // Spring Security 로그인처리위한 token 생성하여 로그인 처리 UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getUsername(), nLoginVO.getPassword()); NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token); @@ -210,7 +212,9 @@ public class LoginServiceImpl implements LoginService return loginDAO.activateDormantAcc(loginVO); } - + public int agreeProvInfo(NlibLoginVO loginVO) { + return loginDAO.agreeProvInfo(loginVO); + } /* SNS 연동 SSO를 통한 로그인 처리한다. * diff --git a/src/main/java/nlib/user/web/LoginController.java b/src/main/java/nlib/user/web/LoginController.java index b96fe62f..6c9d4ddc 100644 --- a/src/main/java/nlib/user/web/LoginController.java +++ b/src/main/java/nlib/user/web/LoginController.java @@ -402,8 +402,6 @@ public class LoginController { HttpSession session, ModelMap model) throws Exception { - String redirectUrl = "/index.do"; - String jsessionId = session.getId(); String councilCd = (String)session.getAttribute("councilCd"); String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); @@ -414,27 +412,38 @@ public class LoginController { } //----------------------------------------------- - // 등록된 사용자 여부 확인 + // 로그인 처리 //----------------------------------------------- + String redirectUrl = loginProc(req, councilCd, oauthUser, councilReturnUrl, model); + + // 정상 SNS 연동 로그인 + if(StringUtil.isNotEmpty(redirectUrl)) { + return redirectUrl; + } + + return "redirect:" + councilReturnUrl; + } + + public String loginProc(HttpServletRequest req, String councilCd, OAuthUniversalUser oauthUser, String councilReturnUrl, ModelMap model) { + + String jsessionId = req.getSession().getId(); String loginResult = loginService.loginCouncilSSO(req, councilCd, oauthUser); // 정상 SNS 연동 로그인 if(loginResult == null) { SessionConfig.removeLoginInfo(jsessionId); // 세션에 설정된 redirect 주소 확인 - return "redirect:" + councilReturnUrl; + return null; } // 휴면계좌 if(StringUtil.equalsIgnoreCase(loginResult, loginService.WRN_CODE_DORMANT)) { - redirectUrl = NlibProperty.getString("login.dormant.url"); - return "redirect:" + redirectUrl; + return "redirect:" + NlibProperty.getString("login.dormant.url"); } // 신규 지방문화원 정보 제공 동의 필요 if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_AGREE)) { - redirectUrl = NlibProperty.getString("login.newcouncil.url"); - return "redirect:" + redirectUrl; + return "redirect:" + NlibProperty.getString("login.newcouncil.url"); } // SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환 @@ -443,18 +452,19 @@ public class LoginController { SessionConfig.setNewMemberInfo(jsessionId, oauthUser); SessionConfig.removeLoginInfo(jsessionId); model.addAttribute("message", "회원가입하신 후, 이용 가능합니다."); - redirectUrl = NlibProperty.getString("member.new.url"); - return "redirect:" + redirectUrl; + return "redirect:" + NlibProperty.getString("member.new.url"); } else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) { SessionConfig.removeLoginInfo(jsessionId); model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다."); - redirectUrl = NlibProperty.getString("login.back.url"); - return "redirect:" + redirectUrl; + return "redirect:" + NlibProperty.getString("login.back.url"); } - - return "redirect:" + redirectUrl; - } + // 잘못된 접근 또는 기타 오류 + SessionConfig.removeLoginInfo(jsessionId); + model.addAttribute("message", "기타 문제로 인하여 로그인에 실패하였습니다. : " + loginResult); + return "redirect:" + NlibProperty.getString("login.back.url"); + } + /** * 로그아웃 후의 처리를 담당한다. 스프링 시큐리티에서 로그아웃이 수행된 후, 호출된다. * @@ -510,40 +520,6 @@ public class LoginController { return "nlib/login/activateDormantAccForm"; } - @RequestMapping("/login/agreeProvInfoForm.do") - public String agreeProvInfo( - HttpServletRequest req, - RedirectAttributes redirectAttrs, - @RequestParam Map paramMap, - Model model, - HttpSession session) { - - //---------------------------------------------- - // 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인 - //---------------------------------------------- - String councilJsessionId = (String)session.getAttribute("councilJsessionId"); - String councilDnsHost = (String)session.getAttribute("councilDnsHost"); - String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); - String councilHomeUrl = (String)session.getAttribute("councilHomeUrl"); - String councilCd = (String)session.getAttribute("councilCd"); - String councilNm = (String)session.getAttribute("councilNm"); - - log.debug("activateDormantAccForm > sessionid=" + session.getId()); - log.debug("activateDormantAccForm > councilJsessionId = " + councilJsessionId); - log.debug("activateDormantAccForm > councilDnsHost = " + councilDnsHost); - log.debug("activateDormantAccForm > councilReturnUrl = " + councilReturnUrl); - log.debug("activateDormantAccForm > councilHomeUrl = " + councilHomeUrl); - log.debug("activateDormantAccForm > councilCd = " + councilCd); - log.debug("activateDormantAccForm > councilNm = " + councilNm); - - OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId()); - model.addAttribute("oauthUser", oauthUser); - model.addAttribute("councilCd", councilCd); - model.addAttribute("councilNm", councilNm); - - return "nlib/login/agreeProvInfoForm"; - } - /** * 휴면계좌 안내 및 해지 선택 화면을 표출한다. * @@ -599,10 +575,102 @@ public class LoginController { return "nlib/login/activateDormantAccForm"; } - // 로그인 처리 - return "redirect:/login/loginCouncilSSO.do"; + model.addAttribute("oauthUser", oauthUser); + + return "nlib/login/activateDormantAcc"; } + @RequestMapping("/login/agreeProvInfoForm.do") + public String agreeProvInfoForm( + HttpServletRequest req, + RedirectAttributes redirectAttrs, + @RequestParam Map paramMap, + Model model, + HttpSession session) { + + //---------------------------------------------- + // 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인 + //---------------------------------------------- + String councilJsessionId = (String)session.getAttribute("councilJsessionId"); + String councilDnsHost = (String)session.getAttribute("councilDnsHost"); + String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); + String councilHomeUrl = (String)session.getAttribute("councilHomeUrl"); + String councilCd = (String)session.getAttribute("councilCd"); + String councilNm = (String)session.getAttribute("councilNm"); + + log.debug("activateDormantAccForm > sessionid=" + session.getId()); + log.debug("activateDormantAccForm > councilDnsHost = " + councilDnsHost); + log.debug("activateDormantAccForm > councilReturnUrl = " + councilReturnUrl); + log.debug("activateDormantAccForm > councilHomeUrl = " + councilHomeUrl); + log.debug("activateDormantAccForm > councilCd = " + councilCd); + log.debug("activateDormantAccForm > councilNm = " + councilNm); + + OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId()); + model.addAttribute("oauthUser", oauthUser); + model.addAttribute("councilCd", councilCd); + model.addAttribute("councilNm", councilNm); + + return "nlib/login/agreeProvInfoForm"; + } + + + @RequestMapping("/login/agreeProvInfo.do") + public String agreeProvInfo( + HttpServletRequest req, + RedirectAttributes redirectAttrs, + @RequestParam Map paramMap, + ModelMap model, + HttpSession session) throws Exception { + + //---------------------------------------------- + // 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인 + //---------------------------------------------- + String councilJsessionId = (String)session.getAttribute("councilJsessionId"); + String councilDnsHost = (String)session.getAttribute("councilDnsHost"); + String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); + String councilHomeUrl = (String)session.getAttribute("councilHomeUrl"); + String councilCd = (String)session.getAttribute("councilCd"); + String councilNm = (String)session.getAttribute("councilNm"); + + String pCouncilCd = paramMap.get("councilCd"); + + if(StringUtil.isEmpty(pCouncilCd) || StringUtil.isEmpty(councilCd) || !StringUtil.equalsIgnoreCase(councilCd, pCouncilCd)) { + throw new Exception("잘못된 접근입니다."); + } + + log.debug("agreeProvInfo > sessionid=" + session.getId()); + log.debug("agreeProvInfo > councilDnsHost = " + councilDnsHost); + log.debug("agreeProvInfo > councilReturnUrl = " + councilReturnUrl); + log.debug("agreeProvInfo > councilHomeUrl = " + councilHomeUrl); + log.debug("agreeProvInfo > councilCd = " + councilCd); + log.debug("agreeProvInfo > councilNm = " + councilNm); + + // 지방문화원 추가 + OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId()); + NlibLoginVO nlibLoginVO = oauthUser.getNlibVO(); + nlibLoginVO.setJoinCouncilCd(pCouncilCd); + nlibLoginVO.setJoinType(oauthUser.getSnsType()); + int resultCount = loginService.agreeProvInfo(nlibLoginVO); + + //----------------------------------------------- + // 로그인 처리 + //----------------------------------------------- + String redirectUrl = loginProc(req, pCouncilCd, oauthUser, councilReturnUrl, model); + + // 정상 SNS 연동 로그인 + if(StringUtil.isNotEmpty(redirectUrl)) { + return redirectUrl; + } + + model.addAttribute("resultCount", resultCount); + model.addAttribute("oauthUser", oauthUser); + model.addAttribute("councilCd", councilCd); + model.addAttribute("councilNm", councilNm); + + return "nlib/login/agreeProvInfo"; + } + + // // 구글 로그인 콜백 // @RequestMapping(value = "/login/googleCallback.do") // public String googleCallback(@RequestParam(value = "code") String authCode, HttpSession session, Model model, diff --git a/src/main/resources/egovframework/mapper/nlib/user/LoginDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/user/LoginDAO_SQL.xml index d74b6ddd..e1e6f3f0 100644 --- a/src/main/resources/egovframework/mapper/nlib/user/LoginDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/user/LoginDAO_SQL.xml @@ -81,4 +81,23 @@ ) + + + INSERT INTO MB_SITE /* 가입문화원정보 */ + ( MB_INFO_ID + ,JOIN_TYPE + ,JOIN_AGREE_DD + ,JOIN_COUNCIL_CD + ,MASTER_YN + ) VALUES ( + #{mbInfoId} + ,#{joinType} + ,NOW() + ,#{joinCouncilCd} + ,'N' + ) + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAcc.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAcc.jsp new file mode 100644 index 00000000..977d6e5b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAcc.jsp @@ -0,0 +1,74 @@ +<% +/** + *
+ * @Class Name : activateDormantAccForm.jsp
+ * 
+ * @Description : 휴면계좌 해지안내 및 확인 화면 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 1. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 9. 1. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> +휴면계좌 해제 처리결과 + + + + +LoginTest + + + + + + + +
+ +

${pageTitle }

+ + +
+
+ +
+ +정상적으로 휴면 해제되었습니다.
+
+- 이름 : ${oauthUser.nlibVO.name}
+- 로그인ID : ${oauthUser.nlibVO.loginUserId}
+- 이메일 : ${oauthUser.nlibVO.email}
+
+ +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfo.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfo.jsp new file mode 100644 index 00000000..1c90ad58 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfo.jsp @@ -0,0 +1,77 @@ +<% +/** + *
+ * @Class Name : agreeProvInfoForm.jsp
+ * 
+ * @Description : 신규 지방문화원 정보제공 동의 화면 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 1. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 9. 1. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> +지방문화원 정보제공 동의 + + + + +LoginTest + + + + + + + +
+ +

${pageTitle }

+ + +
+
+ + +
+ 정상적으로 처리되었습니다.
+
+ - 이름 : ${oauthUser.nlibVO.name}
+ - 로그인ID : ${oauthUser.nlibVO.loginUserId}
+ - 이메일 : ${oauthUser.nlibVO.email}
+ - 동의대상 지방문화원 : ${councilCd } ${councilNm }
+ - 처리결과 : ${resultCount }
+
+ + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfoForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfoForm.jsp index f163962c..f560ae92 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfoForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfoForm.jsp @@ -57,23 +57,23 @@
-
- -
+
+ + +
+ 접속하신 지방문화원 서비스를 이용하려면 회원 정보 제공동의가 필요합니다.
+
+ - 이름 : ${oauthUser.nlibVO.name}
+ - 로그인ID : ${oauthUser.nlibVO.loginUserId}
+ - 이메일 : ${oauthUser.nlibVO.email}
+ - 동의대상 지방문화원 : ${councilCd } ${councilNm } -사용자 계정이 아래와 같이 휴면된 상태입니다.
-
-- 이름 : ${oauthUser.nlibVO.name}
-- 로그인ID : ${oauthUser.nlibVO.loginUserId}
-- 이메일 : ${oauthUser.nlibVO.email}
-- 동의대상 지방문화원 : ${councilCd } ${councilNm } - -
- "${councilNm }" 서비스를 이용하시려면 해당 문화원에 사용자 정보제공에 동의가 필요합니다.
- 동의하시겠습니까? -
- - +
+ "${councilNm }" 서비스를 이용하시려면 해당 문화원에 사용자 정보제공에 동의가 필요합니다.
+ 동의하시겠습니까? +
+ +