로그인 팝업 및 로그인 템플릿 적용 작업
This commit is contained in:
parent
f5e9453e06
commit
c5d5b22ad3
@ -43,8 +43,11 @@ public class OAuthLogin {
|
|||||||
private OAuth20Service oauthService;
|
private OAuth20Service oauthService;
|
||||||
private OAuthVO oauthVO;
|
private OAuthVO oauthVO;
|
||||||
|
|
||||||
|
|
||||||
public OAuthLogin(OAuthVO oauthVO, String callType) {
|
public OAuthLogin(OAuthVO oauthVO, String callType) {
|
||||||
|
this(oauthVO, callType, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OAuthLogin(OAuthVO oauthVO, String callType, String councilJsessionId) {
|
||||||
|
|
||||||
if(oauthVO.getService().equals("google"))
|
if(oauthVO.getService().equals("google"))
|
||||||
{
|
{
|
||||||
@ -57,7 +60,7 @@ public class OAuthLogin {
|
|||||||
|
|
||||||
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
|
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
|
||||||
.apiSecret(oauthVO.getClientSecret())
|
.apiSecret(oauthVO.getClientSecret())
|
||||||
.callback(oauthVO.getRedirectUrl(callType))
|
.callback(oauthVO.getRedirectUrl(callType, councilJsessionId))
|
||||||
.defaultScope(scope)
|
.defaultScope(scope)
|
||||||
//.scope("profile")
|
//.scope("profile")
|
||||||
.build(oauthVO.getApi20Instance());
|
.build(oauthVO.getApi20Instance());
|
||||||
@ -66,7 +69,7 @@ public class OAuthLogin {
|
|||||||
|
|
||||||
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
|
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
|
||||||
.apiSecret(oauthVO.getClientSecret())
|
.apiSecret(oauthVO.getClientSecret())
|
||||||
.callback(oauthVO.getRedirectUrl(callType))
|
.callback(oauthVO.getRedirectUrl(callType, councilJsessionId))
|
||||||
//.scope("profile")
|
//.scope("profile")
|
||||||
.build(oauthVO.getApi20Instance());
|
.build(oauthVO.getApi20Instance());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,11 @@ public class OAuthUniversalUser {
|
|||||||
private String regDd;
|
private String regDd;
|
||||||
private NlibLoginVO nlibVO;
|
private NlibLoginVO nlibVO;
|
||||||
|
|
||||||
|
|
||||||
|
private String councilJsessionId; /* 로그인 접속 문화원 코드 */
|
||||||
|
private String councilHomeUrl; /* 로그인 접속 문화원 홈 URL */
|
||||||
|
|
||||||
|
|
||||||
private boolean isValidLogin = false;
|
private boolean isValidLogin = false;
|
||||||
|
|
||||||
public boolean isValid() {
|
public boolean isValid() {
|
||||||
@ -178,4 +183,20 @@ public class OAuthUniversalUser {
|
|||||||
this.regDd = regDd;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,45 @@ package egovframework.com.ext.oauth.service;
|
|||||||
import com.github.scribejava.apis.GoogleApi20;
|
import com.github.scribejava.apis.GoogleApi20;
|
||||||
import com.github.scribejava.core.builder.api.DefaultApi20;
|
import com.github.scribejava.core.builder.api.DefaultApi20;
|
||||||
|
|
||||||
|
import nlib.cmm.crypto.AriaCrypto;
|
||||||
import nlib.util.StringUtil;
|
import nlib.util.StringUtil;
|
||||||
|
|
||||||
public class OAuthVO implements OAuthConfig {
|
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() {
|
public String getService() {
|
||||||
return serviceName;
|
return serviceName;
|
||||||
}
|
}
|
||||||
@ -30,9 +66,11 @@ public class OAuthVO implements OAuthConfig {
|
|||||||
this.clientSecret = clientSecret;
|
this.clientSecret = clientSecret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRedirectUrl(String callType) {
|
public String getRedirectUrl(String callType, String councilJsessionId) {
|
||||||
String retUrl = redirectUrl.replaceAll("\\{callType\\}", callType);
|
String retUrl = redirectUrl.replaceAll("\\{callType\\}", callType);
|
||||||
retUrl = retUrl.replaceAll("\\{oauthServiceName\\}", getService());
|
retUrl = retUrl.replaceAll("\\{oauthServiceName\\}", getService());
|
||||||
|
String encCouncilJsessionId = AriaCrypto.encode(councilJsessionId);
|
||||||
|
retUrl = retUrl.replaceAll("\\{councilJsessionId\\}", (councilJsessionId == null ? "" : encCouncilJsessionId));
|
||||||
return retUrl;
|
return retUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,38 +117,5 @@ public class OAuthVO implements OAuthConfig {
|
|||||||
public void setKakao(boolean isKakao) {
|
public void setKakao(boolean isKakao) {
|
||||||
this.isKakao = 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -9,8 +9,8 @@ import nlib.restful.DataApi;
|
|||||||
import nlib.restful.service.DataApiReqVO;
|
import nlib.restful.service.DataApiReqVO;
|
||||||
import nlib.restful.service.DataApiResVO;
|
import nlib.restful.service.DataApiResVO;
|
||||||
|
|
||||||
@Repository("rentDAO")
|
@Repository("rentDAO_BK")
|
||||||
public class RentDAO extends DataApi
|
public class RentDAO_BK extends DataApi
|
||||||
{
|
{
|
||||||
private static final Logger log = LoggerFactory.getLogger(RentDAO.class);
|
private static final Logger log = LoggerFactory.getLogger(RentDAO.class);
|
||||||
|
|
||||||
|
|||||||
@ -61,7 +61,9 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
|
|||||||
@Override
|
@Override
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
http.authorizeRequests()
|
http.authorizeRequests()
|
||||||
.antMatchers("/**").permitAll();
|
.antMatchers("/**").permitAll()
|
||||||
|
.and().csrf()
|
||||||
|
.disable();
|
||||||
/*
|
/*
|
||||||
.antMatchers("/login/**").permitAll()
|
.antMatchers("/login/**").permitAll()
|
||||||
.antMatchers("/member/*.do").permitAll()
|
.antMatchers("/member/*.do").permitAll()
|
||||||
@ -101,7 +103,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
|
|||||||
.disable();
|
.disable();
|
||||||
*/
|
*/
|
||||||
http.logout()
|
http.logout()
|
||||||
.logoutSuccessUrl("/login/loginCouncil.do?logout=logout")
|
.logoutSuccessUrl("/login/logout.do")
|
||||||
.invalidateHttpSession(true).deleteCookies("JSESSIONID")
|
.invalidateHttpSession(true).deleteCookies("JSESSIONID")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -100,8 +100,6 @@ public class LoginServiceImpl implements LoginService
|
|||||||
* 지방문화원 해당 세션에 대한 최종 로그인 세션을 처리한다.
|
* 지방문화원 해당 세션에 대한 최종 로그인 세션을 처리한다.
|
||||||
* 정상인 경우 null을 리턴하고, 오류발생시 오류코드를 리턴한다.
|
* 정상인 경우 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) {
|
public String loginCouncilSSO(HttpServletRequest req, String councilCd, OAuthUniversalUser oUser) {
|
||||||
|
|
||||||
@ -203,9 +201,6 @@ public class LoginServiceImpl implements LoginService
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* DNS 호스트명으로 지방문화원 정보를 조회한다. (지방문화원코드, 명칭)
|
* DNS 호스트명으로 지방문화원 정보를 조회한다. (지방문화원코드, 명칭)
|
||||||
*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see nlib.user.service.LoginService#selectCouncilInfoByDnsHost(java.lang.String)
|
|
||||||
*/
|
*/
|
||||||
public HashMap<String, String> selectCouncilInfoByDnsHost(String councilDnsHost) {
|
public HashMap<String, String> selectCouncilInfoByDnsHost(String councilDnsHost) {
|
||||||
return loginDAO.selectCouncilInfoByDnsHost(councilDnsHost);
|
return loginDAO.selectCouncilInfoByDnsHost(councilDnsHost);
|
||||||
@ -219,98 +214,8 @@ public class LoginServiceImpl implements LoginService
|
|||||||
return loginDAO.agreeProvInfo(loginVO);
|
return loginDAO.agreeProvInfo(loginVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public NlibLoginVO selectLoginUserInfo(NlibLoginVO loginVO) {
|
public NlibLoginVO selectLoginUserInfo(NlibLoginVO loginVO) {
|
||||||
return loginDAO.selectLoginUserInfo(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;
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2,7 +2,6 @@
|
|||||||
package nlib.user.web;
|
package nlib.user.web;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
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.OAuthUniversalUser;
|
||||||
import egovframework.com.ext.oauth.service.OAuthVO;
|
import egovframework.com.ext.oauth.service.OAuthVO;
|
||||||
import nlib.cmm.NlibCommonController;
|
import nlib.cmm.NlibCommonController;
|
||||||
|
import nlib.cmm.crypto.AriaCrypto;
|
||||||
import nlib.cmm.service.NlibProperty;
|
import nlib.cmm.service.NlibProperty;
|
||||||
import nlib.cmm.session.SessionConfig;
|
import nlib.cmm.session.SessionConfig;
|
||||||
import nlib.col.service.CartService;
|
import nlib.col.service.CartService;
|
||||||
import nlib.col.service.CollectionVO;
|
|
||||||
import nlib.user.service.LoginService;
|
import nlib.user.service.LoginService;
|
||||||
import nlib.user.service.NlibLoginVO;
|
import nlib.user.service.NlibLoginVO;
|
||||||
import nlib.util.StringUtil;
|
import nlib.util.StringUtil;
|
||||||
@ -65,11 +64,6 @@ import nlib.util.StringUtil;
|
|||||||
@Controller
|
@Controller
|
||||||
public class LoginController extends NlibCommonController {
|
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);
|
private static final Logger log = LoggerFactory.getLogger(LoginController.class);
|
||||||
|
|
||||||
//-------------------------------------------
|
//-------------------------------------------
|
||||||
@ -94,38 +88,33 @@ public class LoginController extends NlibCommonController {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 각 지방문화원 사이트에서 로그인을 위해서 최초 접속한다.
|
* 접속한 지방문화원정보를 세션에 설정한다.
|
||||||
* 지방문화원 정보를 확인하여 로그인처리가 진행될 수 있도록 한다.
|
*
|
||||||
*
|
|
||||||
* @param req
|
* @param req
|
||||||
* @param res
|
* @param res
|
||||||
* @param session
|
|
||||||
* @param returnUrl
|
* @param returnUrl
|
||||||
* @param model
|
* @param callType
|
||||||
* @return
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/login/loginCouncil.do")
|
public void setCouncilInfo(
|
||||||
public String loginCouncil(
|
|
||||||
HttpServletRequest req,
|
HttpServletRequest req,
|
||||||
HttpServletResponse res,
|
HttpServletResponse res,
|
||||||
HttpSession session,
|
String returnUrl,
|
||||||
@RequestParam(required = false) String logout,
|
String callType) throws Exception {
|
||||||
@RequestParam(required = false) String returnUrl,
|
|
||||||
@RequestParam(required = false) String callType,
|
|
||||||
ModelMap model) throws Exception {
|
|
||||||
|
|
||||||
|
HttpSession session = req.getSession();
|
||||||
String url = req.getRequestURL().toString();
|
String url = req.getRequestURL().toString();
|
||||||
String councilHomeUrl = url.replaceAll(req.getRequestURI(), "") + req.getContextPath();
|
String councilHomeUrl = url.replaceAll(req.getRequestURI(), "") + req.getContextPath();
|
||||||
String councilReturnUrl = councilHomeUrl + (StringUtil.isEmpty(returnUrl) ? "/" : returnUrl);
|
String councilReturnUrl = councilHomeUrl + (StringUtil.isEmpty(returnUrl) ? "/" : returnUrl);
|
||||||
String councilDnsHost = StringUtil.getHostName(url);
|
String councilDnsHost = StringUtil.getHostName(url);
|
||||||
|
String councilJsessionId = session.getId();
|
||||||
|
|
||||||
// 캐쉬된 요청URL인 존재하는 경우, 리턴URL로 설정
|
// 캐쉬된 요청URL인 존재하는 경우, 리턴URL로 설정
|
||||||
RequestCache cache = new HttpSessionRequestCache();
|
RequestCache cache = new HttpSessionRequestCache();
|
||||||
SavedRequest savedRequest = cache.getRequest(req, res);
|
SavedRequest savedRequest = cache.getRequest(req, res);
|
||||||
if (savedRequest != null) {
|
if (savedRequest != null) {
|
||||||
councilReturnUrl = savedRequest.getRedirectUrl();
|
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("councilReturnUrl", councilReturnUrl);
|
||||||
session.setAttribute("councilHomeUrl", councilHomeUrl);
|
session.setAttribute("councilHomeUrl", councilHomeUrl);
|
||||||
|
|
||||||
session.setAttribute("councilDnsHost", councilDnsHost);
|
session.setAttribute("councilDnsHost", councilDnsHost);
|
||||||
session.setAttribute("councilCd", councilCd);
|
session.setAttribute("councilCd", councilCd);
|
||||||
session.setAttribute("councilNm", councilNm);
|
session.setAttribute("councilNm", councilNm);
|
||||||
session.setAttribute("callType", callType);
|
session.setAttribute("callType", callType);
|
||||||
|
|
||||||
log.debug("loginCouncil > sessionid=" + session.getId());
|
log.debug("setCouncilInfo > REQ URL = " + url);
|
||||||
log.debug("loginCouncil > REQ URL = " + url);
|
log.debug("setCouncilInfo > councilJsessionId = " + councilJsessionId);
|
||||||
log.debug("loginCouncil > councilJsessionId = " + session.getId());
|
log.debug("setCouncilInfo > councilDnsHost = " + councilDnsHost);
|
||||||
log.debug("loginCouncil > councilDnsHost = " + councilDnsHost);
|
log.debug("setCouncilInfo > councilReturnUrl = " + councilReturnUrl);
|
||||||
log.debug("loginCouncil > councilReturnUrl = " + councilReturnUrl);
|
log.debug("setCouncilInfo > councilHomeUrl = " + councilHomeUrl);
|
||||||
log.debug("loginCouncil > councilHomeUrl = " + councilHomeUrl);
|
log.debug("setCouncilInfo > councilCd = " + councilCd);
|
||||||
log.debug("loginCouncil > councilCd = " + councilCd);
|
log.debug("setCouncilInfo > councilNm = " + councilNm);
|
||||||
log.debug("loginCouncil > councilNm = " + councilNm);
|
log.debug("setCouncilInfo > callType = " + callType);
|
||||||
log.debug("loginCouncil > callType = " + callType);
|
|
||||||
|
|
||||||
model.addAttribute("url" , NlibProperty.getString("nculture.login.preset.redirect.url"));
|
// 세션 추가정보 저장소에 회귀 문화원 정보 담기
|
||||||
model.addAttribute("councilJsessionId", session.getId());
|
OAuthUniversalUser oauthUser = new OAuthUniversalUser();
|
||||||
model.addAttribute("councilDnsHost" , councilDnsHost);
|
oauthUser.setCouncilJsessionId(councilJsessionId);
|
||||||
model.addAttribute("councilCd" , councilCd);
|
oauthUser.setCouncilHomeUrl(councilHomeUrl);
|
||||||
model.addAttribute("councilNm" , StringUtil.encodeBase64(councilNm));
|
SessionConfig.setLoginInfo(councilJsessionId, oauthUser);
|
||||||
model.addAttribute("councilHomeUrl" , StringUtil.encodeBase64(councilHomeUrl));
|
|
||||||
model.addAttribute("councilReturnUrl" , StringUtil.encodeBase64(councilReturnUrl));
|
|
||||||
model.addAttribute("logout" , StringUtil.getString(logout, ""));
|
|
||||||
model.addAttribute("callType" , StringUtil.getString(callType, ""));
|
|
||||||
|
|
||||||
return "nlib/login/loginPreSet";
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 로그인 콜백을 위한 설정을 처리한 후, 로그인 페이지로 전환한다.
|
* 로그인 콜백을 위한 설정을 처리한 후, 로그인 페이지로 전환한다.
|
||||||
*
|
*
|
||||||
@ -175,6 +158,7 @@ public class LoginController extends NlibCommonController {
|
|||||||
*/
|
*/
|
||||||
@RequestMapping("/login/loginPreSet.do")
|
@RequestMapping("/login/loginPreSet.do")
|
||||||
public String loginPreSet(HttpServletRequest req,
|
public String loginPreSet(HttpServletRequest req,
|
||||||
|
HttpServletResponse response,
|
||||||
@RequestParam(required = false) String error,
|
@RequestParam(required = false) String error,
|
||||||
@RequestParam(required = false) String message,
|
@RequestParam(required = false) String message,
|
||||||
@RequestParam(required = false) String logout,
|
@RequestParam(required = false) String logout,
|
||||||
@ -183,6 +167,9 @@ public class LoginController extends NlibCommonController {
|
|||||||
Model model,
|
Model model,
|
||||||
HttpSession session) {
|
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
|
* @param model
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/login/loginForm.do")
|
@RequestMapping(value= {"/login/loginForm.do", "/login/loginFormPopup.do", "/login/memberSnsForm.do"})
|
||||||
public String loginForm(HttpServletRequest req,
|
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 error,
|
||||||
@RequestParam(required = false) String message,
|
@RequestParam(required = false) String message,
|
||||||
@RequestParam(required = false) String logout,
|
|
||||||
RedirectAttributes redirectAttrs,
|
RedirectAttributes redirectAttrs,
|
||||||
@RequestParam Map<String, String> paramMap,
|
Model model) throws Exception {
|
||||||
Model model,
|
|
||||||
HttpSession session) {
|
|
||||||
|
|
||||||
|
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 councilDnsHost = (String)session.getAttribute("councilDnsHost");
|
||||||
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
|
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
|
||||||
String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
|
String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
|
||||||
@ -263,15 +264,15 @@ public class LoginController extends NlibCommonController {
|
|||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
// SNS 연동 URL 생성
|
// SNS 연동 URL 생성
|
||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
|
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, callType, councilJsessionId);
|
||||||
log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL());
|
log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL());
|
||||||
model.addAttribute("naverUrl", 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());
|
log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL());
|
||||||
model.addAttribute("googleUrl", 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());
|
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
|
||||||
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
|
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
|
||||||
|
|
||||||
@ -281,7 +282,21 @@ public class LoginController extends NlibCommonController {
|
|||||||
model.addAttribute("message", "로그아웃되었습니다. 감사합니다.");
|
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,
|
HttpServletRequest req,
|
||||||
@PathVariable String callType,
|
@PathVariable String callType,
|
||||||
@PathVariable String oauthServiceName,
|
@PathVariable String oauthServiceName,
|
||||||
|
@RequestParam(required = false) String councilJsessionId,
|
||||||
@RequestParam(required = false) String code,
|
@RequestParam(required = false) String code,
|
||||||
@RequestParam(required = false) String error,
|
@RequestParam(required = false) String error,
|
||||||
Model model,
|
Model model,
|
||||||
HttpSession session) throws Exception {
|
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";
|
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)) {
|
if(StringUtil.isNotEmpty(error)) {
|
||||||
|
|
||||||
// 구글 정보 제공 동의 거절한 경우
|
// 구글 정보 제공 동의 거절한 경우
|
||||||
@ -318,13 +354,14 @@ public class LoginController extends NlibCommonController {
|
|||||||
if(StringUtil.equalsIgnoreCase("access_denied", error)) {
|
if(StringUtil.equalsIgnoreCase("access_denied", error)) {
|
||||||
if(OAuthLogin.CALL_TYPE_LOGIN.equalsIgnoreCase(callType)) {
|
if(OAuthLogin.CALL_TYPE_LOGIN.equalsIgnoreCase(callType)) {
|
||||||
// 로그인인 경우
|
// 로그인인 경우
|
||||||
redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.login.redirect.uri");
|
model.addAttribute("loginBtnYn", "Y");
|
||||||
} else {
|
} 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("url", redirectUrl);
|
||||||
model.addAttribute("message", StringUtil.encodeUrl("서비스를 이용하시려면 정보제공 동의가 필요합니다."));
|
model.addAttribute("message", StringUtil.encodeUrl("서비스를 이용하시려면 SNS의 정보제공 동의가 필요합니다."));
|
||||||
return "nlib/login/loginPreSet";
|
return "nlib/login/loginPreSet";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -443,7 +480,11 @@ public class LoginController extends NlibCommonController {
|
|||||||
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(jsessionId);
|
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(jsessionId);
|
||||||
|
|
||||||
if(oauthUser == null || !oauthUser.isValid()) {
|
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)) {
|
if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_MEMBERSHIP)) {
|
||||||
SessionConfig.setNewMemberInfo(jsessionId, oauthUser);
|
SessionConfig.setNewMemberInfo(jsessionId, oauthUser);
|
||||||
SessionConfig.removeLoginInfo(jsessionId);
|
SessionConfig.removeLoginInfo(jsessionId);
|
||||||
model.addAttribute("message", "회원가입하신 후, 이용 가능합니다.");
|
model.addAttribute("message", "먼저 회원가입하신 후, 이용하여 주시기 바랍니다.");
|
||||||
return "redirect:" + NlibProperty.getString("member.new.url");
|
model.addAttribute("memberBtnYn", "Y");
|
||||||
|
return "nlib/login/loginMessage";
|
||||||
} else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) {
|
} else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) {
|
||||||
|
SessionConfig.setNewMemberInfo(jsessionId, oauthUser);
|
||||||
SessionConfig.removeLoginInfo(jsessionId);
|
SessionConfig.removeLoginInfo(jsessionId);
|
||||||
model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다.");
|
model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다.");
|
||||||
return "redirect:" + NlibProperty.getString("login.back.url");
|
model.addAttribute("loginBtnYn", "Y");
|
||||||
|
return "nlib/login/loginMessage";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 잘못된 접근 또는 기타 오류
|
// 잘못된 접근 또는 기타 오류
|
||||||
SessionConfig.removeLoginInfo(jsessionId);
|
SessionConfig.removeLoginInfo(jsessionId);
|
||||||
model.addAttribute("message", "기타 문제로 인하여 로그인에 실패하였습니다. : " + loginResult);
|
model.addAttribute("message", "로그인에 실패하였습니다. 관리자에게 문의바랍니다 : " + loginResult);
|
||||||
return "redirect:" + NlibProperty.getString("login.back.url");
|
return "nlib/login/loginMessage";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -491,8 +536,11 @@ public class LoginController extends NlibCommonController {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/login/logout.do")
|
@RequestMapping("/login/logout.do")
|
||||||
public String logout(HttpServletRequest req) {
|
public String logout(HttpServletRequest req, ModelMap model) {
|
||||||
return null;
|
model.addAttribute("message", "이용해 주셔서 감사드립니다.");
|
||||||
|
model.addAttribute("loginBtnYn", "Y");
|
||||||
|
model.addAttribute("logout", "logout");
|
||||||
|
return "nlib/login/loginMessage";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -188,12 +188,10 @@ public class MemberController extends NlibCommonController{
|
|||||||
count=memberService.selectSnsIdCount(oauthUser);
|
count=memberService.selectSnsIdCount(oauthUser);
|
||||||
if(count>0)
|
if(count>0)
|
||||||
{
|
{
|
||||||
model.addAttribute("msg","이미 가입된 계정입니다. 로그인해주세요.");
|
model.addAttribute("message", "이미 가입된 계정입니다. 로그인 후, 이용해 주시기 바랍니다.");
|
||||||
model.addAttribute("url","/nlib"+NlibProperty.getString("login.url"));
|
model.addAttribute("loginBtnYn", "Y");
|
||||||
return "nlib/cmm/alert";
|
return "nlib/login/loginMessage";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
model.addAttribute("termTitle", termRet.get("TITLE"));
|
model.addAttribute("termTitle", termRet.get("TITLE"));
|
||||||
model.addAttribute("termContent", termRet.get("CONTENT"));
|
model.addAttribute("termContent", termRet.get("CONTENT"));
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
<constructor-arg value="naver" /><!-- Service Name -->
|
<constructor-arg value="naver" /><!-- Service Name -->
|
||||||
<constructor-arg value="EUu_FlgfyBlpQwGkXbit" /><!-- naverClientID -->
|
<constructor-arg value="EUu_FlgfyBlpQwGkXbit" /><!-- naverClientID -->
|
||||||
<constructor-arg value="f34KD054kW" /><!-- naverClientSecret -->
|
<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>
|
</bean>
|
||||||
|
|
||||||
<!-- GOOGLE OAuth Configuration -->
|
<!-- GOOGLE OAuth Configuration -->
|
||||||
@ -16,7 +16,7 @@
|
|||||||
<constructor-arg value="google" /><!-- Service Name -->
|
<constructor-arg value="google" /><!-- Service Name -->
|
||||||
<constructor-arg value="590802608410-a03ul9al205h3h8rvhrlr2tulleftt0o.apps.googleusercontent.com" /><!-- googleClientID -->
|
<constructor-arg value="590802608410-a03ul9al205h3h8rvhrlr2tulleftt0o.apps.googleusercontent.com" /><!-- googleClientID -->
|
||||||
<constructor-arg value="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" /><!-- googleClientSecret -->
|
<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>
|
</bean>
|
||||||
|
|
||||||
<!-- KAKAO OAuth Configuration -->
|
<!-- KAKAO OAuth Configuration -->
|
||||||
@ -24,7 +24,7 @@
|
|||||||
<constructor-arg value="kakao" /><!-- Service Name -->
|
<constructor-arg value="kakao" /><!-- Service Name -->
|
||||||
<constructor-arg value="9c1b2249240c011edf40a1d487702232" /><!-- kakaoClientID -->
|
<constructor-arg value="9c1b2249240c011edf40a1d487702232" /><!-- kakaoClientID -->
|
||||||
<constructor-arg value="fxv4i1aztudvPj84DEUvMTnzWe29611G" /><!-- kakaoClientSecret -->
|
<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>
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
|||||||
@ -20,11 +20,11 @@ home.uri = /index.do
|
|||||||
#----------------------------------------
|
#----------------------------------------
|
||||||
# \ub85c\uadf8\uc778/\ud68c\uc6d0\uac00\uc785\uad00\ub828 URL \uc815\ubcf4
|
# \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
|
# \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
|
login.url = /login/loginForm.do
|
||||||
# \ub85c\uadf8\uc778 \ubb38\uc81c \ubc1c\uc0dd \uc2dc, \ub2e4\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 \ub85c\uadf8\uc778\ud654\uba74 \uc8fc\uc18c
|
# \ub85c\uadf8\uc778 \ubb38\uc81c \ubc1c\uc0dd \uc2dc, \ub2e4\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 \uc8fc\uc18c
|
||||||
login.back.url = /login/loginForm.do
|
login.back.url = /login/loginGuide.do
|
||||||
# \ud734\uba74\uacc4\uc88c \ud574\uc9c0\uc548\ub0b4 \uc8fc\uc18c
|
# \ud734\uba74\uacc4\uc88c \ud574\uc9c0\uc548\ub0b4 \uc8fc\uc18c
|
||||||
login.dormant.url = /login/activateDormantAccForm.do
|
login.dormant.url = /login/activateDormantAccForm.do
|
||||||
# \uc2e0\uaddc \uc9c0\ubc29\ubb38\ud654\uc6d0 \uc815\ubcf4\uc81c\uacf5 \ub3d9\uc758 \uc8fc\uc18c
|
# \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.login.redirect.uri = /login/loginCouncilSSO.do
|
||||||
nculture.login.post.member.redirect.uri = /member/selectMemberJoiningInfo.do
|
nculture.login.post.member.redirect.uri = /member/selectMemberJoiningInfo.do
|
||||||
nculture.login.preset.redirect.url = https://nlib-dev.nculture.org/login/loginPreSet.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
|
# NLIB \uc9c0\ubc29\ubb38\ud654\uc6d0\uc815\ubcf4
|
||||||
|
|||||||
@ -14,10 +14,11 @@
|
|||||||
* @ 수정일 수정자 수정내용
|
* @ 수정일 수정자 수정내용
|
||||||
* @ ------------ -------- ---------------------------
|
* @ ------------ -------- ---------------------------
|
||||||
* @ 2021. 7. 12. JSYOO 최초 생성
|
* @ 2021. 7. 12. JSYOO 최초 생성
|
||||||
*
|
* @ 2021.10. 20. KNKIM 퍼블리쉬 템플릿 적용
|
||||||
*
|
*
|
||||||
|
*
|
||||||
* @author 이씨플라자 * DIGITALSHIP JSYOO
|
* @author 이씨플라자 * DIGITALSHIP JSYOO
|
||||||
* @since 2021. 7. 12.
|
* @since 2021. 10. 20.
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -28,49 +29,47 @@
|
|||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
|
||||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||||
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/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>
|
<script>
|
||||||
function signUp(){
|
function fn_signUp(){
|
||||||
location.href="${pageContext.request.contextPath}/login/loginCouncil.do?callType=member";
|
location.href="${pageContext.request.contextPath}/login/memberSnsForm.do";
|
||||||
}
|
|
||||||
function findInfo(){
|
|
||||||
location.href="${pageContext.request.contextPath}/member/initPasswordForm.do";
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
|
||||||
<body>
|
<!-- 로그인 섹션 -->
|
||||||
<br>
|
<section class="location join">
|
||||||
|
<h2 class="blind">로그인 섹션영역</h2>
|
||||||
error : ${error }
|
<div class="inner">
|
||||||
<br>
|
<div class="row-top">
|
||||||
message : ${message }
|
<div class="location-box">
|
||||||
<br>
|
<ul class="loc">
|
||||||
<br>
|
<li>HOME</li>
|
||||||
|
<li class="on">로그인</li>
|
||||||
<!-- 네이버 로그인 화면으로 이동 시키는 URL -->
|
</ul>
|
||||||
<!-- 네이버 로그인 화면에서 ID, PW를 올바르게 입력하면 callback 메소드 실행 요청 -->
|
<ul class="tit">
|
||||||
<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>
|
<li><span>로그인</span></li>
|
||||||
<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>
|
</ul>
|
||||||
<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>
|
</div>
|
||||||
<br>
|
<div class="arr"><img src="/images/icon/icon-join-arr2.png" alt="화살표 아이콘"></div>
|
||||||
<div style="text-align:center">
|
</div>
|
||||||
<input type="button" onclick="signUp();" value="회원가입">
|
<div class="row-bottom">
|
||||||
<input type="button" onclick="findInfo();" value="비밀번호 초기화">
|
<div class="join-box">
|
||||||
</div>
|
<div class="login">
|
||||||
<script src="https://apis.google.com/js/platform.js?onload=init" async defer></script>
|
<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>
|
||||||
<input type="text" value="<c:out value="${coutTest}" />" />
|
<div class="Btn Google"><button type="button" onclick="location.href='${kakaoUrl}';">Google 계정으로 로그인</button></div>
|
||||||
_______________
|
</div>
|
||||||
|
<div class="row Text">
|
||||||
|
<p>로그인할 때 이용할 SNS를 선택하세요!</p>
|
||||||
</body>
|
<p> </p>
|
||||||
</html>
|
<p><a href="javascript:void(0)" onclick="javascript:location.href='/login/memberSnsForm.do';" class="btn-gray">회원가입</a>하고 <span>대출/열람 서비스</span>를 이용해보세요!</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
71
src/main/webapp/WEB-INF/jsp/nlib/login/loginMessage.jsp
Normal file
71
src/main/webapp/WEB-INF/jsp/nlib/login/loginMessage.jsp
Normal 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>
|
||||||
|
|
||||||
|
|
||||||
|
<c:if test='${loginBtnYn == "Y" }'>
|
||||||
|
<a href="javascript:void(0)" onclick="javascript:location.href='/login/loginForm.do';" class="btn-color">로그인</a>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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>
|
||||||
|
|
||||||
@ -28,45 +28,42 @@
|
|||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
|
||||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||||
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
|
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
|
||||||
<c:set var="pageTitle">서비스 이동중입니다.</c:set>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<c:set var="pageTitle">처리중입니다</c:set>
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>서비스 이동중</title>
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$("#frm").submit();
|
$("#frmLoginProc").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);
|
|
||||||
</script>
|
</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>
|
||||||
|
|||||||
86
src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSetPopup.jsp
Normal file
86
src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSetPopup.jsp
Normal 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>
|
||||||
|
|
||||||
72
src/main/webapp/WEB-INF/jsp/nlib/login/memberSnsForm.jsp
Normal file
72
src/main/webapp/WEB-INF/jsp/nlib/login/memberSnsForm.jsp
Normal 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>
|
||||||
@ -30,40 +30,38 @@
|
|||||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||||
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
|
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
|
||||||
<c:set var="pageTitle">지방문화원 소장자료관 회원증</c:set>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<fmt:parseDate value="${loginVO.birthday}" var="dateFmt" pattern="yyyyMMdd"/>
|
||||||
<html>
|
<fmt:formatDate value="${dateFmt}" var="dateStr" pattern="yyyy-MM-dd"/>
|
||||||
<head>
|
|
||||||
<title>${pageTitle}</title>
|
<c:set var="pageTitle">회원증</c:set>
|
||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
|
||||||
<script type="text/javaScript" language="javascript">
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
<div class="inner">
|
||||||
<div class="wTableFrm" style="text-align:center;">
|
<div class="row Title">
|
||||||
<!-- 타이틀 -->
|
<h3>내 회원증 확인</h3>
|
||||||
<h2>${pageTitle}</h2>
|
<p>QR코드를 리더기에 스캔하세요.</p>
|
||||||
<span name="userName" id="userName" title="이름"> ${loginVO.name} |
|
</div>
|
||||||
<span name="userBirthday" id="userBirthday" title="생년월일">
|
<div class="row card">
|
||||||
|
<div class="title">
|
||||||
<fmt:parseDate value="${loginVO.birthday}" var="dateFmt" pattern="yyyyMMdd"/>
|
<p class="name">${loginVO.name}</p>
|
||||||
<fmt:formatDate value="${dateFmt}" var="dateStr" pattern="yyyy-MM-dd"/> ${dateStr}</span>
|
<p class="date">${dateStr}</p>
|
||||||
<br />
|
</div>
|
||||||
|
<div class="code">
|
||||||
<img src="${pageContext.request.contextPath}/userInfo/getMemberQrcode.do" />
|
<div class="num">
|
||||||
<br />
|
<div class="na">회원코드</div>
|
||||||
<br />
|
<div class="co">${loginVO.mbInfoId}</div>
|
||||||
<span name="userNumber" id="userNumber" title="회원코드">회원코드 : ${loginVO.mbInfoId}</span>
|
<div class="pr"><progress id="bar" value="30" max="60"></progress></div>
|
||||||
|
<div class="ti">남은시간<span class="timer">23초</span></div>
|
||||||
<br />
|
</div>
|
||||||
<br />
|
<div class="qr">
|
||||||
|
<img src="${pageContext.request.contextPath}/userInfo/getMemberQrcode.do" alt="QR코드 이미지">
|
||||||
※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다.
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
<div class="rolling">
|
||||||
|
<p><marquee>※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다. ※ 캡쳐한 회원증을 통한 자료대출 및 열람을 불허합니다.</marquee></p>
|
||||||
</body>
|
</div>
|
||||||
</html>
|
</div>
|
||||||
|
<button type="button" class="login-close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="Bg"></div>
|
||||||
|
|||||||
@ -26,7 +26,7 @@ $(document).ready(function() {
|
|||||||
<h2 class="blind">헤더영역</h2>
|
<h2 class="blind">헤더영역</h2>
|
||||||
<div class="inner">
|
<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">
|
<div class="search-wrap">
|
||||||
<h2 class="blind">검색</h2>
|
<h2 class="blind">검색</h2>
|
||||||
@ -53,8 +53,7 @@ $(document).ready(function() {
|
|||||||
<ul>
|
<ul>
|
||||||
<sec:authorize access="not isAuthenticated()">
|
<sec:authorize access="not isAuthenticated()">
|
||||||
<li><!-- 개발자 확인용 타이틀 임시 추가 DDDDDDDDDDD -->
|
<li><!-- 개발자 확인용 타이틀 임시 추가 DDDDDDDDDDD -->
|
||||||
<a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/login/loginCouncil.do';"
|
<a href="javascript:void(0)" onclick='fn_layerPopWithClass("/login/loginFormPopup.do", "pop-login")' title="${councilNm}(${councilCd})" class="login-btn">로그인</a></li>
|
||||||
title="${councilNm}(${councilCd})" class="login-btn">로그인</a></li>
|
|
||||||
</sec:authorize>
|
</sec:authorize>
|
||||||
<sec:authorize access="isAuthenticated()">
|
<sec:authorize access="isAuthenticated()">
|
||||||
<sec:authentication property="principal.name" var="userName" />
|
<sec:authentication property="principal.name" var="userName" />
|
||||||
@ -67,8 +66,8 @@ $(document).ready(function() {
|
|||||||
</li>
|
</li>
|
||||||
</sec:authorize>
|
</sec:authorize>
|
||||||
|
|
||||||
|
<li><a href="javascript:void(0)" class="member-card-btn">회원증</a></li>
|
||||||
<sec:authorize access="isAuthenticated()">
|
<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>
|
<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>
|
</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>
|
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/cart/listCartItems.do';">카트(<span class="count">10</span>)</a></li>
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
<!-- 개발진행 중 임시 추가 : 시작 DDDDDDDDDDDDDD -->
|
<!-- 개발진행 중 임시 추가 : 시작 DDDDDDDDDDDDDD -->
|
||||||
<li>--- 이하 임시 추가 메뉴 ---</li>
|
<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}/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}/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>
|
<li><a href="javascript:void(0)" onclick="javascript:location.href='${pageContext.request.contextPath}/system/reloadProperties.do';" title="환경설정갱신" class="underline blue">환경설정갱신</a></li>
|
||||||
|
|||||||
@ -4,48 +4,10 @@
|
|||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
|
||||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||||
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
|
<%@ 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="header" />
|
||||||
<tiles:insertAttribute name="menu" />
|
<tiles:insertAttribute name="menu" />
|
||||||
<tiles:insertAttribute name="main" />
|
<tiles:insertAttribute name="main" />
|
||||||
<tiles:insertAttribute name="footer" />
|
<tiles:insertAttribute name="footer" />
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@ -13,20 +13,19 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="format-detection" content="telephone=no" />
|
<meta name="format-detection" content="telephone=no" />
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="#">
|
<!-- <link rel="shortcut icon" type="image/x-icon" href="#"> 2번 호출되는 문제로 주석처리 -->
|
||||||
<link href="${pageContext.request.contextPath}/css/common.css" rel="stylesheet">
|
<link href="/css/common.css" rel="stylesheet">
|
||||||
<link href="${pageContext.request.contextPath}/css/jquery.mCustomScrollbar.css" rel="stylesheet">
|
<link href="/css/jquery.mCustomScrollbar.css" rel="stylesheet">
|
||||||
<link href="${pageContext.request.contextPath}/css/swiper.min.css" rel="stylesheet">
|
<link href="/css/swiper.min.css" rel="stylesheet">
|
||||||
<link href="${pageContext.request.contextPath}/css/default.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="/js/jquery/jquery.min.js"></script>
|
||||||
<script src="${pageContext.request.contextPath}/js/jquery/jquery.min.js"></script>
|
<script src="/js/jquery.mCustomScrollbar.js"></script>
|
||||||
<script src="${pageContext.request.contextPath}/js/jquery.mCustomScrollbar.js"></script>
|
<script src="/js/swiper.min.js"></script>
|
||||||
<script src="${pageContext.request.contextPath}/js/swiper.min.js"></script>
|
<script src="/js/default.js"></script>
|
||||||
<script src="${pageContext.request.contextPath}/js/default.js"></script>
|
|
||||||
|
|
||||||
<script src="${pageContext.request.contextPath}/js/nlib.js"></script>
|
<script src="/js/nlib.js"></script>
|
||||||
<script src="${pageContext.request.contextPath}/js/cart.js"></script>
|
<script src="/js/cart.js"></script>
|
||||||
|
|
||||||
<title>소장자료관</title>
|
<title>소장자료관</title>
|
||||||
|
|
||||||
@ -35,12 +34,14 @@
|
|||||||
function fn_setPageTitle(title) {
|
function fn_setPageTitle(title) {
|
||||||
document.title = "소장자료관 - " + title;
|
document.title = "소장자료관 - " + title;
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="wrap sub">
|
<div class="wrap sub">
|
||||||
|
|
||||||
<!-- 헤더 -->
|
<!-- 헤더 -->
|
||||||
<header id="header">
|
<header id="header">
|
||||||
<tiles:insertAttribute name="header" />
|
<tiles:insertAttribute name="header" />
|
||||||
@ -53,15 +54,15 @@ function fn_setPageTitle(title) {
|
|||||||
|
|
||||||
<!-- 메인컨텐츠 -->
|
<!-- 메인컨텐츠 -->
|
||||||
<tiles:insertAttribute name="main" />
|
<tiles:insertAttribute name="main" />
|
||||||
|
|
||||||
|
<!-- 풋터 -->
|
||||||
<footer id="footer">
|
<footer id="footer">
|
||||||
<tiles:insertAttribute name="footer" />
|
<tiles:insertAttribute name="footer" />
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Layer Popup -->
|
<!-- 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:block;">
|
||||||
<div id="NLIB_LAYER_POPUP" name="NLIB_LAYER_POPUP" style="display:none;">
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -4,20 +4,21 @@
|
|||||||
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
|
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
|
||||||
|
|
||||||
<tiles-definitions>
|
<tiles-definitions>
|
||||||
<!-- 메뉴 탭 타일즈 -->
|
|
||||||
|
<!-- 일반화면용 -->
|
||||||
<definition name="template" template="/WEB-INF/tiles/tiles-layout.jsp">
|
<definition name="template" template="/WEB-INF/tiles/tiles-layout.jsp">
|
||||||
<put-attribute name="header" value="/WEB-INF/tiles/inc/header.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="menu" value="/WEB-INF/tiles/inc/menu.jsp" />
|
||||||
<put-attribute name="footer" value="/WEB-INF/tiles/inc/footer.jsp" />
|
<put-attribute name="footer" value="/WEB-INF/tiles/inc/footer.jsp" />
|
||||||
</definition>
|
</definition>
|
||||||
|
|
||||||
|
<!-- 레이어팝업용 -->
|
||||||
<definition name="popup" template="/WEB-INF/tiles/tiles-layout-popup.jsp">
|
<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="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="menu" value="/WEB-INF/tiles/inc-popup/menu-popup.jsp" />
|
||||||
<put-attribute name="footer" value="/WEB-INF/tiles/inc-popup/footer-popup.jsp" />
|
<put-attribute name="footer" value="/WEB-INF/tiles/inc-popup/footer-popup.jsp" />
|
||||||
</definition>
|
</definition>
|
||||||
|
|
||||||
|
|
||||||
<definition name="*/*Popup" extends="popup">
|
<definition name="*/*Popup" extends="popup">
|
||||||
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}Popup.jsp" />
|
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}Popup.jsp" />
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
@ -15,7 +15,14 @@
|
|||||||
<td width="100%" height="100%" align="center" valign="middle" style="padding-top: 150px;"><table border="0" cellspacing="0" cellpadding="0">
|
<td width="100%" height="100%" align="center" valign="middle" style="padding-top: 150px;"><table border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="<spring:message code='image.errorBg' />">
|
<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>
|
||||||
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@ -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>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h1>마포 문화원</h1>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
JSESSIONID = <%=session.getId() %>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h2>로그인</h2>
|
|
||||||
<a href="/login/loginDept.do">로그인</a>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h2>로그인이 필요한 화면 링크</h2>
|
|
||||||
<a href="${pageContext.request.contextPath}/system/reloadProperties.do">프로퍼티갱신</a>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -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>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h1>서울 문화원</h1>
|
|
||||||
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
JSESSIONID = <%=session.getId() %>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h2>HOME</h2>
|
|
||||||
<a href="/">HOME</a>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<h2>로그인</h2>
|
|
||||||
<a href="${pageContext.request.contextPath}/login/loginCouncil.do">로그인</a>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<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='${"서울특별시 마포구"}' />" />
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -88,8 +88,8 @@ function fn_openLayerPopup(title, content, linkName, linkUrl) {
|
|||||||
|
|
||||||
function fn_closeLayerPopup() {
|
function fn_closeLayerPopup() {
|
||||||
$("#NLB_LAYER_POPUP").html("");
|
$("#NLB_LAYER_POPUP").html("");
|
||||||
$("#NLIB_LAYER_POPUP").hide();
|
$("#NLIB_LAYER_POPUP").fadeOut();
|
||||||
|
$('html,body').removeClass('no-scroll');
|
||||||
}
|
}
|
||||||
|
|
||||||
function fn_myAlert(newAlertNum) {
|
function fn_myAlert(newAlertNum) {
|
||||||
@ -100,6 +100,20 @@ function fn_myAlert(newAlertNum) {
|
|||||||
fn_openLayerPopup("알림", "아직 확인하지 않은 새로운 알림이 " + newAlertNum + "건 있습니다", "알림 목록으로", CONTEXT_PATH + "/cmm/listNotifications.do");
|
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) {
|
function fn_layerPop(url, classes) {
|
||||||
$("#NLIB_LAYER_POPUP").load(url);
|
$("#NLIB_LAYER_POPUP").load(url);
|
||||||
$("#NLIB_LAYER_POPUP").show();
|
$("#NLIB_LAYER_POPUP").show();
|
||||||
@ -124,7 +138,8 @@ function fn_layerPopFormSubmit(formName, display) {
|
|||||||
url: url,
|
url: url,
|
||||||
data: dataList
|
data: dataList
|
||||||
}).done(function(response){
|
}).done(function(response){
|
||||||
$("#NLIB_LAYER_POPUP").html(response);
|
alert("response:" + response);
|
||||||
|
$("#NLIB_LAYER_POPUP").empty().append(response);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,28 +1,262 @@
|
|||||||
<html>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<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" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
<link rel="icon" href="/favicon/favicon.ico" sizes="any"><!-- 32×32 -->
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<link rel="apple-touch-icon" href="/favicon/apple-touch-icon.png"><!-- 180×180 -->
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="manifest" href="/favicon/site.webmanifest">
|
<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/jquery.min.js"></script>
|
||||||
<script src="/js/nlib.js"></script>
|
<script src="/js/jquery.mCustomScrollbar.js"></script>
|
||||||
</head>
|
<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>
|
<body>
|
||||||
<form action="http://localhost:8088/uac/service/nlib/col/getItemInfo" method="GET">
|
|
||||||
mngOrgCd : <input name="mngOrgCd" id="mngOrgCd" value="SU01" /> <br />
|
<div class="wrap sub">
|
||||||
masterId : <input name="masterId" id="masterId" value="UR-408A9832D25C42289D9B1FC81FDA8360" /> <br />
|
|
||||||
typeDivCd : <input name="typeDivCd" id="typeDivCd" value="IT_MUSE" /> <br />
|
<!-- 헤더 -->
|
||||||
|
<header id="header">
|
||||||
|
|
||||||
<br />
|
|
||||||
<input type="submit" id="btnSubmit" name="btnSubmit" value="전송" />
|
|
||||||
</form>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 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>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Loading…
Reference in New Issue
Block a user