휴면계좌처리, 신규 문화원 가입 동의 처리
This commit is contained in:
parent
30fa96a1e9
commit
206f475b58
@ -35,4 +35,7 @@ public interface LoginService
|
||||
public HashMap<String, String> selectCouncilInfoByDnsHost(String councilDnsHost);
|
||||
|
||||
public int activateDormantAcc(NlibLoginVO loginVO);
|
||||
|
||||
public int agreeProvInfo(NlibLoginVO loginVO);
|
||||
|
||||
}
|
||||
@ -77,6 +77,8 @@ public class NlibLoginVO implements Serializable {
|
||||
|
||||
private String mobileVrfctNo = null; /* 본인확인 인증번호 */
|
||||
private String mobileVrfctDd = null; /* 본인확인 인증번호 발송일자 */
|
||||
|
||||
|
||||
/**
|
||||
* 로그인인증키값을 리턴한다. 만일 존재하지 않을 경우, userId를 기반으로 인증키를 생성하여 리턴한다.
|
||||
* 로그인되지 않은 자(userId값이 존재하지 않는경우)에 대해서는 null을 리턴한다.
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -121,17 +121,19 @@ public class LoginServiceImpl implements LoginService
|
||||
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를 통한 로그인 처리한다.
|
||||
*
|
||||
|
||||
@ -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,16 +452,17 @@ 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<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 "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<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")
|
||||
// public String googleCallback(@RequestParam(value = "code") String authCode, HttpSession session, Model model,
|
||||
|
||||
@ -81,4 +81,23 @@
|
||||
)
|
||||
</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>
|
||||
@ -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>
|
||||
77
src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfo.jsp
Normal file
77
src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfo.jsp
Normal 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>
|
||||
@ -59,9 +59,9 @@
|
||||
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 />
|
||||
<br />
|
||||
- 이름 : ${oauthUser.nlibVO.name}<br />
|
||||
- 로그인ID : ${oauthUser.nlibVO.loginUserId}<br />
|
||||
|
||||
Loading…
Reference in New Issue
Block a user