휴면계좌처리, 신규 문화원 가입 동의 처리

This commit is contained in:
KNKIM 2021-09-02 18:33:21 +09:00
parent 30fa96a1e9
commit 206f475b58
9 changed files with 326 additions and 74 deletions

View File

@ -35,4 +35,7 @@ public interface LoginService
public HashMap<String, String> selectCouncilInfoByDnsHost(String councilDnsHost); public HashMap<String, String> selectCouncilInfoByDnsHost(String councilDnsHost);
public int activateDormantAcc(NlibLoginVO loginVO); public int activateDormantAcc(NlibLoginVO loginVO);
public int agreeProvInfo(NlibLoginVO loginVO);
} }

View File

@ -77,6 +77,8 @@ public class NlibLoginVO implements Serializable {
private String mobileVrfctNo = null; /* 본인확인 인증번호 */ private String mobileVrfctNo = null; /* 본인확인 인증번호 */
private String mobileVrfctDd = null; /* 본인확인 인증번호 발송일자 */ private String mobileVrfctDd = null; /* 본인확인 인증번호 발송일자 */
/** /**
* 로그인인증키값을 리턴한다. 만일 존재하지 않을 경우, userId를 기반으로 인증키를 생성하여 리턴한다. * 로그인인증키값을 리턴한다. 만일 존재하지 않을 경우, userId를 기반으로 인증키를 생성하여 리턴한다.
* 로그인되지 않은 (userId값이 존재하지 않는경우) 대해서는 null을 리턴한다. * 로그인되지 않은 (userId값이 존재하지 않는경우) 대해서는 null을 리턴한다.

View File

@ -36,4 +36,9 @@ public class LoginDAO extends EgovComAbstractDAO {
public int activateDormantAcc(NlibLoginVO loginVO) { public int activateDormantAcc(NlibLoginVO loginVO) {
return update("LoginDAO.activateDormantAcc", loginVO); return update("LoginDAO.activateDormantAcc", loginVO);
} }
public int agreeProvInfo(NlibLoginVO loginVO) {
return insert("LoginDAO.agreeProvInfo", loginVO);
}
} }

View File

@ -121,17 +121,19 @@ public class LoginServiceImpl implements LoginService
return ERR_CODE_REQ_MEMBERSHIP; return ERR_CODE_REQ_MEMBERSHIP;
} }
// 해당 지방문화원에 미등록된 경우, 정보제공 동의로 이동 처리 필요
if(StringUtil.isEmpty(nLoginVO.getJoinCouncilCd())) {
return ERR_CODE_REQ_AGREE;
}
// 휴면계좌 확인 // 휴면계좌 확인
if("P".equals(nLoginVO.getStatus())) { if("P".equals(nLoginVO.getStatus())) {
oUser.setNlibVO(nLoginVO); oUser.setNlibVO(nLoginVO);
return WRN_CODE_DORMANT; return WRN_CODE_DORMANT;
} }
// 해당 지방문화원에 미등록된 경우, 정보제공 동의로 이동 처리 필요
if(StringUtil.isEmpty(nLoginVO.getJoinCouncilCd())) {
oUser.setNlibVO(nLoginVO);
return ERR_CODE_REQ_AGREE;
}
// Spring Security 로그인처리위한 token 생성하여 로그인 처리 // Spring Security 로그인처리위한 token 생성하여 로그인 처리
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getUsername(), nLoginVO.getPassword()); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getUsername(), nLoginVO.getPassword());
NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token); NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token);
@ -210,7 +212,9 @@ public class LoginServiceImpl implements LoginService
return loginDAO.activateDormantAcc(loginVO); return loginDAO.activateDormantAcc(loginVO);
} }
public int agreeProvInfo(NlibLoginVO loginVO) {
return loginDAO.agreeProvInfo(loginVO);
}
/* SNS 연동 SSO를 통한 로그인 처리한다. /* SNS 연동 SSO를 통한 로그인 처리한다.
* *

View File

@ -402,8 +402,6 @@ public class LoginController {
HttpSession session, HttpSession session,
ModelMap model) throws Exception { ModelMap model) throws Exception {
String redirectUrl = "/index.do";
String jsessionId = session.getId(); String jsessionId = session.getId();
String councilCd = (String)session.getAttribute("councilCd"); String councilCd = (String)session.getAttribute("councilCd");
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); 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); String loginResult = loginService.loginCouncilSSO(req, councilCd, oauthUser);
// 정상 SNS 연동 로그인 // 정상 SNS 연동 로그인
if(loginResult == null) { if(loginResult == null) {
SessionConfig.removeLoginInfo(jsessionId); SessionConfig.removeLoginInfo(jsessionId);
// 세션에 설정된 redirect 주소 확인 // 세션에 설정된 redirect 주소 확인
return "redirect:" + councilReturnUrl; return null;
} }
// 휴면계좌 // 휴면계좌
if(StringUtil.equalsIgnoreCase(loginResult, loginService.WRN_CODE_DORMANT)) { if(StringUtil.equalsIgnoreCase(loginResult, loginService.WRN_CODE_DORMANT)) {
redirectUrl = NlibProperty.getString("login.dormant.url"); return "redirect:" + NlibProperty.getString("login.dormant.url");
return "redirect:" + redirectUrl;
} }
// 신규 지방문화원 정보 제공 동의 필요 // 신규 지방문화원 정보 제공 동의 필요
if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_AGREE)) { if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_AGREE)) {
redirectUrl = NlibProperty.getString("login.newcouncil.url"); return "redirect:" + NlibProperty.getString("login.newcouncil.url");
return "redirect:" + redirectUrl;
} }
// SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환 // SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환
@ -443,16 +452,17 @@ public class LoginController {
SessionConfig.setNewMemberInfo(jsessionId, oauthUser); SessionConfig.setNewMemberInfo(jsessionId, oauthUser);
SessionConfig.removeLoginInfo(jsessionId); SessionConfig.removeLoginInfo(jsessionId);
model.addAttribute("message", "회원가입하신 후, 이용 가능합니다."); model.addAttribute("message", "회원가입하신 후, 이용 가능합니다.");
redirectUrl = NlibProperty.getString("member.new.url"); return "redirect:" + NlibProperty.getString("member.new.url");
return "redirect:" + redirectUrl;
} else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) { } else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) {
SessionConfig.removeLoginInfo(jsessionId); SessionConfig.removeLoginInfo(jsessionId);
model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다."); model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다.");
redirectUrl = NlibProperty.getString("login.back.url"); return "redirect:" + NlibProperty.getString("login.back.url");
return "redirect:" + redirectUrl;
} }
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"; return "nlib/login/activateDormantAccForm";
} }
@RequestMapping("/login/agreeProvInfoForm.do")
public String agreeProvInfo(
HttpServletRequest req,
RedirectAttributes redirectAttrs,
@RequestParam Map<String, String> 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 "nlib/login/activateDormantAccForm";
} }
// 로그인 처리 model.addAttribute("oauthUser", oauthUser);
return "redirect:/login/loginCouncilSSO.do";
return "nlib/login/activateDormantAcc";
} }
@RequestMapping("/login/agreeProvInfoForm.do")
public String agreeProvInfoForm(
HttpServletRequest req,
RedirectAttributes redirectAttrs,
@RequestParam Map<String, String> 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<String, String> 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") // @RequestMapping(value = "/login/googleCallback.do")
// public String googleCallback(@RequestParam(value = "code") String authCode, HttpSession session, Model model, // public String googleCallback(@RequestParam(value = "code") String authCode, HttpSession session, Model model,

View File

@ -81,4 +81,23 @@
) )
</insert> </insert>
<insert id="agreeProvInfo" parameterType="NlibLoginVO">
INSERT INTO MB_SITE /* 가입문화원정보 */
( MB_INFO_ID
,JOIN_TYPE
,JOIN_AGREE_DD
,JOIN_COUNCIL_CD
,MASTER_YN
) VALUES (
#{mbInfoId}
,#{joinType}
,NOW()
,#{joinCouncilCd}
,'N'
)
</insert>
</mapper> </mapper>

View File

@ -0,0 +1,74 @@
<%
/**
* <pre>
* @Class Name : activateDormantAccForm.jsp
*
* @Description : 휴면계좌 해지안내 및 확인 화면
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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"%>
<c:set var="pageTitle">휴면계좌 해제 처리결과</c:set>
<!DOCTYPE html>
<html>
<head>
<title>LoginTest</title>
<script src = "//developers.kakao.com/sdk/js/kakao.min.js"></script>
<script type="text/javascript" src="https://static.nid.naver.com/js/naverLogin_implicit-1.0.2.js" charset="utf-8"></script>
<script src="https://apis.google.com/js/api:client.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
function signUp(){
location.href="${pageContext.request.contextPath}/member/selectMemberJoiningInfo.do";
}
function findInfo(){
location.href="${pageContext.request.contextPath}/member/initPasswordForm.do";
}
</script>
</head>
<body>
<br>
<h1>${pageTitle }</h1>
<form name="dormantForm" id="dormantForm"
action="${pageContext.request.contextPath}/login/activateDormantAcc.do"
method="post">
<br />
<input type="text" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" />
<br />
정상적으로 휴면 해제되었습니다.<br />
<br />
- 이름 : ${oauthUser.nlibVO.name}<br />
- 로그인ID : ${oauthUser.nlibVO.loginUserId}<br />
- 이메일 : ${oauthUser.nlibVO.email}<br />
<br/>
<input type="button" id="continueBtn" name="continueBtn" value="로그인 계속 진행" onclick="javascript: location.href = '${pageContext.request.contextPath}/login/loginCouncilSSO.do';" />
</form>
</body>
</html>

View File

@ -0,0 +1,77 @@
<%
/**
* <pre>
* @Class Name : agreeProvInfoForm.jsp
*
* @Description : 신규 지방문화원 정보제공 동의 화면
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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"%>
<c:set var="pageTitle">지방문화원 정보제공 동의</c:set>
<!DOCTYPE html>
<html>
<head>
<title>LoginTest</title>
<script src = "//developers.kakao.com/sdk/js/kakao.min.js"></script>
<script type="text/javascript" src="https://static.nid.naver.com/js/naverLogin_implicit-1.0.2.js" charset="utf-8"></script>
<script src="https://apis.google.com/js/api:client.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
function signUp(){
location.href="${pageContext.request.contextPath}/member/selectMemberJoiningInfo.do";
}
function findInfo(){
location.href="${pageContext.request.contextPath}/member/initPasswordForm.do";
}
</script>
</head>
<body>
<br>
<h1>${pageTitle }</h1>
<form name="agreeForm" id="agreeForm"
action="${pageContext.request.contextPath}/login/agreeProvInfo.do"
method="post">
<br />
<input type="text" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" />
<input type="text" id="councilCd" name="councilCd" value="${councilCd}" />
<br />
정상적으로 처리되었습니다.<br />
<br />
- 이름 : ${oauthUser.nlibVO.name}<br />
- 로그인ID : ${oauthUser.nlibVO.loginUserId}<br />
- 이메일 : ${oauthUser.nlibVO.email}<br />
- 동의대상 지방문화원 : ${councilCd } ${councilNm }<br />
- 처리결과 : ${resultCount }<br />
<br/>
<input type="button" id="inactivateBtn" name="" value="홈화면 이동" onclick="javascript: location.href = '${pageContext.request.contextPath}';" />
</form>
</body>
</html>

View File

@ -59,9 +59,9 @@
method="post"> method="post">
<br /> <br />
<input type="text" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" /> <input type="text" id="mbInfoId" name="mbInfoId" value="${oauthUser.nlibVO.mbInfoId}" />
<input type="text" id="councilCd" name="councilCd" value="${councilCd}" />
<br /> <br />
접속하신 지방문화원 서비스를 이용하려면 회원 정보 제공동의가 필요합니다.<br />
사용자 계정이 아래와 같이 휴면된 상태입니다. <br />
<br /> <br />
- 이름 : ${oauthUser.nlibVO.name}<br /> - 이름 : ${oauthUser.nlibVO.name}<br />
- 로그인ID : ${oauthUser.nlibVO.loginUserId}<br /> - 로그인ID : ${oauthUser.nlibVO.loginUserId}<br />