로그인 팝업 및 로그인 템플릿 적용 작업

This commit is contained in:
KNKIM 2021-10-21 17:11:34 +09:00
parent f5e9453e06
commit c5d5b22ad3
27 changed files with 835 additions and 758 deletions

View File

@ -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());
}

View File

@ -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;
}
}

View File

@ -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;
}
@ -80,37 +118,4 @@ public class OAuthVO implements OAuthConfig {
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;
}
}
}

View File

@ -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;
/**
* <pre>
* @Class Name : FileUploadController.java
*
* @Description : 파일 업로드를 처리하는 컨트롤러
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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<FileVO> result = new ArrayList<FileVO>();
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<String, MultipartFile> 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<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
MultipartFile file;
String filePath = "";
FileVO fvo;
int fileKey = 1;
while (itr.hasNext()) {
Entry<String, MultipartFile> 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;
}
}

View File

@ -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);

View File

@ -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")
;
}

View File

@ -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<String, String> 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;
// }
}

View File

@ -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,33 +124,27 @@ 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<String, String> 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";
}
/**

View File

@ -188,13 +188,11 @@ 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"));

View File

@ -8,7 +8,7 @@
<constructor-arg value="naver" /><!-- Service Name -->
<constructor-arg value="EUu_FlgfyBlpQwGkXbit" /><!-- naverClientID -->
<constructor-arg value="f34KD054kW" /><!-- naverClientSecret -->
<constructor-arg value="https://nlib-dev.nculture.org/{callType}/{oauthServiceName}/callback.do" /><!-- naverRedirectUrl : callType(login|member) -->
<constructor-arg value="https://nlib-dev.nculture.org/{callType}/{oauthServiceName}/callback.do?councilJsessionId={councilJsessionId}" /><!-- naverRedirectUrl : callType(login|member) -->
</bean>
<!-- GOOGLE OAuth Configuration -->
@ -16,7 +16,7 @@
<constructor-arg value="google" /><!-- Service Name -->
<constructor-arg value="590802608410-a03ul9al205h3h8rvhrlr2tulleftt0o.apps.googleusercontent.com" /><!-- googleClientID -->
<constructor-arg value="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" /><!-- googleClientSecret -->
<constructor-arg value="https://nlib-dev.nculture.org/{callType}/{oauthServiceName}/callback.do" /><!-- googleRedirectUrl : callType(login|member) -->
<constructor-arg value="https://nlib-dev.nculture.org/{callType}/{oauthServiceName}/callback.do?councilJsessionId={councilJsessionId}" /><!-- googleRedirectUrl : callType(login|member) -->
</bean>
<!-- KAKAO OAuth Configuration -->
@ -24,7 +24,7 @@
<constructor-arg value="kakao" /><!-- Service Name -->
<constructor-arg value="9c1b2249240c011edf40a1d487702232" /><!-- kakaoClientID -->
<constructor-arg value="fxv4i1aztudvPj84DEUvMTnzWe29611G" /><!-- kakaoClientSecret -->
<constructor-arg value="https://nlib-dev.nculture.org/{callType}/{oauthServiceName}/callback.do" /><!-- kakaoRedirectUrl : callType(login|member) -->
<constructor-arg value="https://nlib-dev.nculture.org/{callType}/{oauthServiceName}/callback.do?councilJsessionId={councilJsessionId}" /><!-- kakaoRedirectUrl : callType(login|member) -->
</bean>
</beans>

View File

@ -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

View File

@ -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"%>
<c:set var="pageTitle"><spring:message code="nlib.title"/> - 결과</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}/login/loginCouncil.do?callType=member";
}
function findInfo(){
location.href="${pageContext.request.contextPath}/member/initPasswordForm.do";
function fn_signUp(){
location.href="${pageContext.request.contextPath}/login/memberSnsForm.do";
}
</script>
</head>
<body>
<br>
error : ${error }
&nbsp;<br>
message : ${message }
&nbsp;<br>
&nbsp;<br>
<!-- 로그인 섹션 -->
<section class="location join">
<h2 class="blind">로그인 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="location-box">
<ul class="loc">
<li>HOME</li>
<li class="on">로그인</li>
</ul>
<ul class="tit">
<li><span>로그인</span></li>
</ul>
</div>
<div class="arr"><img src="/images/icon/icon-join-arr2.png" alt="화살표 아이콘"></div>
</div>
<div class="row-bottom">
<div class="join-box">
<div class="login">
<div class="Btn Naver"><button type="button" onclick="location.href='${naverUrl}';">네이버 아이디로 로그인</button></div>
<div class="Btn Kakao"><button type="button" onclick="location.href='${googleUrl}';">카카오 로그인</button></div>
<div class="Btn Google"><button type="button" onclick="location.href='${kakaoUrl}';">Google 계정으로 로그인</button></div>
</div>
<div class="row Text">
<p>로그인할 때 이용할 SNS를 선택하세요!</p>
<p>&nbsp;</p>
<p><a href="javascript:void(0)" onclick="javascript:location.href='/login/memberSnsForm.do';" class="btn-gray">회원가입</a>하고 <span>대출/열람 서비스</span>를 이용해보세요!</p>
<!-- 네이버 로그인 화면으로 이동 시키는 URL -->
<!-- 네이버 로그인 화면에서 ID, PW를 올바르게 입력하면 callback 메소드 실행 요청 -->
<div id="naver_id_login" style="text-align:center"><a href="${naverUrl}" ><img width="223" src="${pageContext.request.contextPath}/images/nlib/sns/naver_login_btn.png"/></a></div>
<div id="googleLogin" style="text-align:center"><a href="${googleUrl}" ><img width="223" src="${pageContext.request.contextPath}/images/nlib/sns/google_login_btn.png"/></a></div>
<div id="kakao_id_login" style="text-align: center"> <a href="${kakaoUrl}" > <img width="223" src="${pageContext.request.contextPath}/images/nlib/sns/kakao_login_btn.png" /></a> </div>
<br>
<div style="text-align:center">
<input type="button" onclick="signUp();" value="회원가입">
<input type="button" onclick="findInfo();" value="비밀번호 초기화">
</div>
<script src="https://apis.google.com/js/platform.js?onload=init" async defer></script>
-------------------
<input type="text" value="<c:out value="${coutTest}" />" />
_______________
</div>
</div>
</div>
</div>
</section>
</body>
</html>

View File

@ -0,0 +1,71 @@
<%
/**
* <pre>
* @Class Name : loginMessage.jsp
*
* @Description : 로그인/회원가입 처리 과정 중 문제 발생에 따른 안내 화면
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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"%>
<!-- 안내 섹션 -->
<section class="join succ dormant">
<h2 class="blind">안내 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="icon"><img src="/images/icon/icon-dormant.png" alt="자물쇠 아이콘"></div>
<p>로그인 및 회원가입 안내</p>
</div>
<div class="row-bottom">
<div class="join-box">
<div class="success">
<div class="text">
<p><span>${message}</span></p>
</div>
<c:if test='${logout == "" }'>
<div class="box">
<p>위의 안내 메시지를 확인하신 후, 다시 로그인하시거나 회원가입을 진행해 주시기 바랍니다.</p>
</div>
</c:if>
<div class="btn">
<a href="javascript:void(0)" onclick="javascript:location.href='/';" class="btn-gray">홈으로</a>
&nbsp;
&nbsp;
<c:if test='${loginBtnYn == "Y" }'>
<a href="javascript:void(0)" onclick="javascript:location.href='/login/loginForm.do';" class="btn-color">로그인</a>
</c:if>
&nbsp;
&nbsp;
<c:if test='${memberBtnYn == "Y" }'>
<a href="javascript:void(0)" onclick="javascript:location.href='/login/memberSnsForm.do';" class="btn-color">회원가입</a>
</c:if>
</div>
</div>
</div>
</div>
</div>
</section>

View File

@ -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"%>
<c:set var="pageTitle">서비스 이동중입니다.</c:set>
<!DOCTYPE html>
<html>
<head>
<title>서비스 이동중</title>
<c:set var="pageTitle">처리중입니다</c:set>
<script>
$(document).ready(function() {
$("#frm").submit();
});
</script>
</head>
<body>
<br>
-------------------<br />
<form id="frmView" name="frmView"">
url : ${url}<br />
</form>
<form id="frm" name="frm" action="${url}" method="POST">
councilJsessionId : <input type="text" name="councilJsessionId" id="councilJsessionId" value="${councilJsessionId }" /><br/>
councilDnsHost : <input type="text" name="councilDnsHost" id="councilDnsHost" value="${councilDnsHost }" /><br/>
councilCd : <input type="text" name="councilCd" id="councilCd" value="${councilCd }" /><br/>
councilNm : <input type="text" name="councilNm" id="councilNm" value="${councilNm }" /><br/>
councilHomeUrl : <input type="text" name="councilHomeUrl" id="councilHomeUrl" value="${councilHomeUrl }" /><br/>
councilReturnUrl : <input type="text" name="councilReturnUrl" id="councilReturnUrl" value="${councilReturnUrl }" /><br/>
logout : <input type="text" name="logout" id="logout" value="${logout }" /><br/>
callType : <input type="text" name="callType" id="callType" value="${callType }" /><br/>
message : <input type="text" name="message" id="message" value="${message }" /><br/>
<input type="submit" value="계속" />
</form>
<br>
COOKIES :
<script>
document.write(document.cookie);
$("#frmLoginProc").submit();
})
</script>
</body>
</html>
<!-- 로그인 섹션 -->
<section class="location join">
<form id="frmLoginProc" name="frmLoginProc" action="${url}" method="POST">
<input type="hidden" name="message" id="message" value="${message }" />
</form>
<h2 class="blind">로그인 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="location-box">
<ul class="loc">
<li>HOME</li>
<li class="on">로그인</li>
</ul>
<ul class="tit">
<li><span>로그인</span></li>
</ul>
</div>
<div class="arr"><img src="/images/icon/icon-join-arr2.png" alt="화살표 아이콘"></div>
</div>
<div class="row-bottom">
<div class="join-box">
<div class="row Text">
<p>처리중입니다. 잠시만 기다려 주시기 바랍니다.<br>${message }</p>
</div>
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,86 @@
<%
/**
* <pre>
* @Class Name : loginPreSet.jsp
*
* @Description : 로그인폼 사전 처리 페이지 이동
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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"%>
<script>
$(document).ready(function() {
$("#snsLogin").contents().find('body').append('<form id="frmLoginPop" name="frmLoginPop" action="${url}" method="POST">' +
'url : ${url}<br/>' +
'councilJsessionId : <input type="text" name="councilJsessionId" id="councilJsessionId" value="${councilJsessionId }" /><br/>' +
'councilDnsHost : <input type="text" name="councilDnsHost" id="councilDnsHost" value="${councilDnsHost }" /><br/>' +
'councilCd : <input type="text" name="councilCd" id="councilCd" value="${councilCd }" /><br/>' +
'councilNm : <input type="text" name="councilNm" id="councilNm" value="${councilNm }" /><br/>' +
'councilHomeUrl : <input type="text" name="councilHomeUrl" id="councilHomeUrl" value="${councilHomeUrl }" /><br/>' +
'councilReturnUrl : <input type="text" name="councilReturnUrl" id="councilReturnUrl" value="${councilReturnUrl }" /><br/>' +
'logout : <input type="text" name="logout" id="logout" value="${logout }" /><br/>' +
'callType : <input type="text" name="callType" id="callType" value="${callType }" /><br/>' +
'message : <input type="text" name="message" id="message" value="${message }" /><br/>' +
'&nbps;<br>' +
'&nbps;<br>' +
'<input type="submit" value="계속">' +
'</form>');
});
</script>
<c:set var="pageTitle">처리중입니다</c:set>
<div class="row Title">
<p>지방문화원 소장자료관</p>
<h3>통합 로그인</h3>
</div>
<div class="inner">
<div id="loginPopMain" class="row First">
<iframe id="snsLogin" width="100%" height="100%" />
<!--
<form id="frmLoginPop" name="frmLoginPop" action="${url}" method="POST">
url : ${url}<br/>
councilJsessionId : <input type="text" name="councilJsessionId" id="councilJsessionId" value="${councilJsessionId }" /><br/>
councilDnsHost : <input type="text" name="councilDnsHost" id="councilDnsHost" value="${councilDnsHost }" /><br/>
councilCd : <input type="text" name="councilCd" id="councilCd" value="${councilCd }" /><br/>
councilNm : <input type="text" name="councilNm" id="councilNm" value="${councilNm }" /><br/>
councilHomeUrl : <input type="text" name="councilHomeUrl" id="councilHomeUrl" value="${councilHomeUrl }" /><br/>
councilReturnUrl : <input type="text" name="councilReturnUrl" id="councilReturnUrl" value="${councilReturnUrl }" /><br/>
logout : <input type="text" name="logout" id="logout" value="${logout }" /><br/>
callType : <input type="text" name="callType" id="callType" value="${callType }" /><br/>
message : <input type="text" name="message" id="message" value="${message }" /><br/>
&nbps;<br>
&nbps;<br>
<input type="submit" value="계속">[계속]</a>
</form>
-->
</div>
<div class="row Text">
</div>
<button type="button" class="login-close"></button>
</div>
<div class="Bg"></div>

View File

@ -0,0 +1,72 @@
<%
/**
* <pre>
* @Class Name : snsForm.jsp
*
* @Description : 회원가입 SNS 인증 선택화면 출력
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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"%>
<!-- 회원가입 섹션 -->
<section class="location join">
<h2 class="blind">회원가입 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="location-box">
<ul class="loc">
<li>HOME</li>
<li class="on">회원가입</li>
</ul>
<ul class="tit">
<li><span>회원</span>가입</li>
</ul>
</div>
<div class="arr"><img src="/images/icon/icon-join-arr2.png" alt="화살표 아이콘"></div>
</div>
<div class="row-bottom">
<div class="join-box">
<div class="step">
<div class="s1 on">
<div class="icon"><img src="/images/icon/icon-join-step1-on.png" alt="본인인증 아이콘"></div>
<div class="text"><p>STEP 01</p><p>본인인증</p></div>
</div>
<div class="s2">
<div class="icon"><img src="/images/icon/icon-join-step2.png" alt="약관동의 아이콘"></div>
<div class="text"><p>STEP 02</p><p>약관동의</p></div>
</div>
<div class="s3">
<div class="icon"><img src="/images/icon/icon-join-step3.png" alt="정보입력 아이콘"></div>
<div class="text"><p>STEP 03</p><p>정보입력</p></div>
</div>
</div>
<div class="login">
<div class="Btn Naver"><button type="button" onclick="location.href='${naverUrl}';">네이버로 간편 가입</button></div>
<div class="Btn Kakao"><button type="button" onclick="location.href='${googleUrl}';">카카오로 회원가입</button></div>
<div class="Btn Google"><button type="button" onclick="location.href='${kakaoUrl}';">Google 계정으로 가입</button></div>
</div>
</div>
</div>
</div>
</section>

View File

@ -30,40 +30,38 @@
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">지방문화원 소장자료관 회원증</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
<fmt:parseDate value="${loginVO.birthday}" var="dateFmt" pattern="yyyyMMdd"/>
<fmt:formatDate value="${dateFmt}" var="dateStr" pattern="yyyy-MM-dd"/>
</script>
</head>
<c:set var="pageTitle">회원증</c:set>
<body>
<div class="wTableFrm" style="text-align:center;">
<!-- 타이틀 -->
<h2>${pageTitle}</h2>
<span name="userName" id="userName" title="이름"> ${loginVO.name} |
<span name="userBirthday" id="userBirthday" title="생년월일">
<fmt:parseDate value="${loginVO.birthday}" var="dateFmt" pattern="yyyyMMdd"/>
<fmt:formatDate value="${dateFmt}" var="dateStr" pattern="yyyy-MM-dd"/> ${dateStr}</span>
<br />
<img src="${pageContext.request.contextPath}/userInfo/getMemberQrcode.do" />
<br />
&nbsp;<br />
<span name="userNumber" id="userNumber" title="회원코드">회원코드 : ${loginVO.mbInfoId}</span>
<br />
&nbsp;<br />
※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다.
</div>
</body>
</html>
<div class="inner">
<div class="row Title">
<h3>내 회원증 확인</h3>
<p>QR코드를 리더기에 스캔하세요.</p>
</div>
<div class="row card">
<div class="title">
<p class="name">${loginVO.name}</p>
<p class="date">${dateStr}</p>
</div>
<div class="code">
<div class="num">
<div class="na">회원코드</div>
<div class="co">${loginVO.mbInfoId}</div>
<div class="pr"><progress id="bar" value="30" max="60"></progress></div>
<div class="ti">남은시간<span class="timer">23초</span></div>
</div>
<div class="qr">
<img src="${pageContext.request.contextPath}/userInfo/getMemberQrcode.do" alt="QR코드 이미지">
</div>
</div>
<div class="rolling">
<p><marquee>※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다. ※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다.</marquee></p>
</div>
</div>
<button type="button" class="login-close"></button>
</div>
<div class="Bg"></div>

View File

@ -26,7 +26,7 @@ $(document).ready(function() {
<h2 class="blind">헤더영역</h2>
<div class="inner">
<h1><a href="javascript:void(0)" onclick="javascript:location.href='/';"><img namme="imgLogo" id="imgLogo" src=""><span name="siteCommonTitle" id="siteCommonTitle">소장자료관 (<%=session.getAttribute("councilHomeUrl") %>)</span></a></h1>
<h1><a href="javascript:void(0)" onclick="javascript:location.href='/';"><img namme="imgLogo" id="imgLogo" src=""><span name="siteCommonTitle" id="siteCommonTitle">소장자료관</span></a></h1>
<div class="search-wrap">
<h2 class="blind">검색</h2>
@ -53,8 +53,7 @@ $(document).ready(function() {
<ul>
<sec:authorize access="not isAuthenticated()">
<li><!-- 개발자 확인용 타이틀 임시 추가 DDDDDDDDDDD -->
<a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/login/loginCouncil.do';"
title="${councilNm}(${councilCd})" class="login-btn">로그인</a></li>
<a href="javascript:void(0)" onclick='fn_layerPopWithClass("/login/loginFormPopup.do", "pop-login")' title="${councilNm}(${councilCd})" class="login-btn">로그인</a></li>
</sec:authorize>
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal.name" var="userName" />
@ -67,8 +66,8 @@ $(document).ready(function() {
</li>
</sec:authorize>
<li><a href="javascript:void(0)" class="member-card-btn">회원증</a></li>
<sec:authorize access="isAuthenticated()">
<li><a href="javascript:void(0)" onclick="javascript:fn_layerPop('${pageContext.request.contextPath}/userInfo/getMemberQrcodeFormPopup.do');">회원증</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/cmm/listNotifications.do';">알림(<span class="count">10</span>)</a></li>
</sec:authorize>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/cart/listCartItems.do';">카트(<span class="count">10</span>)</a></li>

View File

@ -31,7 +31,7 @@
<!-- 개발진행 중 임시 추가 : 시작 DDDDDDDDDDDDDD -->
<li>--- 이하 임시 추가 메뉴 ---</li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/user/member/searchIdForm.do';" title="ID/PW찾기" class="underline blue">ID/PW찾기</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/login/loginCouncil.do?callType=member';" title="회원가입" class="underline blue">회원가입</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/login/memberSnsForm.do';" title="회원가입" class="underline blue">회원가입</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/password/getSampleEncoder.do';" title="암호화" class="underline blue">암호화</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/system/reloadProperties.do';" title="환경설정갱신" class="underline blue">환경설정갱신</a></li>

View File

@ -4,48 +4,10 @@
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="format-detection" content="telephone=no" />
<link rel="shortcut icon" type="image/x-icon" href="#">
<link href="${pageContext.request.contextPath}/css/common.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/css/jquery.mCustomScrollbar.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/css/swiper.min.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/css/default.css" rel="stylesheet">
<script src="${pageContext.request.contextPath}/js/jquery-1.11.2.min.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery.mCustomScrollbar.js"></script>
<script src="${pageContext.request.contextPath}/js/swiper.min.js"></script>
<script src="${pageContext.request.contextPath}/js/default.js"></script>
<script src="${pageContext.request.contextPath}/js/nlib.js"></script>
<title>소장자료관</title>
<script type="text/javascript">
// 제목 설정
function fn_setPageTitle(title) {
document.title = "소장자료관 - " + title;
}
</script>
</head>
<body>
<div class="wrap sub">
<tiles:insertAttribute name="header" />
<tiles:insertAttribute name="menu" />
<tiles:insertAttribute name="main" />
<tiles:insertAttribute name="footer" />
</div>
</body>
</html>

View File

@ -13,20 +13,19 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="format-detection" content="telephone=no" />
<link rel="shortcut icon" type="image/x-icon" href="#">
<link href="${pageContext.request.contextPath}/css/common.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/css/jquery.mCustomScrollbar.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/css/swiper.min.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/css/default.css" rel="stylesheet">
<!-- <link rel="shortcut icon" type="image/x-icon" href="#"> 2번 호출되는 문제로 주석처리 -->
<link href="/css/common.css" rel="stylesheet">
<link href="/css/jquery.mCustomScrollbar.css" rel="stylesheet">
<link href="/css/swiper.min.css" rel="stylesheet">
<link href="/css/default.css" rel="stylesheet">
<!-- <script src="${pageContext.request.contextPath}/js/jquery-1.11.2.min.js"></script> -->
<script src="${pageContext.request.contextPath}/js/jquery/jquery.min.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery.mCustomScrollbar.js"></script>
<script src="${pageContext.request.contextPath}/js/swiper.min.js"></script>
<script src="${pageContext.request.contextPath}/js/default.js"></script>
<script src="/js/jquery/jquery.min.js"></script>
<script src="/js/jquery.mCustomScrollbar.js"></script>
<script src="/js/swiper.min.js"></script>
<script src="/js/default.js"></script>
<script src="${pageContext.request.contextPath}/js/nlib.js"></script>
<script src="${pageContext.request.contextPath}/js/cart.js"></script>
<script src="/js/nlib.js"></script>
<script src="/js/cart.js"></script>
<title>소장자료관</title>
@ -35,12 +34,14 @@
function fn_setPageTitle(title) {
document.title = "소장자료관 - " + title;
}
</script>
</head>
<body>
<div class="wrap sub">
<!-- 헤더 -->
<header id="header">
<tiles:insertAttribute name="header" />
@ -54,14 +55,14 @@ function fn_setPageTitle(title) {
<!-- 메인컨텐츠 -->
<tiles:insertAttribute name="main" />
<!-- 풋터 -->
<footer id="footer">
<tiles:insertAttribute name="footer" />
</footer>
</div>
<!-- Layer Popup -->
<!-- <div id="NLIB_LAYER_POPUP" name="NLIB_LAYER_POPUP" class="popup pop-advanced-search" style="display:none;"> -->
<div id="NLIB_LAYER_POPUP" name="NLIB_LAYER_POPUP" style="display:none;">
<div id="NLIB_LAYER_POPUP" name="NLIB_LAYER_POPUP" style="display:block;">
</div>
</body>

View File

@ -4,20 +4,21 @@
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- 메뉴 탭 타일즈 -->
<!-- 일반화면용 -->
<definition name="template" template="/WEB-INF/tiles/tiles-layout.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/inc/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/tiles/inc/menu.jsp" />
<put-attribute name="footer" value="/WEB-INF/tiles/inc/footer.jsp" />
</definition>
<!-- 레이어팝업용 -->
<definition name="popup" template="/WEB-INF/tiles/tiles-layout-popup.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/inc-popup/header-popup.jsp" />
<put-attribute name="menu" value="/WEB-INF/tiles/inc-popup/menu-popup.jsp" />
<put-attribute name="footer" value="/WEB-INF/tiles/inc-popup/footer-popup.jsp" />
</definition>
<definition name="*/*Popup" extends="popup">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}Popup.jsp" />
</definition>

