diff --git a/src/main/java/nlib/cmm/session/SessionConfig.java b/src/main/java/nlib/cmm/session/SessionConfig.java index 1918c8b5..45e665f5 100644 --- a/src/main/java/nlib/cmm/session/SessionConfig.java +++ b/src/main/java/nlib/cmm/session/SessionConfig.java @@ -44,10 +44,10 @@ public class SessionConfig implements HttpSessionListener { private static final String DELIMITER = "\t"; /* 세션별 로그인 처리 가능한 정보 목록 */ - private static final Map loginSessions = new ConcurrentHashMap<>(); + private static final Map loginSessions = new ConcurrentHashMap<>(); /* 세션별 회원가입 처리 가능한 정보 목록 */ - private static final Map memberSessions = new ConcurrentHashMap<>(); + private static final Map memberSessions = new ConcurrentHashMap<>(); @Override public void sessionCreated(HttpSessionEvent se) { @@ -77,7 +77,7 @@ public class SessionConfig implements HttpSessionListener { log.debug("setLoginInfo : " + sessionId + ", " + oUser.getSnsType() + ", " + oUser.getSnsId()); loginSessions.put(sessionId, oUser); } - + /** * 지방문화원 해당 세션에 로그인 처리 가능한 SNS 유형 및 SNS ID 정보를 리턴한다. * 리턴유형 문자열 배열 @@ -91,7 +91,7 @@ public class SessionConfig implements HttpSessionListener { if(StringUtil.isEmpty(sessionId)) return null; - return loginSessions.get(sessionId); + return (OAuthUniversalUser)loginSessions.get(sessionId); } /** @@ -147,7 +147,7 @@ public class SessionConfig implements HttpSessionListener { public static OAuthUniversalUser getNewMemberInfo(String sessionId) { if(StringUtil.isEmpty(sessionId)) return null; - return memberSessions.get(sessionId); + return (OAuthUniversalUser)memberSessions.get(sessionId); } /** diff --git a/src/main/java/nlib/security/SpringSecurityConfig.java b/src/main/java/nlib/security/SpringSecurityConfig.java index e012b7dc..f45166a6 100644 --- a/src/main/java/nlib/security/SpringSecurityConfig.java +++ b/src/main/java/nlib/security/SpringSecurityConfig.java @@ -61,11 +61,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() - .antMatchers("/login/login*.do").permitAll() - .antMatchers("/login/logout*.do").permitAll() - .antMatchers("/login/naver/*.do").permitAll() - .antMatchers("/login/google/*.do").permitAll() - .antMatchers("/login/kakao/*.do").permitAll() + .antMatchers("/login/**").permitAll() .antMatchers("/member/*.do").permitAll() .antMatchers("/member/*.ajax").permitAll() .antMatchers("/member/naver/*.do").permitAll() diff --git a/src/main/java/nlib/user/service/LoginService.java b/src/main/java/nlib/user/service/LoginService.java index 9e87c6e3..208669c9 100644 --- a/src/main/java/nlib/user/service/LoginService.java +++ b/src/main/java/nlib/user/service/LoginService.java @@ -20,7 +20,10 @@ public interface LoginService public final String ERR_CODE_DISABLE = "ERR_CODE_LOGIN_DISABLE"; /* 오류코드 : 계정유효하지 않음 */ public final String ERR_CODE_MISMATCH = "ERR_CODE_LOGIN_MISMATCH"; /* 오류코드 : ID,PW일치하지 않음 */ public final String ERR_CODE_EXC = "ERR_CODE_LOGIN_EXC"; /* 오류코드 : 기타오류 */ + public final String ERR_CODE_REQ_AGREE = "ERR_CODE_REQ_AGREE"; /* 오류코드 : 해당지방문화원 정보제공 동의 필요 */ + public final String WRN_CODE_DORMANT = "WRN_CODE_DOMANT"; /* 경고코드 : 휴면계정 */ + public String login(HttpServletRequest req, String username, String password); public String loginOauth(HttpServletRequest req, String oauthServiceName, String snsId, String joinCouncilCd, String councilJsessionId); @@ -30,4 +33,6 @@ public interface LoginService public DataApiResVO logout(DataApiReqVO reqVO); public HashMap selectCouncilInfoByDnsHost(String councilDnsHost); + + public int activateDormantAcc(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 0f0fd885..7f105bcf 100644 --- a/src/main/java/nlib/user/service/NlibLoginVO.java +++ b/src/main/java/nlib/user/service/NlibLoginVO.java @@ -46,6 +46,7 @@ public class NlibLoginVO implements Serializable { private String addressDetail; /* 상세주소 */ private String birthday; /* 생년월일 */ private String status; /* 상태 : S정상, D탈퇴, P휴면 */ + private String dmtProcDd; /* 휴면처리일자 (YYYYMMDDHHMISS) */ private String joinDate; /* 가입일자 (YYYYMMDD) */ private String verificationDd; /* 본인확인일시 (YYYYMMDDHHMISS) */ private String lastAccessDd; /* 마지막접근일시 (YYYYMMDDHHMISS) */ @@ -353,4 +354,12 @@ public class NlibLoginVO implements Serializable { this.message = message; } + public String getDmtProcDd() { + return dmtProcDd; + } + + public void setDmtProcDd(String dmtProcDd) { + this.dmtProcDd = dmtProcDd; + } + } diff --git a/src/main/java/nlib/user/service/impl/LoginDAO.java b/src/main/java/nlib/user/service/impl/LoginDAO.java index 2f55bd3d..72167348 100644 --- a/src/main/java/nlib/user/service/impl/LoginDAO.java +++ b/src/main/java/nlib/user/service/impl/LoginDAO.java @@ -32,4 +32,8 @@ public class LoginDAO extends EgovComAbstractDAO { public HashMap selectCouncilInfoByDnsHost(String councilDnsHost) { return (HashMap) selectOne("LoginDAO.selectCouncilInfoByDnsHost", councilDnsHost); } + + public int activateDormantAcc(NlibLoginVO loginVO) { + return update("LoginDAO.activateDormantAcc", 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 b5a1a625..52230c3d 100644 --- a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java +++ b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java @@ -121,6 +121,17 @@ 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; + } + // Spring Security 로그인처리위한 token 생성하여 로그인 처리 UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getUsername(), nLoginVO.getPassword()); NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token); @@ -195,7 +206,9 @@ public class LoginServiceImpl implements LoginService return loginDAO.selectCouncilInfoByDnsHost(councilDnsHost); } - + public int activateDormantAcc(NlibLoginVO loginVO) { + return loginDAO.activateDormantAcc(loginVO); + } diff --git a/src/main/java/nlib/user/web/LoginController.java b/src/main/java/nlib/user/web/LoginController.java index 44b561e7..1629d85d 100644 --- a/src/main/java/nlib/user/web/LoginController.java +++ b/src/main/java/nlib/user/web/LoginController.java @@ -32,6 +32,7 @@ import egovframework.com.ext.oauth.service.OAuthVO; import nlib.cmm.service.NlibProperty; import nlib.cmm.session.SessionConfig; import nlib.user.service.LoginService; +import nlib.user.service.NlibLoginVO; import nlib.util.StringUtil; /** @@ -407,7 +408,7 @@ public class LoginController { String jsessionId = session.getId(); String councilCd = (String)session.getAttribute("councilCd"); String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); - OAuthUniversalUser oauthUser = SessionConfig.popLoginInfo(jsessionId); + OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(jsessionId); if(oauthUser == null || !oauthUser.isValid()) { throw new Exception("잘못된 접근입니다."); @@ -420,17 +421,33 @@ public class LoginController { // 정상 SNS 연동 로그인 if(loginResult == null) { + SessionConfig.removeLoginInfo(jsessionId); // 세션에 설정된 redirect 주소 확인 return "redirect:" + councilReturnUrl; } + // 휴면계좌 + if(StringUtil.equalsIgnoreCase(loginResult, loginService.WRN_CODE_DORMANT)) { + redirectUrl = NlibProperty.getString("login.dormant.url"); + return "redirect:" + redirectUrl; + } + + // 신규 지방문화원 정보 제공 동의 필요 + if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_AGREE)) { + redirectUrl = NlibProperty.getString("login.newcouncil.url"); + return "redirect:" + redirectUrl; + } + // SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환 model.addAttribute("error", loginResult); if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_MEMBERSHIP)) { + SessionConfig.setNewMemberInfo(jsessionId, oauthUser); + SessionConfig.removeLoginInfo(jsessionId); model.addAttribute("message", "회원가입하신 후, 이용 가능합니다."); redirectUrl = NlibProperty.getString("member.new.url"); return "redirect:" + redirectUrl; } 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; @@ -449,7 +466,143 @@ public class LoginController { public String logout(HttpServletRequest req) { return null; } - + + /** + * 휴면계좌 안내 및 해지 선택 화면을 표출한다. + * + * @param req + * @param error + * @param message + * @param logout + * @param redirectAttrs + * @param paramMap + * @param model + * @param session + * @return + */ + @RequestMapping("/login/activateDormantAccForm.do") + public String activateDormantAccForm( + 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); + 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"; + } + + /** + * 휴면계좌 안내 및 해지 선택 화면을 표출한다. + * + * @param req + * @param error + * @param message + * @param logout + * @param redirectAttrs + * @param paramMap + * @param model + * @param session + * @return + */ + @RequestMapping("/login/activateDormantAcc.do") + public String activateDormantAcc( + HttpServletRequest req, + @RequestParam Map paramMap, + Model model, + HttpSession session) { + + String mbInfoId = StringUtil.getString(paramMap.get("mbInfoId"), ""); + + //---------------------------------------------- + // 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인 + //---------------------------------------------- + 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("activateDormantAcc > sessionid=" + session.getId()); + log.debug("activateDormantAcc > councilDnsHost = " + councilDnsHost); + log.debug("activateDormantAcc > councilReturnUrl = " + councilReturnUrl); + log.debug("activateDormantAcc > councilHomeUrl = " + councilHomeUrl); + log.debug("activateDormantAcc > councilCd = " + councilCd); + log.debug("activateDormantAcc > councilNm = " + councilNm); + + OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId()); + NlibLoginVO loginVO = oauthUser.getNlibVO(); + + if(loginVO == null || !mbInfoId.equals(loginVO.getMbInfoId())) { + model.addAttribute("code", "TIMEOUT"); + model.addAttribute("message", "잘못된 접근입니다. 장시간 대기로 다시 로그인 하신 후, 이용해 주시기 바랍니다."); + return "nlib/login/activateDormantAccForm"; + } + + int ret = loginService.activateDormantAcc(loginVO); + + if(ret < 1) { + model.addAttribute("code", "NO_TARGET"); + model.addAttribute("message", "휴면사용자가 아닙니다. 다시 로그인하시거나 관리자에게 문의하여 주시기 바랍니다."); + return "nlib/login/activateDormantAccForm"; + } + + // 로그인 처리 + return "redirect:/login/loginCouncilSSO.do"; + } // // 구글 로그인 콜백 // @RequestMapping(value = "/login/googleCallback.do") 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 7fbc87ef..d74b6ddd 100644 --- a/src/main/resources/egovframework/mapper/nlib/user/LoginDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/user/LoginDAO_SQL.xml @@ -18,14 +18,15 @@ , A.ADDRESS_DETAIL , A.BIRTHDAY , A.STATUS + , DATE_FORMAT(A.DMT_PROC_DD, '%Y%m%d%H%i%s') AS DMT_PROC_DD , A.JOIN_DATE - , A.VERIFICATION_DD - , A.LAST_ACCESS_DD + , DATE_FORMAT(A.VERIFICATION_DD, '%Y%m%d%H%i%s') AS VERIFICATION_DD + , DATE_FORMAT(A.LAST_ACCESS_DD, '%Y%m%d%H%i%s') AS LAST_ACCESS_DD , A.LEAVE_SITE_DATE , A.REG_ID - , A.REG_DD + , DATE_FORMAT(A.REG_DD, '%Y%m%d%H%i%s') AS REG_DD , A.MOD_ID - , A.MOD_DD + , DATE_FORMAT(A.MOD_DD, '%Y%m%d%H%i%s') AS MOD_DD , B.SNS_TYPE , B.SNS_ID , 'ROLE_USER' AS AUTHORITY_LIST @@ -50,6 +51,16 @@ LIMIT 1 + + UPDATE UAC_CLTR_DB.MB_INFO A /* 사용자정보 */ + SET A.STATUS = 'S' /* 정상 */ + , A.DMT_PROC_DD = NULL + , A.MOD_ID = #{mbInfoId} + , A.MOD_DD = NOW() + WHERE MB_INFO_ID = #{mbInfoId} + AND A.STATUS = 'P' /* 휴면 */ + + INSERT INTO SM_ACC_LOG /* 접속로그 */ ( USER_ID diff --git a/src/main/resources/nlib/nlib.properties b/src/main/resources/nlib/nlib.properties index 5fa88365..fd365f3f 100644 --- a/src/main/resources/nlib/nlib.properties +++ b/src/main/resources/nlib/nlib.properties @@ -20,15 +20,20 @@ home.uri = /index.do #---------------------------------------- # \ub85c\uadf8\uc778/\ud68c\uc6d0\uac00\uc785\uad00\ub828 URL \uc815\ubcf4 #---------------------------------------- -member.new.url = /member/selectMemberJoiningInfo.do +member.new.url = /member/snsCertForm.do # \ub85c\uadf8\uc778 \ub610\ub294 \uad8c\ud55c\uc5c6\ub294 \uacbd\uc6b0, \ub85c\uadf8\uc778\uc73c\ub85c \uc804\ud658\ucc98\ub9ac\ub418\uc5b4 \uc811\uc18d\ub418\ub294 \ucd5c\ucd08 \uc8fc\uc18c login.url = /login/loginCouncil.do # \ub85c\uadf8\uc778 \ubb38\uc81c \ubc1c\uc0dd \uc2dc, \ub2e4\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 \ub85c\uadf8\uc778\ud654\uba74 \uc8fc\uc18c login.back.url = /login/loginForm.do +# \ud734\uba74\uacc4\uc88c \ud574\uc9c0\uc548\ub0b4 \uc8fc\uc18c +login.dormant.url = /login/activateDormantAccForm.do +# \uc2e0\uaddc \uc9c0\ubc29\ubb38\ud654\uc6d0 \uc815\ubcf4\uc81c\uacf5 \ub3d9\uc758 \uc8fc\uc18c +login.newcouncil.url = /login/agreeProvInfoForm.do + # \uc9c0\ubc29\ubb38\ud654\uc6d0\uc5d0\uc11c \uc811\uc18d\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 URL \uc815\ubcf4 nculture.login.redirect.uri = /login/loginForm.do nculture.login.post.login.redirect.uri = /login/loginCouncilSSO.do -nculture.login.post.member.redirect.uri = /member/insertMemberInfoForm.do +nculture.login.post.member.redirect.uri = /member/selectMemberJoiningInfo.do nculture.login.preset.redirect.url = http://nlib.nculture.org/nlib/login/loginPreSet.do nculture.member.redirect.uri = /member/snsCertForm.do @@ -58,7 +63,7 @@ dataapi.server.protocol = http dataapi.temp.xml.path = C:/iams/workspace/nlib/data/dataxml # Aria \uc54c\uace0\ub9ac\uc998 -crypto.aria.defaultKey = TheFederationOfKoreaCultureCenter027042322 +crypto.aria.defaultKey = gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ= #---------------------------------------- diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAccForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAccForm.jsp new file mode 100644 index 00000000..2dc92971 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/activateDormantAccForm.jsp @@ -0,0 +1,83 @@ +<% +/** + *
+ * @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 + + + + + + + +
+ +

휴면계좌안내

+ + +
+
+ +
+ +사용자 계정이 아래와 같이 휴면된 상태입니다.
+
+- 이름 : ${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/agreeProvInfoForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfoForm.jsp new file mode 100644 index 00000000..f163962c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/agreeProvInfoForm.jsp @@ -0,0 +1,80 @@ +<% +/** + *
+ * @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 } + +
+ "${councilNm }" 서비스를 이용하시려면 해당 문화원에 사용자 정보제공에 동의가 필요합니다.
+ 동의하시겠습니까? +
+ + +
+ + + \ No newline at end of file