From c5d5b22ad3d13a059d364d3cdb742d3790cc7b22 Mon Sep 17 00:00:00 2001 From: KNKIM Date: Thu, 21 Oct 2021 17:11:34 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=8C=9D?= =?UTF-8?q?=EC=97=85=20=EB=B0=8F=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=A0=81=EC=9A=A9=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ext/oauth/service/OAuthLogin.java | 9 +- .../ext/oauth/service/OAuthUniversalUser.java | 21 ++ .../com/ext/oauth/service/OAuthVO.java | 73 ++--- .../FileUploadController_BK20210924.java | 246 ---------------- .../nlib/col/service/impl/RentDAO_BK.java | 4 +- .../nlib/security/SpringSecurityConfig.java | 6 +- .../user/service/impl/LoginServiceImpl.java | 95 ------- .../java/nlib/user/web/LoginController.java | 182 +++++++----- .../java/nlib/user/web/MemberController.java | 8 +- .../egovframework/spring/context-oauth.xml | 6 +- src/main/resources/nlib/nlib.properties | 10 +- .../WEB-INF/jsp/nlib/login/loginForm.jsp | 87 +++--- .../WEB-INF/jsp/nlib/login/loginMessage.jsp | 71 +++++ .../WEB-INF/jsp/nlib/login/loginPreSet.jsp | 71 +++-- .../jsp/nlib/login/loginPreSetPopup.jsp | 86 ++++++ .../WEB-INF/jsp/nlib/login/memberSnsForm.jsp | 72 +++++ .../userInfo/getMemberQrcodeFormPopup.jsp | 66 +++-- src/main/webapp/WEB-INF/tiles/inc/header.jsp | 7 +- src/main/webapp/WEB-INF/tiles/inc/menu.jsp | 2 +- .../WEB-INF/tiles/tiles-layout-popup.jsp | 38 --- .../webapp/WEB-INF/tiles/tiles-layout.jsp | 31 +- .../webapp/WEB-INF/tiles/tiles-layout.xml | 5 +- src/main/webapp/common/error.jsp | 9 +- src/main/webapp/homes/mapo.jsp | 45 --- src/main/webapp/homes/seoul.jsp | 56 ---- src/main/webapp/js/nlib.js | 21 +- src/main/webapp/test/testRest.html | 266 ++++++++++++++++-- 27 files changed, 835 insertions(+), 758 deletions(-) delete mode 100644 src/main/java/nlib/cmm/fileupload/FileUploadController_BK20210924.java create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/login/loginMessage.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSetPopup.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/login/memberSnsForm.jsp delete mode 100644 src/main/webapp/homes/mapo.jsp delete mode 100644 src/main/webapp/homes/seoul.jsp diff --git a/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java b/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java index fe311808..a3eeeb99 100644 --- a/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java +++ b/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java @@ -43,8 +43,11 @@ public class OAuthLogin { private OAuth20Service oauthService; private OAuthVO oauthVO; - public OAuthLogin(OAuthVO oauthVO, String callType) { + this(oauthVO, callType, null); + } + + public OAuthLogin(OAuthVO oauthVO, String callType, String councilJsessionId) { if(oauthVO.getService().equals("google")) { @@ -57,7 +60,7 @@ public class OAuthLogin { this.oauthService = new ServiceBuilder(oauthVO.getClientId()) .apiSecret(oauthVO.getClientSecret()) - .callback(oauthVO.getRedirectUrl(callType)) + .callback(oauthVO.getRedirectUrl(callType, councilJsessionId)) .defaultScope(scope) //.scope("profile") .build(oauthVO.getApi20Instance()); @@ -66,7 +69,7 @@ public class OAuthLogin { this.oauthService = new ServiceBuilder(oauthVO.getClientId()) .apiSecret(oauthVO.getClientSecret()) - .callback(oauthVO.getRedirectUrl(callType)) + .callback(oauthVO.getRedirectUrl(callType, councilJsessionId)) //.scope("profile") .build(oauthVO.getApi20Instance()); } diff --git a/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java b/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java index 4ea52aab..a0119a47 100644 --- a/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java +++ b/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java @@ -28,6 +28,11 @@ public class OAuthUniversalUser { private String regDd; private NlibLoginVO nlibVO; + + private String councilJsessionId; /* 로그인 접속 문화원 코드 */ + private String councilHomeUrl; /* 로그인 접속 문화원 홈 URL */ + + private boolean isValidLogin = false; public boolean isValid() { @@ -178,4 +183,20 @@ public class OAuthUniversalUser { this.regDd = regDd; } + public String getCouncilJsessionId() { + return councilJsessionId; + } + + public void setCouncilJsessionId(String councilJsessionId) { + this.councilJsessionId = councilJsessionId; + } + + public String getCouncilHomeUrl() { + return councilHomeUrl; + } + + public void setCouncilHomeUrl(String councilHomeUrl) { + this.councilHomeUrl = councilHomeUrl; + } + } diff --git a/src/main/java/egovframework/com/ext/oauth/service/OAuthVO.java b/src/main/java/egovframework/com/ext/oauth/service/OAuthVO.java index 70fcb82f..42b697cd 100644 --- a/src/main/java/egovframework/com/ext/oauth/service/OAuthVO.java +++ b/src/main/java/egovframework/com/ext/oauth/service/OAuthVO.java @@ -3,9 +3,45 @@ package egovframework.com.ext.oauth.service; import com.github.scribejava.apis.GoogleApi20; import com.github.scribejava.core.builder.api.DefaultApi20; +import nlib.cmm.crypto.AriaCrypto; import nlib.util.StringUtil; public class OAuthVO implements OAuthConfig { + + private String serviceName; + private String clientId; + private String clientSecret; + private String redirectUrl; + private DefaultApi20 api20Instance; + private String profileUrl; + + private boolean isNaver; + private boolean isGoogle; + private boolean isKakao; + + public OAuthVO(String serviceName, String clientId, String clientSecret, String redirectUrl) { + this.serviceName = serviceName; + this.clientId = clientId; + this.clientSecret = clientSecret; + this.redirectUrl = redirectUrl; + + this.isGoogle = StringUtil.equalsIgnoreCase(GOOGLE_SERVICE_NAME, serviceName); + this.isNaver = StringUtil.equalsIgnoreCase(NAVER_SERVICE_NAME, serviceName); + this.isKakao = StringUtil.equalsIgnoreCase(KAKAO_SERVICE_NAME, serviceName); + + if (isGoogle) { + this.api20Instance = GoogleApi20.instance(); + this.profileUrl = GOOGLE_PROFILE_URL; + } else if (isNaver) { + this.api20Instance = NaverAPI20.instance(); + this.profileUrl = NAVER_PROFILE_URL; + } else if (isKakao) { + this.api20Instance = KakaoAPI20.instance(); + this.profileUrl = KAKAO_PROFILE_URL; + } + } + + // GET / SET public String getService() { return serviceName; } @@ -30,9 +66,11 @@ public class OAuthVO implements OAuthConfig { this.clientSecret = clientSecret; } - public String getRedirectUrl(String callType) { + public String getRedirectUrl(String callType, String councilJsessionId) { String retUrl = redirectUrl.replaceAll("\\{callType\\}", callType); retUrl = retUrl.replaceAll("\\{oauthServiceName\\}", getService()); + String encCouncilJsessionId = AriaCrypto.encode(councilJsessionId); + retUrl = retUrl.replaceAll("\\{councilJsessionId\\}", (councilJsessionId == null ? "" : encCouncilJsessionId)); return retUrl; } @@ -79,38 +117,5 @@ public class OAuthVO implements OAuthConfig { public void setKakao(boolean isKakao) { this.isKakao = isKakao; } - - private String serviceName; - private String clientId; - private String clientSecret; - private String redirectUrl; - private DefaultApi20 api20Instance; - private String profileUrl; - private boolean isNaver; - private boolean isGoogle; - private boolean isKakao; - - public OAuthVO(String serviceName, String clientId, String clientSecret, String redirectUrl) { - this.serviceName = serviceName; - this.clientId = clientId; - this.clientSecret = clientSecret; - this.redirectUrl = redirectUrl; - - this.isGoogle = StringUtil.equalsIgnoreCase(GOOGLE_SERVICE_NAME, serviceName); - this.isNaver = StringUtil.equalsIgnoreCase(NAVER_SERVICE_NAME, serviceName); - this.isKakao = StringUtil.equalsIgnoreCase(KAKAO_SERVICE_NAME, serviceName); - - if (isGoogle) { - this.api20Instance = GoogleApi20.instance(); - this.profileUrl = GOOGLE_PROFILE_URL; - } else if (isNaver) { - this.api20Instance = NaverAPI20.instance(); - this.profileUrl = NAVER_PROFILE_URL; - } else if (isKakao) { - this.api20Instance = KakaoAPI20.instance(); - this.profileUrl = KAKAO_PROFILE_URL; - } - } - } diff --git a/src/main/java/nlib/cmm/fileupload/FileUploadController_BK20210924.java b/src/main/java/nlib/cmm/fileupload/FileUploadController_BK20210924.java deleted file mode 100644 index 3599ff7a..00000000 --- a/src/main/java/nlib/cmm/fileupload/FileUploadController_BK20210924.java +++ /dev/null @@ -1,246 +0,0 @@ -package nlib.cmm.fileupload; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import egovframework.com.cmm.service.FileVO; -import nlib.bbs.service.AttachFileVO; -import nlib.cmm.exception.ErrorMessage; -import nlib.cmm.service.NlibProperty; -import nlib.util.FileUtil; -import nlib.util.StringUtil; -import nlib.util.UUID; - -/** - *
- * @Class Name : FileUploadController.java
- * 
- * @Description : 파일 업로드를 처리하는 컨트롤러  
- * 
- * 
- * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
- *
- * 
- * - * @ ------------ -------- --------------------------- - * @ 수정일 수정자 수정내용 - * @ ------------ -------- --------------------------- - * @ 2021. 7. 15. KNKIM 최초 생성 - * - * - * @author 이씨플라자 * DIGITALSHIP KNKIM - * @since 2021. 7. 15. - * @version 1.0 - * - */ -@Controller -public class FileUploadController_BK20210924 { - - private static final Logger log = LoggerFactory.getLogger(FileUploadController_BK20210924.class); - - - /** - * 첨부파일이 저장되는 최상위 위치 - */ - private String FILEUPLOAD_BASE_PATH = NlibProperty.getProperty("fileupload.base.path"); - - /** - * 첨부파일 임시 저장 위치 - */ - private String FILEUPLOAD_TEMP_SUBPATH = NlibProperty.getProperty("fileupload.temp.subpath"); - - /** - * 경로 부적합 오류 메시지 - */ - private static final String MSG_NOT_VALID_FILE_PATH = "파일 경로가 부적합합니다. 관리자에게 문의하여 주시기 바랍니다."; - - - /** - * 파일업로드(Ajax) 처리 - * - 화면 : Javascript Free Open Framework DropZone 사용 - * - * @param multiRequest - * @param subPathKey - * @param response : 파일정보를 담은 JSON String - * @return - */ - @ResponseBody - @RequestMapping(value="/fileupload/uploadFilesAjax_BK20210924.do", produces="application/json") - public ResponseEntity uploadFilesAjax( - final MultipartHttpServletRequest multiRequest - , @RequestParam("subPathKey") String subPathKey - , HttpServletResponse response) { - - String message = null; - - // TODO : 권한 체크 추가할 것 - List result = new ArrayList(); - - try { - - // 최상위 위치 - if(FileUtil.isEmpty(FILEUPLOAD_BASE_PATH)) { - message = "첨부파일이 저장되는 최상위 위치정보값이 정확하지 않습니다."; - log.error(message + " : FILEUPLOAD_BASE_PATH 값 부재"); - ErrorMessage errorMessage = new ErrorMessage("ERROR", message); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage); - } - - // 서브 위치 - if(StringUtil.isEmpty(subPathKey)) { - message = "첨부파일이 저장되는 하위 위치정보값이 정확하지 않습니다."; - log.error(message + " : 매개변수 subPathKey 값 부재"); - ErrorMessage errorMessage = new ErrorMessage("ERROR", message); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage); - } - String subPath = NlibProperty.getProperty(subPathKey); - if(StringUtil.isEmpty(subPath)) { - message = "첨부파일이 저장되는 하위 위치정보값을 찾을 수 없습니다."; - log.error(message + " : 매개변수 subPathKey의 속성값 부재"); - ErrorMessage errorMessage = new ErrorMessage("ERROR", message); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage); - } - - // 위치정보 적합 확인 - if(FileUtil.isNotValid(FILEUPLOAD_BASE_PATH + subPath)) { - message = MSG_NOT_VALID_FILE_PATH; - log.error(message + " : " + (FILEUPLOAD_BASE_PATH + subPath)); - ErrorMessage errorMessage = new ErrorMessage("ERROR", message); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage); - } - - // 파일 업로드 처리 - final Map files = multiRequest.getFileMap(); - log.debug("uploadFilesAjax : 진입 > 파일수 = " + (files == null ? " files null " : files.size())); - - File dir = new File(FILEUPLOAD_BASE_PATH + subPath); - if(!dir.exists() || !dir.isDirectory()) dir.mkdirs(); - - if(!files.isEmpty()) { - - Iterator> itr = files.entrySet().iterator(); - MultipartFile file; - String filePath = ""; - FileVO fvo; - - int fileKey = 1; - while (itr.hasNext()) { - Entry entry = itr.next(); - - file = entry.getValue(); - String orginFileName = file.getOriginalFilename(); - - //-------------------------------------- - // 원 파일명이 없는 경우 처리 SKIP - // (첨부가 되지 않은 input file type) - //-------------------------------------- - if (orginFileName == null || "".equals(orginFileName)) { - continue; - } - - int index = orginFileName.lastIndexOf("."); - String fileExt = (index < 1 ? "" : orginFileName.substring(index + 1)); - String newName = UUID.getPhysicalFileName(); - long size = file.getSize(); - - if (!"".equals(orginFileName)) { - filePath = FILEUPLOAD_BASE_PATH + subPath + "/" + newName; - log.debug("FILE UPLOAD : filePath=" + filePath); - - file.transferTo(new File(FileUtil.filePathBlackList(filePath))); - } - - fvo = new FileVO(); - fvo.setFileExtsn(fileExt); - fvo.setFileMg(Long.toString(size)); - fvo.setOrignlFileNm(orginFileName); - fvo.setStreFileNm(newName); - fvo.setFileSn(String.valueOf(fileKey)); - - result.add(fvo); - - fileKey++; - } - } - } catch(Exception e) { - ErrorMessage errorMessage = new ErrorMessage("ERROR", "처리에 실패하였습니다 : " + e.toString()); - e.printStackTrace(); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage); - } - - // Convert Json - ObjectMapper mapper = new ObjectMapper(); - String json; - try { - json = mapper.writeValueAsString(result); - log.debug("RETURN DATA > json:" + json); - } catch (JsonProcessingException e) { - json = null; - e.printStackTrace(); - ErrorMessage errorMessage = new ErrorMessage("ERROR", "JSON 변환 처리에 실패하였습니다 : " + e.toString()); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage); - } - - HttpHeaders responseHeaders = new HttpHeaders(); - ResponseEntity ret = ResponseEntity.ok().headers(responseHeaders).body(json); - return ret; - } - - /** - * 파일 다운로드를 처리한다. - * - * @param params - * @param mv - * @return - * @throws Exception - */ - @RequestMapping(value="/fileupload/downloadAttachFile_BK20210924.do") - public ModelAndView downloadAttachFile(AttachFileVO attachFileVO, ModelAndView mv) throws Exception { - - // TODO 권한 설정 기능 추가 필요 - - String subPath = NlibProperty.getProperty(attachFileVO.getSubPathKey()); - String fullPath = FILEUPLOAD_BASE_PATH + "/" + subPath + "/" + attachFileVO.getFileId() + "-" + attachFileVO.getFileSeq(); - - log.debug("downloadAttachFile > fullPath = " + fullPath); - - if(FileUtil.isNotValid(fullPath)) { - throw new Exception(MSG_NOT_VALID_FILE_PATH); - } - - File file = new File(FileUtil.filePathBlackList(fullPath)); - if(!file.isFile()) { - throw new Exception("파일 정보가 부적합합니다. 관리자에게 문의하여 주시기 바랍니다."); - } - - mv.setViewName("downloadView"); // dispatcher-servlet.xml내 BeanNameViewResolver 정의 - mv.addObject("downloadFile", file); - mv.addObject("fname", attachFileVO.getFileName()); - - return mv; - } -} - diff --git a/src/main/java/nlib/col/service/impl/RentDAO_BK.java b/src/main/java/nlib/col/service/impl/RentDAO_BK.java index c333a69e..852bc689 100644 --- a/src/main/java/nlib/col/service/impl/RentDAO_BK.java +++ b/src/main/java/nlib/col/service/impl/RentDAO_BK.java @@ -9,8 +9,8 @@ import nlib.restful.DataApi; import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiResVO; -@Repository("rentDAO") -public class RentDAO extends DataApi +@Repository("rentDAO_BK") +public class RentDAO_BK extends DataApi { private static final Logger log = LoggerFactory.getLogger(RentDAO.class); diff --git a/src/main/java/nlib/security/SpringSecurityConfig.java b/src/main/java/nlib/security/SpringSecurityConfig.java index 201c580e..cdce67d2 100644 --- a/src/main/java/nlib/security/SpringSecurityConfig.java +++ b/src/main/java/nlib/security/SpringSecurityConfig.java @@ -61,7 +61,9 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() - .antMatchers("/**").permitAll(); + .antMatchers("/**").permitAll() + .and().csrf() + .disable(); /* .antMatchers("/login/**").permitAll() .antMatchers("/member/*.do").permitAll() @@ -101,7 +103,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { .disable(); */ http.logout() - .logoutSuccessUrl("/login/loginCouncil.do?logout=logout") + .logoutSuccessUrl("/login/logout.do") .invalidateHttpSession(true).deleteCookies("JSESSIONID") ; } diff --git a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java index a00383c4..70616f52 100644 --- a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java +++ b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java @@ -100,8 +100,6 @@ public class LoginServiceImpl implements LoginService * 지방문화원 해당 세션에 대한 최종 로그인 세션을 처리한다. * 정상인 경우 null을 리턴하고, 오류발생시 오류코드를 리턴한다. * - * (non-Javadoc) - * @see nlib.user.service.LoginService#loginCouncilSSO(javax.servlet.http.HttpServletRequest, java.lang.String) */ public String loginCouncilSSO(HttpServletRequest req, String councilCd, OAuthUniversalUser oUser) { @@ -203,9 +201,6 @@ public class LoginServiceImpl implements LoginService /* * DNS 호스트명으로 지방문화원 정보를 조회한다. (지방문화원코드, 명칭) - * - * (non-Javadoc) - * @see nlib.user.service.LoginService#selectCouncilInfoByDnsHost(java.lang.String) */ public HashMap selectCouncilInfoByDnsHost(String councilDnsHost) { return loginDAO.selectCouncilInfoByDnsHost(councilDnsHost); @@ -219,98 +214,8 @@ public class LoginServiceImpl implements LoginService return loginDAO.agreeProvInfo(loginVO); } - - public NlibLoginVO selectLoginUserInfo(NlibLoginVO loginVO) { return loginDAO.selectLoginUserInfo(loginVO); } - /* SNS 연동 SSO를 통한 로그인 처리한다. - * - * return값이 null인 경우, 정상적인 로그인 처리 완료 - * null이 아닌 경우, REDIRECT되어야 하는 URL(오류 코드 포함) - * - */ -// public String loginOauth(HttpServletRequest req, String snsUserId) { -// -// // SNS 연동 사용자UID로 사용자정보 조회 -// if(StringUtil.isEmpty(snsUserId)) return "/login/loginForm.do?error=req-sns-sso"; -// -// NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(snsUserId); -// -// if(nLoginVO == null) { -// return "/login/loginForm.do?error=new-membership"; -// } -// -// // 아이디와 패스워드로, Security 가 알아 볼 수 있는 token 객체로 변경한다. -// UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getLoginUserId(), nLoginVO.getUserPwd()); -// -// try { -// // AuthenticationManager 에 token 을 넘기면 UserDetailsService 가 받아 처리하도록 한다. -// Authentication authentication = authenticationManager.authenticate(token); -// -// SecUserVO userVO = (SecUserVO)authentication.getPrincipal(); -// -// // 실제 SecurityContext 에 authentication 정보를 등록한다. -// SecurityContextHolder.getContext().setAuthentication(authentication); -// -// // TODO : 로그인 로그 정보를 통합자료시스템에 전송한다. -// userVO.setAccIp(req.getRemoteAddr()); -// userVO.setLoginSucsYn("Y"); -// loginDAO.insertLoginLog(userVO); -// -// } catch (DisabledException e) { -// e.printStackTrace(); -// return "/login/loginForm.do?error=locked"; -// } catch (LockedException e) { -// e.printStackTrace(); -// return "/login/loginForm.do?error=disable"; -// } catch (BadCredentialsException e) { -// e.printStackTrace(); -// return "/login/loginForm.do?error=invalid-password"; -// } catch (Exception e) { -// e.printStackTrace(); -// return "/login/loginForm.do?error=other&message=" + e.toString(); -// } -// -// return null; -// } -// - - - - /* - * SNS 연동 SSO를 통한 로그인 처리한다. - * - * return값이 null인 경우, 정상적인 로그인 처리 완료 - * null이 아닌 경우, REDIRECT되어야 하는 URL(오류 코드 포함) - * - */ -// public String loginCouncil(HttpServletRequest req, String snsUserId) { -// -// // SNS 연동 사용자UID로 사용자정보 조회 -// if(StringUtil.isEmpty(snsUserId)) return "/login/loginForm.do?error=req-sns-sso"; -// -// -// NlibLoginVO nLoginParamVO = new NlibLoginVO(); -// -// nLoginParamVO.setSnsId(snsId); -// nLoginParamVO.setSnsType(oauthServiceName); -// -// NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO); -// -// if(nLoginVO == null) { -// return "/login/loginForm.do?error=new-membership"; -// } -// -// // 아이디와 패스워드로, Security 가 알아 볼 수 있는 token 객체로 변경한다. -// UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getLoginUserId(), nLoginVO.getPassword()); -// NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token); -// -// // 로그인 로그 저장 -// loginDAO.insertLoginLog(NlibLoginedVO); -// -// return null; -// } - } \ No newline at end of file diff --git a/src/main/java/nlib/user/web/LoginController.java b/src/main/java/nlib/user/web/LoginController.java index 4d92504b..1b2db72c 100644 --- a/src/main/java/nlib/user/web/LoginController.java +++ b/src/main/java/nlib/user/web/LoginController.java @@ -2,7 +2,6 @@ package nlib.user.web; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.annotation.Resource; @@ -29,10 +28,10 @@ import egovframework.com.ext.oauth.service.OAuthLogin; import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.com.ext.oauth.service.OAuthVO; import nlib.cmm.NlibCommonController; +import nlib.cmm.crypto.AriaCrypto; import nlib.cmm.service.NlibProperty; import nlib.cmm.session.SessionConfig; import nlib.col.service.CartService; -import nlib.col.service.CollectionVO; import nlib.user.service.LoginService; import nlib.user.service.NlibLoginVO; import nlib.util.StringUtil; @@ -65,11 +64,6 @@ import nlib.util.StringUtil; @Controller public class LoginController extends NlibCommonController { - public LoginController() { - super(); - log.debug("==========================> LoginController Create : !!!! " + (new java.util.Date())); - } - private static final Logger log = LoggerFactory.getLogger(LoginController.class); //------------------------------------------- @@ -94,38 +88,33 @@ public class LoginController extends NlibCommonController { /** - * 각 지방문화원 사이트에서 로그인을 위해서 최초 접속한다. - * 지방문화원 정보를 확인하여 로그인처리가 진행될 수 있도록 한다. - * + * 접속한 지방문화원정보를 세션에 설정한다. + * * @param req * @param res - * @param session * @param returnUrl - * @param model - * @return + * @param callType * @throws Exception */ - @RequestMapping("/login/loginCouncil.do") - public String loginCouncil( + public void setCouncilInfo( HttpServletRequest req, HttpServletResponse res, - HttpSession session, - @RequestParam(required = false) String logout, - @RequestParam(required = false) String returnUrl, - @RequestParam(required = false) String callType, - ModelMap model) throws Exception { + String returnUrl, + String callType) throws Exception { + HttpSession session = req.getSession(); String url = req.getRequestURL().toString(); String councilHomeUrl = url.replaceAll(req.getRequestURI(), "") + req.getContextPath(); String councilReturnUrl = councilHomeUrl + (StringUtil.isEmpty(returnUrl) ? "/" : returnUrl); String councilDnsHost = StringUtil.getHostName(url); + String councilJsessionId = session.getId(); // 캐쉬된 요청URL인 존재하는 경우, 리턴URL로 설정 RequestCache cache = new HttpSessionRequestCache(); SavedRequest savedRequest = cache.getRequest(req, res); if (savedRequest != null) { councilReturnUrl = savedRequest.getRedirectUrl(); - log.debug("loginCouncil > HttpSessionRequestCache에서 획득 councilReturnUrl = " + councilReturnUrl); + log.debug("setCouncilInfo > HttpSessionRequestCache에서 획득 councilReturnUrl = " + councilReturnUrl); } // 지방문화원 코드 확인 @@ -135,35 +124,29 @@ public class LoginController extends NlibCommonController { session.setAttribute("councilReturnUrl", councilReturnUrl); session.setAttribute("councilHomeUrl", councilHomeUrl); - session.setAttribute("councilDnsHost", councilDnsHost); session.setAttribute("councilCd", councilCd); session.setAttribute("councilNm", councilNm); session.setAttribute("callType", callType); - log.debug("loginCouncil > sessionid=" + session.getId()); - log.debug("loginCouncil > REQ URL = " + url); - log.debug("loginCouncil > councilJsessionId = " + session.getId()); - log.debug("loginCouncil > councilDnsHost = " + councilDnsHost); - log.debug("loginCouncil > councilReturnUrl = " + councilReturnUrl); - log.debug("loginCouncil > councilHomeUrl = " + councilHomeUrl); - log.debug("loginCouncil > councilCd = " + councilCd); - log.debug("loginCouncil > councilNm = " + councilNm); - log.debug("loginCouncil > callType = " + callType); + log.debug("setCouncilInfo > REQ URL = " + url); + log.debug("setCouncilInfo > councilJsessionId = " + councilJsessionId); + log.debug("setCouncilInfo > councilDnsHost = " + councilDnsHost); + log.debug("setCouncilInfo > councilReturnUrl = " + councilReturnUrl); + log.debug("setCouncilInfo > councilHomeUrl = " + councilHomeUrl); + log.debug("setCouncilInfo > councilCd = " + councilCd); + log.debug("setCouncilInfo > councilNm = " + councilNm); + log.debug("setCouncilInfo > callType = " + callType); - model.addAttribute("url" , NlibProperty.getString("nculture.login.preset.redirect.url")); - model.addAttribute("councilJsessionId", session.getId()); - model.addAttribute("councilDnsHost" , councilDnsHost); - model.addAttribute("councilCd" , councilCd); - model.addAttribute("councilNm" , StringUtil.encodeBase64(councilNm)); - model.addAttribute("councilHomeUrl" , StringUtil.encodeBase64(councilHomeUrl)); - model.addAttribute("councilReturnUrl" , StringUtil.encodeBase64(councilReturnUrl)); - model.addAttribute("logout" , StringUtil.getString(logout, "")); - model.addAttribute("callType" , StringUtil.getString(callType, "")); + // 세션 추가정보 저장소에 회귀 문화원 정보 담기 + OAuthUniversalUser oauthUser = new OAuthUniversalUser(); + oauthUser.setCouncilJsessionId(councilJsessionId); + oauthUser.setCouncilHomeUrl(councilHomeUrl); + SessionConfig.setLoginInfo(councilJsessionId, oauthUser); - return "nlib/login/loginPreSet"; + return; } - + /** * 로그인 콜백을 위한 설정을 처리한 후, 로그인 페이지로 전환한다. * @@ -175,6 +158,7 @@ public class LoginController extends NlibCommonController { */ @RequestMapping("/login/loginPreSet.do") public String loginPreSet(HttpServletRequest req, + HttpServletResponse response, @RequestParam(required = false) String error, @RequestParam(required = false) String message, @RequestParam(required = false) String logout, @@ -183,6 +167,9 @@ public class LoginController extends NlibCommonController { Model model, HttpSession session) { + //response.setHeader("X-Frame-Options", "ALLOW-FROM https://nlib-dev.nculture.org"); + //response.setHeader("X-Frame-Options", "ALLOW-FROM https://seoul.nculture.org/"); + //---------------------------------------------- // 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인 //---------------------------------------------- @@ -232,20 +219,34 @@ public class LoginController extends NlibCommonController { * @param model * @return */ - @RequestMapping("/login/loginForm.do") - public String loginForm(HttpServletRequest req, + @RequestMapping(value= {"/login/loginForm.do", "/login/loginFormPopup.do", "/login/memberSnsForm.do"}) + public String loginForm( + HttpServletRequest req, + HttpServletResponse res, + @RequestParam(required = false) String callType, + @RequestParam(required = false) String returnUrl, + @RequestParam(required = false) String logout, @RequestParam(required = false) String error, @RequestParam(required = false) String message, - @RequestParam(required = false) String logout, RedirectAttributes redirectAttrs, - @RequestParam Map paramMap, - Model model, - HttpSession session) { + Model model) throws Exception { + String reqPath = req.getServletPath(); + + // callType + if(StringUtil.isEmpty(callType)) { + if(reqPath.startsWith("/login/member")) callType = OAuthLogin.CALL_TYPE_MEMBER; + else callType = OAuthLogin.CALL_TYPE_LOGIN; + } + + // 지방문화원 사이트 정보를 세션 및 추가정보에 담는다. + setCouncilInfo(req, res, returnUrl, callType); + HttpSession session = req.getSession(); + //---------------------------------------------- // 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인 //---------------------------------------------- - String councilJsessionId = (String)session.getAttribute("councilJsessionId"); + String councilJsessionId = session.getId(); String councilDnsHost = (String)session.getAttribute("councilDnsHost"); String councilReturnUrl = (String)session.getAttribute("councilReturnUrl"); String councilHomeUrl = (String)session.getAttribute("councilHomeUrl"); @@ -263,15 +264,15 @@ public class LoginController extends NlibCommonController { //---------------------------------------------- // SNS 연동 URL 생성 //---------------------------------------------- - OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, OAuthLogin.CALL_TYPE_LOGIN); + OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, callType, councilJsessionId); log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL()); model.addAttribute("naverUrl", naverLogin.getOAuthURL()); - OAuthLogin googleLogin = new OAuthLogin(googleAuthVO, OAuthLogin.CALL_TYPE_LOGIN); + OAuthLogin googleLogin = new OAuthLogin(googleAuthVO, callType, councilJsessionId); log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL()); model.addAttribute("googleUrl", googleLogin.getOAuthURL()); - OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, OAuthLogin.CALL_TYPE_LOGIN); + OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, OAuthLogin.CALL_TYPE_LOGIN, councilJsessionId); log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL()); model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL()); @@ -281,7 +282,21 @@ public class LoginController extends NlibCommonController { model.addAttribute("message", "로그아웃되었습니다. 감사합니다."); } - return "nlib/login/loginForm"; + String retScreen = "nlib/login/loginFormPopup"; + if(OAuthLogin.CALL_TYPE_MEMBER.equalsIgnoreCase(callType)) retScreen = "nlib/login/memberSnsForm"; + else if(reqPath.equalsIgnoreCase("/login/loginForm.do")) retScreen = "nlib/login/loginForm"; + + return retScreen; + } + + @RequestMapping(value = {"/login/loginMessage.do"}) + public String loginMessage( + HttpServletRequest req, + String message, + Model model) { + + model.addAttribute("message", message); + return "nlib/login/loginMessage"; } /** @@ -301,16 +316,37 @@ public class LoginController extends NlibCommonController { HttpServletRequest req, @PathVariable String callType, @PathVariable String oauthServiceName, + @RequestParam(required = false) String councilJsessionId, @RequestParam(required = false) String code, @RequestParam(required = false) String error, Model model, HttpSession session) throws Exception { - String councilJsessionId = (String)session.getAttribute("councilJsessionId"); - String councilCd = (String)session.getAttribute("councilCd"); - String councilHomeUrl = (String)session.getAttribute("councilHomeUrl"); String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do"; + + if(StringUtil.isEmpty(councilJsessionId)) { + model.addAttribute("message", "잘못된 접근입니다. (접속문화원 세션정보 오류)"); + model.addAttribute("loginBtnYn", "Y"); + model.addAttribute("memberBtnYn", "Y"); + return "nlib/login/loginMessage"; + } + councilJsessionId = AriaCrypto.decode(councilJsessionId); + OAuthUniversalUser tmpUser = SessionConfig.getLoginInfo(councilJsessionId); + if(tmpUser == null || StringUtil.isEmpty(tmpUser.getCouncilHomeUrl())) { + model.addAttribute("message", "잘못된 접근입니다. (접속문화원 정보 오류)"); + model.addAttribute("loginBtnYn", "Y"); + model.addAttribute("memberBtnYn", "Y"); + return "nlib/login/loginMessage"; + } + String councilHomeUrl = tmpUser.getCouncilHomeUrl(); + if(StringUtil.isEmpty(councilHomeUrl)) { + model.addAttribute("message", "잘못된 접근입니다. (접속문화원 URL 정보 오류)"); + model.addAttribute("loginBtnYn", "Y"); + model.addAttribute("memberBtnYn", "Y"); + return "nlib/login/loginMessage"; + } + if(StringUtil.isNotEmpty(error)) { // 구글 정보 제공 동의 거절한 경우 @@ -318,13 +354,14 @@ public class LoginController extends NlibCommonController { if(StringUtil.equalsIgnoreCase("access_denied", error)) { if(OAuthLogin.CALL_TYPE_LOGIN.equalsIgnoreCase(callType)) { // 로그인인 경우 - redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.login.redirect.uri"); + model.addAttribute("loginBtnYn", "Y"); } else { // 회원가입인 경우 - redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.member.redirect.uri"); + model.addAttribute("memberBtnYn", "Y"); } + redirectUrl = councilHomeUrl + "/login/loginMessage.do"; model.addAttribute("url", redirectUrl); - model.addAttribute("message", StringUtil.encodeUrl("서비스를 이용하시려면 정보제공 동의가 필요합니다.")); + model.addAttribute("message", StringUtil.encodeUrl("서비스를 이용하시려면 SNS의 정보제공 동의가 필요합니다.")); return "nlib/login/loginPreSet"; } } @@ -443,7 +480,11 @@ public class LoginController extends NlibCommonController { OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(jsessionId); if(oauthUser == null || !oauthUser.isValid()) { - throw new Exception("잘못된 접근입니다."); + SessionConfig.removeLoginInfo(jsessionId); + model.addAttribute("message", "잘못된 접근입니다. 정상적인 방법으로 이용바랍니다."); + model.addAttribute("loginBtnYn", "Y"); + model.addAttribute("memberBtnYn", "Y"); + return "nlib/login/loginMessage"; } //----------------------------------------------- @@ -470,18 +511,22 @@ public class LoginController extends NlibCommonController { if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_MEMBERSHIP)) { SessionConfig.setNewMemberInfo(jsessionId, oauthUser); SessionConfig.removeLoginInfo(jsessionId); - model.addAttribute("message", "회원가입하신 후, 이용 가능합니다."); - return "redirect:" + NlibProperty.getString("member.new.url"); + model.addAttribute("message", "먼저 회원가입하신 후, 이용하여 주시기 바랍니다."); + model.addAttribute("memberBtnYn", "Y"); + return "nlib/login/loginMessage"; } else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) { + SessionConfig.setNewMemberInfo(jsessionId, oauthUser); SessionConfig.removeLoginInfo(jsessionId); model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다."); - return "redirect:" + NlibProperty.getString("login.back.url"); + model.addAttribute("loginBtnYn", "Y"); + return "nlib/login/loginMessage"; } // 잘못된 접근 또는 기타 오류 SessionConfig.removeLoginInfo(jsessionId); - model.addAttribute("message", "기타 문제로 인하여 로그인에 실패하였습니다. : " + loginResult); - return "redirect:" + NlibProperty.getString("login.back.url"); + model.addAttribute("message", "로그인에 실패하였습니다. 관리자에게 문의바랍니다 : " + loginResult); + return "nlib/login/loginMessage"; + } /** @@ -491,8 +536,11 @@ public class LoginController extends NlibCommonController { * @return */ @RequestMapping("/login/logout.do") - public String logout(HttpServletRequest req) { - return null; + public String logout(HttpServletRequest req, ModelMap model) { + model.addAttribute("message", "이용해 주셔서 감사드립니다."); + model.addAttribute("loginBtnYn", "Y"); + model.addAttribute("logout", "logout"); + return "nlib/login/loginMessage"; } /** diff --git a/src/main/java/nlib/user/web/MemberController.java b/src/main/java/nlib/user/web/MemberController.java index 2f680227..11c742b0 100644 --- a/src/main/java/nlib/user/web/MemberController.java +++ b/src/main/java/nlib/user/web/MemberController.java @@ -188,12 +188,10 @@ public class MemberController extends NlibCommonController{ count=memberService.selectSnsIdCount(oauthUser); if(count>0) { - model.addAttribute("msg","이미 가입된 계정입니다. 로그인해주세요."); - model.addAttribute("url","/nlib"+NlibProperty.getString("login.url")); - return "nlib/cmm/alert"; + model.addAttribute("message", "이미 가입된 계정입니다. 로그인 후, 이용해 주시기 바랍니다."); + model.addAttribute("loginBtnYn", "Y"); + return "nlib/login/loginMessage"; } - - model.addAttribute("termTitle", termRet.get("TITLE")); model.addAttribute("termContent", termRet.get("CONTENT")); diff --git a/src/main/resources/egovframework/spring/context-oauth.xml b/src/main/resources/egovframework/spring/context-oauth.xml index 3dc598f8..fe564a68 100644 --- a/src/main/resources/egovframework/spring/context-oauth.xml +++ b/src/main/resources/egovframework/spring/context-oauth.xml @@ -8,7 +8,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + diff --git a/src/main/resources/nlib/nlib.properties b/src/main/resources/nlib/nlib.properties index 1dfe42b6..9d633b07 100644 --- a/src/main/resources/nlib/nlib.properties +++ b/src/main/resources/nlib/nlib.properties @@ -20,11 +20,11 @@ home.uri = /index.do #---------------------------------------- # \ub85c\uadf8\uc778/\ud68c\uc6d0\uac00\uc785\uad00\ub828 URL \uc815\ubcf4 #---------------------------------------- -member.new.url = /member/snsCertForm.do +member.new.url = /login/memberSnsForm.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 +login.url = /login/loginForm.do +# \ub85c\uadf8\uc778 \ubb38\uc81c \ubc1c\uc0dd \uc2dc, \ub2e4\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 \uc8fc\uc18c +login.back.url = /login/loginGuide.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 @@ -35,7 +35,7 @@ nculture.login.redirect.uri = /login/loginForm.do nculture.login.post.login.redirect.uri = /login/loginCouncilSSO.do nculture.login.post.member.redirect.uri = /member/selectMemberJoiningInfo.do nculture.login.preset.redirect.url = https://nlib-dev.nculture.org/login/loginPreSet.do -nculture.member.redirect.uri = /member/snsCertForm.do +nculture.member.redirect.uri = /login/memberSnsForm.do #---------------------------------------- # NLIB \uc9c0\ubc29\ubb38\ud654\uc6d0\uc815\ubcf4 diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/loginForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/loginForm.jsp index 35fef86e..33719e7c 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/login/loginForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/loginForm.jsp @@ -14,10 +14,11 @@ * @ 수정일 수정자 수정내용 * @ ------------ -------- --------------------------- * @ 2021. 7. 12. JSYOO 최초 생성 - * + * @ 2021.10. 20. KNKIM 퍼블리쉬 템플릿 적용 * + * * @author 이씨플라자 * DIGITALSHIP JSYOO - * @since 2021. 7. 12. + * @since 2021. 10. 20. * @version 1.0 * */ @@ -28,49 +29,47 @@ <%@ 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 - - - - + - - -
- -error : ${error } - 
-message : ${message } - 

- - - - -
- -
-
- - -
- -------------------- -" /> -_______________ - - - - \ No newline at end of file + + +
+

로그인 섹션영역

+
+
+
+
    +
  • HOME
  • +
  • 로그인
  • +
+
    +
  • 로그인
  • +
+
+
화살표 아이콘
+
+
+
+ +
+

로그인할 때 이용할 SNS를 선택하세요!

+

 

+

회원가입하고 대출/열람 서비스를 이용해보세요!

+ +
+ +
+
+
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/loginMessage.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/loginMessage.jsp new file mode 100644 index 00000000..3df4725b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/loginMessage.jsp @@ -0,0 +1,71 @@ +<% +/** + *
+ * @Class Name : loginMessage.jsp
+ * 
+ * @Description : 로그인/회원가입 처리 과정 중 문제 발생에 따른 안내 화면  
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 10. 21. KNKIM 최초생성 + + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 10. 21. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + +
+

안내 섹션영역

+
+
+
자물쇠 아이콘
+

로그인 및 회원가입 안내

+
+
+
+
+
+

${message}

+
+ +
+

위의 안내 메시지를 확인하신 후, 다시 로그인하시거나 회원가입을 진행해 주시기 바랍니다.

+
+
+
+ 홈으로 +   +   + + 로그인 + +   +   + + + 회원가입 + +
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp index 9240d7ea..869d46c0 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp @@ -28,45 +28,42 @@ <%@ 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"%> -서비스 이동중입니다. - - - -서비스 이동중 +처리중입니다 + - - -
- --------------------
- -
-url : ${url}
-
- -
-councilJsessionId :
-councilDnsHost :
-councilCd :
-councilNm :
-councilHomeUrl :
-councilReturnUrl :
-logout :
-callType :
-message :
- -
- -
-COOKIES : - - - \ No newline at end of file + +
+ +
+ +
+ +

로그인 섹션영역

+
+
+
+
    +
  • HOME
  • +
  • 로그인
  • +
+
    +
  • 로그인
  • +
+
+
화살표 아이콘
+
+
+
+
+

처리중입니다. 잠시만 기다려 주시기 바랍니다.
${message }

+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSetPopup.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSetPopup.jsp new file mode 100644 index 00000000..e9bcaab9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSetPopup.jsp @@ -0,0 +1,86 @@ +<% +/** + *
+ * @Class Name : loginPreSet.jsp
+ * 
+ * @Description : 로그인폼 사전 처리 페이지 이동 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 10.13. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 10.13. + * @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="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"%> + + + +처리중입니다 + +
+

지방문화원 소장자료관

+

통합 로그인

+
+
+
+