View File

@ -15,7 +15,14 @@
<td width="100%" height="100%" align="center" valign="middle" style="padding-top: 150px;"><table border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="<spring:message code='image.errorBg' />">
<span style="font-family: Tahoma; font-weight: bold; color: #000000; line-height: 150%; width: 440px; height: 70px;"></span>
<span style="font-family: Tahoma; font-weight: bold; color: #000000; line-height: 150%; width: 440px; height: 70px;">Error</span>
&nbsp;<br>
status_code = <%=request.getAttribute("javax.servlet.error.status_code") %><br>
exception_type = <%=request.getAttribute("javax.servlet.error.exception_type") %><br>
message = <%=request.getAttribute("javax.servlet.error.message") %><br>
request_uri = <%=request.getAttribute("javax.servlet.error.request_uri") %><br>
exception = <%=request.getAttribute("javax.servlet.error.exception") %><br>
servlet_name = <%=request.getAttribute("javax.servlet.error.servlet_name") %><br>
</td>
</tr>
</table>

View File

@ -1,45 +0,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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>마포 문화원</title>
</head>
<body>
&nbsp;<br>
&nbsp;<br>
<h1>마포 문화원</h1>
&nbsp;<br>
&nbsp;<br>
JSESSIONID = <%=session.getId() %>
&nbsp;<br>
&nbsp;<br>
<h2>로그인</h2>
<a href="/login/loginDept.do">로그인</a>
&nbsp;<br>
&nbsp;<br>
<h2>로그인이 필요한 화면 링크</h2>
<a href="${pageContext.request.contextPath}/system/reloadProperties.do">프로퍼티갱신</a>
&nbsp;<br>
&nbsp;<br>
<script>
</script>
</body>
</html>

