diff --git a/src/main/java/itn/let/sym/site/service/EgovSiteManagerService.java b/src/main/java/itn/let/sym/site/service/EgovSiteManagerService.java index 343c981c..14798a6a 100644 --- a/src/main/java/itn/let/sym/site/service/EgovSiteManagerService.java +++ b/src/main/java/itn/let/sym/site/service/EgovSiteManagerService.java @@ -161,5 +161,7 @@ public interface EgovSiteManagerService { int selectPersnalMemberCnt(String userId) throws Exception; // 첫결제여부 - int selectFirstPayCnt(String userId) throws Exception; + int selectFirstPayCnt(String userId) throws Exception; + + void updateInspManage(SiteManagerVO siteManagerVO) throws Exception; } diff --git a/src/main/java/itn/let/sym/site/service/SiteManagerVO.java b/src/main/java/itn/let/sym/site/service/SiteManagerVO.java index 4aa20c6f..f7629f03 100644 --- a/src/main/java/itn/let/sym/site/service/SiteManagerVO.java +++ b/src/main/java/itn/let/sym/site/service/SiteManagerVO.java @@ -62,6 +62,8 @@ public class SiteManagerVO extends ComDefaultVO { private String sessionTimeCdText; //세션타임 코드 텍스트 private String sessionTimeUserCd; //세션타임 사용자 코드 텍스트 private String sessionTimeUserCdTxt; //세션타임 사용자 코드 텍스트 + private String sysMaintenance; //점검중페이지 노출여부 + private String sysMaintenanceIp; //점검중페이지제외IP public static long getSerialversionuid() { return serialVersionUID; @@ -332,4 +334,21 @@ public class SiteManagerVO extends ComDefaultVO { this.sessionTimeUserCdTxt = sessionTimeUserCdTxt; } + public String getSysMaintenance() { + return sysMaintenance; + } + + public void setSysMaintenance(String sysMaintenance) { + this.sysMaintenance = sysMaintenance; + } + + public String getSysMaintenanceIp() { + return sysMaintenanceIp; + } + + public void setSysMaintenanceIp(String sysMaintenanceIp) { + this.sysMaintenanceIp = sysMaintenanceIp; + } + + } diff --git a/src/main/java/itn/let/sym/site/service/impl/EgovSiteManagerServiceImpl.java b/src/main/java/itn/let/sym/site/service/impl/EgovSiteManagerServiceImpl.java index efec1560..8088f566 100644 --- a/src/main/java/itn/let/sym/site/service/impl/EgovSiteManagerServiceImpl.java +++ b/src/main/java/itn/let/sym/site/service/impl/EgovSiteManagerServiceImpl.java @@ -5,6 +5,7 @@ import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import itn.let.sym.site.service.EgovSiteManagerService; @@ -388,5 +389,16 @@ public class EgovSiteManagerServiceImpl extends EgovAbstractServiceImpl implemen @Override public int selectFirstPayCnt(String userId) throws Exception{ return siteManagerDAO.selectFirstPayCnt(userId); - } + } + + @Override + public void updateInspManage(SiteManagerVO siteManagerVO) throws Exception { + if(!StringUtils.isEmpty(siteManagerVO.getSysMaintenanceIp())) { + siteManagerVO.setSysMaintenanceIp(siteManagerVO.getSysMaintenanceIp().trim().replaceAll(" ", "")); + } + + siteManagerDAO.updateInspManage(siteManagerVO); + } + + } diff --git a/src/main/java/itn/let/sym/site/service/impl/SiteManagerDAO.java b/src/main/java/itn/let/sym/site/service/impl/SiteManagerDAO.java index caf40eaa..ac84c9e4 100644 --- a/src/main/java/itn/let/sym/site/service/impl/SiteManagerDAO.java +++ b/src/main/java/itn/let/sym/site/service/impl/SiteManagerDAO.java @@ -370,6 +370,10 @@ public class SiteManagerDAO extends EgovAbstractDAO { // 첫결제여부 public int selectFirstPayCnt(String userId) throws Exception{ return (int) select("siteManagerDAO.selectFirstPayCnt", userId); - } + } + + public void updateInspManage(SiteManagerVO siteManagerVO) throws Exception{ + update("siteManagerDAO.updateInspManage", siteManagerVO); + } } diff --git a/src/main/java/itn/let/sym/site/web/EgovSiteManagerController.java b/src/main/java/itn/let/sym/site/web/EgovSiteManagerController.java index 9a361ecd..842c3e3e 100644 --- a/src/main/java/itn/let/sym/site/web/EgovSiteManagerController.java +++ b/src/main/java/itn/let/sym/site/web/EgovSiteManagerController.java @@ -2469,4 +2469,46 @@ public class EgovSiteManagerController { modelAndView.addObject("msg", msg); return modelAndView; } + + /** + * 관리자 알림 여부 + * + * @param joinSettingVO + * @param model + * @return + * @throws Exception + */ + + @RequestMapping("/sym/site/selectInspManage.do") + public String selectInspManage(ModelMap model) throws Exception { + model.addAttribute("model", egovSiteManagerService.selectSiteManagerVO(new SiteManagerVO())); + return "/sym/site/inspManage"; + } + + @RequestMapping("/sym/site/updateInspManageAjax.do") + public ModelAndView updateInspManage(SiteManagerVO siteManagerVO, ModelMap model) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + siteManagerVO.setLastUpdusrId(userId); + String msg = "저장되었습니다."; + String result = "SUCCESS"; + + try { + egovSiteManagerService.updateInspManage(siteManagerVO); + } catch (Exception e) { + System.out.println(e.getMessage()); + msg = "저장에 실패했습니다."; + result = "fail"; + } + + model.addAttribute("msg", msg); + model.addAttribute("result", result); + + return modelAndView; + } } diff --git a/src/main/java/itn/web/MainController.java b/src/main/java/itn/web/MainController.java index c99ac24c..426917ca 100644 --- a/src/main/java/itn/web/MainController.java +++ b/src/main/java/itn/web/MainController.java @@ -13,6 +13,7 @@ import java.security.PublicKey; import java.security.spec.RSAPublicKeySpec; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -50,6 +51,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -717,6 +719,23 @@ public class MainController { ModelMap model, HttpServletRequest request) throws Exception { + //점검중 페이지 체크 + SiteManagerVO siteManagerVO_ = new SiteManagerVO(); + siteManagerVO_ = egovSiteManagerService.selectSiteManagerVO(siteManagerVO_); + + //1. 사이트 점검중 페이지 노출 + //2. siteManager 테이블의 SYS_MAINTENANCE, SYS_MAINTENANCE_IP 를 통해 구분 + //3. 점검중페이지 노출 방식 + // 미사용 : 점검 중 페이지 미노출 + // IP로제어 : 등록 IP를 제외하고 모든 페이지에서 '점검중' 레이어 노출 + // PATH로제어 : '/web/main/mainPage.do' 메인페이지에 접근했을때만 점검중페이지로 이동 + String userIP = this.getClientIP(request); + Boolean result = this.inspPageIp(request, userIP, siteManagerVO_); + if(!result) { + model.addAttribute("inspYn", "Y"); + } + + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); @@ -1296,19 +1315,23 @@ public class MainController { //점검중 페이지 체크 SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO); - if("Y".equals(siteManagerVO.getInspFlag() )){ //점검중 +// if("Y".equals(siteManagerVO.getInspFlag() )){ //점검중 +// return "web/com/insp"; +// } + + + //1. 사이트 점검중 페이지 노출 + //2. siteManager 테이블의 SYS_MAINTENANCE, SYS_MAINTENANCE_IP 를 통해 구분 + //3. 점검중페이지 노출 방식 + // 미사용 : 점검 중 페이지 미노출 + // IP로제어 : 등록 IP를 제외하고 모든 페이지에서 '점검중' 레이어 노출 + // PATH로제어 : '/web/main/mainPage.do' 메인페이지에 접근했을때만 점검중페이지로 이동 + String userIP = this.getClientIP(request); + Boolean result = this.inspPagePath(request, userIP, siteManagerVO); + if(!result) { return "web/com/insp"; } - /*LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String authority = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - if("ROLE_ADMIN".equals(authority)) { - String referer = request.getHeader("Referer"); - request.getSession().invalidate(); - return "redirect:/web/main/mainPage.do"; - }*/ //자신의 위치 정보 List menuCurrentResultList = new ArrayList(); //자신의 위치 @@ -2695,6 +2718,229 @@ public class MainController { modelAndView.addObject("msg", msg); return modelAndView; - } + } + + @RequestMapping(value = "/web/main/mainPage_insp.do") + public String mainPage_insp(HttpServletRequest request, ModelMap model, HttpSession session, + @RequestParam(value="message", defaultValue="0") String message, LetterVO letterVO) throws Exception{ + //메인이미지 + String referer = (String)request.getHeader("REFERER"); + + //로그인 실패시 메세지 + if(!"0".equals(message)) { + model.addAttribute("messageflag", "1"); + model.addAttribute("message", message); + } + + //kisa 사용자 경고 팝업 + LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + if(EgovUserDetailsHelper.isAuthenticated() && user!=null) { + KisaVO kisaVO = new KisaVO(); + kisaVO.setMberId(user.getId()); + kisaVO.setKisaPopupYn("Y"); + List kisaList = kisaService.selectKisaListMberId(kisaVO); + if(kisaList.size() > 0) { + //kisa 코드 조회 + ComDefaultCodeVO kisacodeVO = new ComDefaultCodeVO(); + kisacodeVO.setCodeId("ITN034"); + List kisacodeResult = cmmUseService.selectCmmCodeDetail(kisacodeVO); + model.addAttribute("kisacodeResult", kisacodeResult); + + //위반 사항 안내 종합 (아이디별 kisalist의 각각 kisaWarnMessage를 한번에 보여주기 위해) + String[] chk = {}; + ArrayList kisaWarnMessagelist = new ArrayList(); + for(KisaVO tmpVO : kisaList) { + if(!"".equals(tmpVO.getKisaWarnMessage()) && tmpVO.getKisaWarnMessage() != null) { + chk = tmpVO.getKisaWarnMessage().split(","); + for(int i = 0 ; i < chk.length ; i++) { + if(!kisaWarnMessagelist.contains(chk[i])) { + kisaWarnMessagelist.add(chk[i]); + } + } + } + } + model.addAttribute("chk", kisaWarnMessagelist); + model.addAttribute("kisaListSize", kisaList.size()); + model.addAttribute("kisaList", kisaList); + } + } + + //공지사항 게시글 불러오기 + BoardMasterVO boardMasterVO = new BoardMasterVO(); + //공지사항 url로 전체게시글 불러오기 + boardMasterVO.setUrl("/web/cop/bbs/NoticeList.do"); + BoardMasterVO bmVO = new BoardMasterVO(); + + BoardVO boardVO = new BoardVO(); + boardVO.setPageUnit(7); + boardVO.setPageSize(10); + + if("".equals(boardMasterVO.getSearchSortCnd())){ //최초조회시 최신것 조회List + boardMasterVO.setSearchSortCnd("nttId"); + boardMasterVO.setSearchSortOrd("desc"); + } + //전체 게시글 불러오기 + Map map = new HashMap(); + + if(boardMasterVO.getPageUnit() != 10) { + bmVO.setPageUnit(boardMasterVO.getPageUnit()); + } + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(bmVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(bmVO.getPageUnit()); + paginationInfo.setPageSize(bmVO.getPageSize()); + + paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); + paginationInfo.setPageSize(boardVO.getPageSize()); + + boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); + boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 + boardMasterVO.setUrl(temp.replace("Ajax", "")); + + Map noticeMap = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); + + if(!noticeMap.get("resultCnt").equals("0")){ + @SuppressWarnings("unchecked") + ArrayList boardList= (ArrayList)noticeMap.get("resultList") ; //nttcn 태그 삭제 처리 + for( BoardVO tempBoardVO : boardList){ + if("".equals(tempBoardVO.getNttCn().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "").split("<")[0].equals(""))){ + tempBoardVO.setNttCn ( tempBoardVO.getNttCn().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "")) ; + }else { + tempBoardVO.setNttCn( tempBoardVO.getNttCn().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "").split("<")[0] ) ; + } + } + model.addAttribute("noticeList", noticeMap.get("resultList")); + } + + // 문자 카테고리 리스트 불러오기 + List cateConfList = letterService.selectCateConfWithList("N"); + model.addAttribute("cateCodeList", cateConfList); + + // 맞춤문자 카테고리 리스트 불러오기 + List cateConfCustomList = letterService.selectCateConfWithList("C"); + model.addAttribute("cateConfCustomList", cateConfCustomList); + + { + /** + * + * 이벤트를 위한 결제내역 조회 + * 결제 내역이 없으면 첫결제 이벤트 팝업 호출 할 수 있도록 함. + * + * */ + String userId = user == null ? "" : EgovStringUtil.isNullToString(user.getId()); + int payCnt = 0; + if(StringUtil.isNotEmpty(userId)) { + //결제내역 카운트 조회 + payCnt = mjonPayService.selectMemerPayCount(userId); + + } + model.addAttribute("payCount", payCnt); + model.addAttribute("userId", userId); + + //현재 진행중 이벤트 조회(최저가 문자발송 이벤트 진행중인지 조회 - like 검색으로 진행중인 이벤트를 1개만 불러온다.) + //일단 테스트로 게시글 제목으로 조회하도록 함. + String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; //제목 검색 + BoardVO eventBoardVO = new BoardVO(); + eventBoardVO.setBbsId("BBSMSTR_000000000731"); + eventBoardVO.setNttSj(nttSj); + BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(eventBoardVO); + + model.addAttribute("resultEvent", resultEvent); + + String blineCode = "N"; + if(StringUtil.isNotEmpty(userId)) { + // B선 전송사 사용여부 + MberManageVO mberManageVO = new MberManageVO(); + mberManageVO.setMberId(userId); + blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO); + } + model.addAttribute("blineCode", blineCode); + } + + return "web/main/mainPage"; + } + + private String getClientIP(HttpServletRequest request) { + String ip = ""; + + try { + ip = request.getHeader("X-Forwarded-For"); + //logger.info("> X-FORWARDED-FOR : " + ip); + //System.out.println("> X-FORWARDED-FOR : " + ip); + + if (ip == null) { + ip = request.getHeader("Proxy-Client-IP"); + //System.out.println("> Proxy-Client-IP : " + ip); + } + if (ip == null) { + ip = request.getHeader("WL-Proxy-Client-IP"); + //System.out.println("> WL-Proxy-Client-IP : " + ip); + } + if (ip == null) { + ip = request.getHeader("HTTP_CLIENT_IP"); + //System.out.println("> HTTP_CLIENT_IP : " + ip); + } + if (ip == null) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + //System.out.println("> HTTP_X_FORWARDED_FOR : " + ip); + } + if (ip == null) { + ip = request.getRemoteAddr(); + //System.out.println("> getRemoteAddr : "+ip); + } + //System.out.println("> Result : IP Address : "+ip); + }catch(Exception ex) + { + ex.printStackTrace(); + } + + return ip; + } + + private Boolean inspPagePath(HttpServletRequest request, String userIP, SiteManagerVO siteManagerVO) { +// if("IP".equals(siteManagerVO.getSysMaintenance())) { +// if(!StringUtils.isEmpty(siteManagerVO.getSysMaintenanceIp())) { +// if(!Arrays.stream(siteManagerVO.getSysMaintenanceIp().split(",")).anyMatch(userIP::equals)) { +// /* 점검중 */ +// return false; +// } +// } else { +// /* 점검중 */ +// return false; +// } +// } + if("PATH".equals(siteManagerVO.getSysMaintenance())) { + if("/web/main/mainPage.do".equals(request.getRequestURI())) { + /* 점검중 */ + return false; + } + } + return true; + } + + private Boolean inspPageIp(HttpServletRequest request, String userIP, SiteManagerVO siteManagerVO) { + if("IP".equals(siteManagerVO.getSysMaintenance())) { + if(!StringUtils.isEmpty(siteManagerVO.getSysMaintenanceIp())) { + if(!Arrays.stream(siteManagerVO.getSysMaintenanceIp().split(",")).anyMatch(userIP::equals)) { + /* 점검중 */ + return false; + } + } else { + /* 점검중 */ + return false; + } + } +// if("PATH".equals(siteManagerVO.getSysMaintenance())) { +// if("/web/main/mainPage.do".equals(request.getRequestURI())) { +// /* 점검중 */ +// return false; +// } +// } + return true; + } } \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml index 9a9b4cd0..3dba239c 100644 --- a/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml @@ -48,7 +48,9 @@ A.TERMS_YN AS termsYn, A.TERMS_CN AS termsCn, C.CODE_DC AS sessionTimeCdText, - D.CODE_DC AS sessionTimeUserCdTxt + D.CODE_DC AS sessionTimeUserCdTxt, + A.SYS_MAINTENANCE AS sysMaintenance, + A.SYS_MAINTENANCE_IP AS sysMaintenanceIp FROM SITEMANAGER A LEFT JOIN LETTNFILEDETAIL B ON A.FAVICON_FILE_ID = B.ATCH_FILE_ID LEFT JOIN ( @@ -1358,5 +1360,15 @@ AND PG_STATUS = '1' LIMIT 1 + + + UPDATE sitemanager + SET LAST_UPDUSR_ID = #lastUpdusrId# + ,LAST_UPDT_PNTTM = now() + ,SYS_MAINTENANCE = #sysMaintenance# + + ,SYS_MAINTENANCE_IP = #sysMaintenanceIp# + + diff --git a/src/main/webapp/WEB-INF/jsp/sym/site/inspManage.jsp b/src/main/webapp/WEB-INF/jsp/sym/site/inspManage.jsp new file mode 100644 index 00000000..75a83cb6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sym/site/inspManage.jsp @@ -0,0 +1,108 @@ +<%@ 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 prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + 점검중페이지관리 + + + + +
+
+
+

점검중페이지관리

+

점검중페이지관리 페이지 입니다.

+
+
+
+
+*방식 설명*
+미사용 : 점검 중 페이지 미노출
+IP로제어 : 등록 IP를 제외하고 모든 페이지에서 '점검중' 레이어 노출
+PATH로제어 : '/web/main/mainPage.do' 메인페이지에 접근했을때만 점검중페이지로 이동
+
+
+
+
+ + + + + + + + + + + + + + + +
점검중 페이지 방식 + +
IP테이블(IP로 선택 시 제외할 IP ','를 구분자로 기입) + +
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp index bc6c48ff..6d78e136 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -738,6 +738,17 @@ function actionLogin() { }
+ + +
+
+ 점검중임 +
+
+