View File

@ -1,56 +0,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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>서울 문화원</title>
</head>
<body>
&nbsp;<br>
&nbsp;<br>
<h1>서울 문화원</h1>
&nbsp;<br>
&nbsp;<br>
JSESSIONID = <%=session.getId() %>
&nbsp;<br>
&nbsp;<br>
<h2>HOME</h2>
<a href="/">HOME</a>
&nbsp;<br>
&nbsp;<br>
<h2>로그인</h2>
<a href="${pageContext.request.contextPath}/login/loginCouncil.do">로그인</a>
&nbsp;<br>
&nbsp;<br>
<h2>로그인이 필요한 화면 링크</h2>
<a href="${pageContext.request.contextPath}/system/reloadProperties.do">프로퍼티갱신</a>
<%
String coutTest = "서울특별시 마포구 ";
%>
<input type="text" name="kkk" value="<c:out value="${'ab c' }" />" /> <br>
<input type="text" name="ssssss" value="<c:out value='${"서울특별시 마포구"}' />" />
&nbsp;<br>
&nbsp;<br>
<script>
</script>
</body>
</html>

View File

@ -88,8 +88,8 @@ function fn_openLayerPopup(title, content, linkName, linkUrl) {
function fn_closeLayerPopup() {
$("#NLB_LAYER_POPUP").html("");
$("#NLIB_LAYER_POPUP").hide();
$("#NLIB_LAYER_POPUP").fadeOut();
$('html,body').removeClass('no-scroll');
}
function fn_myAlert(newAlertNum) {
@ -100,6 +100,20 @@ function fn_myAlert(newAlertNum) {
fn_openLayerPopup("알림", "아직 확인하지 않은 새로운 알림이 " + newAlertNum + "건 있습니다", "알림 목록으로", CONTEXT_PATH + "/cmm/listNotifications.do");
}
function fn_layerPopWithClass(url, addClasses) {
// 클릭 시, 로딩되도록 처리 (2021.10.20)
$("#NLIB_LAYER_POPUP").removeClass();
$("#NLIB_LAYER_POPUP").addClass(addClasses);
$("#NLIB_LAYER_POPUP").load(url);
var classes = addClasses.split(" ");
$("." + classes[0]).fadeIn();
$('html,body').addClass('no-scroll');
}
function fn_layerPop(url, classes) {
$("#NLIB_LAYER_POPUP").load(url);
$("#NLIB_LAYER_POPUP").show();
@ -124,7 +138,8 @@ function fn_layerPopFormSubmit(formName, display) {
url: url,
data: dataList
}).done(function(response){
$("#NLIB_LAYER_POPUP").html(response);
alert("response:" + response);
$("#NLIB_LAYER_POPUP").empty().append(response);
});
}

View File

@ -1,28 +1,262 @@
<html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<link rel="icon" href="/favicon/favicon.ico" sizes="any"><!-- 32×32 -->
<link rel="apple-touch-icon" href="/favicon/apple-touch-icon.png"><!-- 180×180 -->
<link rel="manifest" href="/favicon/site.webmanifest">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="format-detection" content="telephone=no" />
<link href="/css/common.css" rel="stylesheet">
<link href="/css/jquery.mCustomScrollbar.css" rel="stylesheet">
<link href="/css/swiper.min.css" rel="stylesheet">
<link href="/css/default.css" rel="stylesheet">
<link href="/css/nlib.css" rel="stylesheet" type="text/css" />
<script src="/js/jquery/jquery.min.js"></script>
<script src="/js/jquery.mCustomScrollbar.js"></script>
<script src="/js/swiper.min.js"></script>
<script src="/js/default.js"></script>
<script src="/js/nlib.js"></script>
<script src="/js/cart.js"></script>
<title>소장자료관</title>
<script type="text/javascript">
// 제목 설정
function fn_setPageTitle(title) {
document.title = "소장자료관 - " + title;
}
</script>
</head>
<body>
<form action="http://localhost:8088/uac/service/nlib/col/getItemInfo" method="GET">
mngOrgCd : <input name="mngOrgCd" id="mngOrgCd" value="SU01" /> <br />
masterId : <input name="masterId" id="masterId" value="UR-408A9832D25C42289D9B1FC81FDA8360" /> <br />
typeDivCd : <input name="typeDivCd" id="typeDivCd" value="IT_MUSE" /> <br />
<br />
<input type="submit" id="btnSubmit" name="btnSubmit" value="전송" />
</form>
<div class="wrap sub">
<!-- 헤더 -->
<header id="header">
<!-- HOME -->
<script>
$(document).ready(function() {
$("#imgLogo").attr("src", "/images/logo/img-logo-SU04.png");
$("#imgLogo").on("error", function() {
$("<span id='siteCouncilNm' name='siteCouncilNm'>서울강서문화원</span>").insertBefore($("#siteCommonTitle"));
$("#siteCouncilNm").attr("style", "border-left:0px !important");
$(this).remove();
});
});
</script>
<h2 class="blind">헤더영역</h2>
<div class="inner">
<h1><a href="javascript:void(0)" onclick="javascript:location.href='/';"><img namme="imgLogo" id="imgLogo" src=""><span name="siteCommonTitle" id="siteCommonTitle">소장자료관</span></a></h1>
<div class="search-wrap">
<h2 class="blind">검색</h2>
<form id="searchHeaderForm" name="searchHeaderForm" method="post" action="">
<fieldset>
<legend>검색</legend>
<div class="search-input">
<input type="text" placeholder="" title="검색어 입력" name="query" id="query" class="ark_query" value="" autocomplete="off">
<button type="button" class="btn-search" id="searchHeaderButton"><span>검색</span></button>
<!-- <button type="button" class="btn-search-detail" id="btn-search-detail-cl" onclick="javascript:fn_layerPop('/search/getDetailedSearchFormPopup.do');">상세검색</button> -->
<button type="button" class="btn-search-detail" id="btn-search-detail-cl">상세검색</button>
</div>
<div class="condition_sear">
<select name="searchField" id="searchField1" class="sear_depth">
<option value="" selected="selected">전체</option>
<option value="TITLE">제목</option>
</select>
</div>
</fieldset>
</form>
</div>
<div class="log">
<ul>
<li><!-- 개발자 확인용 타이틀 임시 추가 DDDDDDDDDDD -->
<a href="javascript:void(0)" onclick='fn_layerPopWithClass("/login/loginFormPopup.do", "pop-login")' title="서울강서문화원(SU04)" class="login-btn">로그인</a></li>
<li><a href="javascript:void(0)" class="member-card-btn">회원증</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/cart/listCartItems.do';">카트(<span class="count">10</span>)</a></li>
</ul>
</div>
</div>
<script>
</script>
</header>
<!-- 메뉴 -->
<div class="nav-wrap">
<div class="inner">
<button id="primary-nav-button" type="button" class="Btn eff"><i class="eff">Menu</i></button>
<nav id="primary-nav" class="dropdown cf">
<ul class="dropdown menu">
<li class="eff active"><a href="/activar/index.html" title="자료관안내" class="eff">자료관안내</a>
<ul class="sub-menu">
<li><a href="javascript:void(0)" onclick="javascript:location.href='/inform/selectGreeting.do';" title="인사말" class="underline blue">인사말</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/inform/selectNCultureOperationInfo.do';" title="이용안내" class="underline blue">이용안내</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/inform/selectNCultureLocationInfo.do';" title="찾아오시는길" class="underline blue">찾아오시는길</a></li>
</ul>
</li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/search/searchList.do';" title="소장자료" class="eff">소장자료</a></li>
<li><a href="/activar/contact.html" title="고객지원" class="eff">고객지원</a>
<ul class="sub-menu">
<li><a href="javascript:void(0)" onclick="javascript:location.href='/bbs/listAncmnts.do';" title="공지사항" class="underline blue">공지사항</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/bbs/listFaqs.do';" title="FAQ" class="underline blue">FAQ</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/bbs/listQnas.do';" title="Q&A" class="underline blue">Q&A</a></li>
</ul>
</li>
<li><a href="/activar/contact.html" title="마이페이지" class="eff">마이페이지</a>
<ul class="sub-menu">
<li><a href="javascript:void(0)" onclick="javascript:location.href='/userInfo/pwCertMyInfo.do';" title="회원정보관리" class="underline blue">회원정보관리</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/interest/listInterests.do';" title="관심자료" class="underline blue">관심자료</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/rent/listRentItems.do';" title="대출관리" class="underline blue">대출관리</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/rent/listRequestsForViewingItem.do';" title="방문열람관리" class="underline blue">방문열람관리</a></li>
<!-- 개발진행 중 임시 추가 : 시작 DDDDDDDDDDDDDD -->
<li>--- 이하 임시 추가 메뉴 ---</li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/user/member/searchIdForm.do';" title="ID/PW찾기" class="underline blue">ID/PW찾기</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/login/loginCouncil.do?callType=member';" title="회원가입" class="underline blue">회원가입</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/sample/password/getSampleEncoder.do';" title="암호화" class="underline blue">암호화</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/system/reloadProperties.do';" title="환경설정갱신" class="underline blue">환경설정갱신</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/code/listCodes.do';" title="코드조회" class="underline blue">코드조회</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/sample/listRentItem.do';" title="API샘플" class="underline blue">목록조회:API샘플</a></li>
<!-- 개발진행 중 임시 추가 : 종료 DDDDDDDDDDDDDD -->
</ul>
</li>
</ul>
</nav>
</div>
</div>
<!-- 메인컨텐츠 -->
<!-- 안내 섹션 -->
<section class="join succ dormant">
<h2 class="blind">안내 섹션영역</h2>
<div class="inner">
<div class="row-top">
<div class="icon"><img src="/images/icon/icon-dormant.png" alt="자물쇠 아이콘"></div>
<p>로그인 및 회원가입 안내</p>
</div>
<div class="row-bottom">
<div class="join-box">
<div class="success">
<div class="text">
<p><span>먼저 회원가입하신 후, 이용하여 주시기 바랍니다.</span></p>
</div>
<div class="box">
<p>위의 안내 메시지를 확인하신 후, 다시 로그인하시거나 회원가입을 진행해 주시기 바랍니다.</p>
</div>
<div class="btn">
<a href="javascript:void(0)" onclick="javascript:location.href='/';" class="btn-gray">홈으로</a>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
<a href="javascript:void(0)" onclick="javascript:location.href='/login/memberSnsForm.do';" class="btn-color">회원가입</a>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- 풋터 -->
<footer id="footer">
<button type="button" id="btn-go-top" class="btn-go-top"><span><img src="/images/icon/icon-arr-top.png" alt="상단 화살표"></span><p>TOP</p></button>
<div class="inner">
<div class="row-top">
<div class="footer-logo">
<h1><a href="#"><img src="/images/img/img-footer-logo.png" alt="푸터 로고"></a></h1>
</div>
<div class="family_site">
<p class="site_name">관련 사이트</p>
<ul class="site_depth">
<li><a href="http://www.kccf.or.kr/" target="_blank" title="한국문화원연합회">한국문화원연합회</a></li>
<li><a href="http://www.nculture.org" target="_blank" title="지역N문화">지역N문화</a></li>
<li><a href="http://www.mcst.go.kr" target="_blank" title="문화체육관광부">문화체육관광부</a></li>
<li><a href="http://www.culture.go.kr" target="_blank" title="문화포털">문화포털</a></li>
<li><a href="http://kto.visitkorea.or.kr/kor.kto" target="_blank" title="한국관광공사">한국관광공사</a></li>
<li><a href="http://www.seniorculture.or.kr/" target="_blank" title="어르신문화프로그램">어르신문화프로그램</a></li>
<li><a href="http://csv.culture.go.kr/frt/main.do" target="_blank" title="문화체육자원봉사">문화체육자원봉사</a></li>
<li><a href="https://inmun360.culture.go.kr/" target="_blank" title="인문360도">인문360도</a></li>
</ul>
</div>
</div>
<div class="row-bottom">
<div class="left-side">
<ul class="fnb">
<li><a href="javascript:void(0)" onclick="javascript:location.href='/inform/selectTermsInfo.do';">이용약관</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/inform/selectPrivacyInfo.do';">개인정보처리방침</a></li>
<li><a href="javascript:void(0)" onclick="javascript:location.href='/inform/selectNCultureLocationInfo.do';">찾아오시는 길</a></li>
</ul>
<p class="copy">
서울시 마포대로49 성우빌딩 308호 <span><a href="tel:02-704-2322">TEL. 02.704-2322</a></span> <span>FAX. 02.704-2377</span> <br>
COPYRIGHT (C)2018 The Federation of Korea Culture Center. ALL RIGHT RESERVED.
</p>
</div>
</div>
</div>
</footer>
</div>
<!-- Layer Popup -->
<div id="NLIB_LAYER_POPUP" name="NLIB_LAYER_POPUP" style="display:block;">
</div>
</body>
</html>