From 03a5491ed26959d7de58452ce7f21f46ce35dcde Mon Sep 17 00:00:00 2001 From: jazz Date: Fri, 28 Nov 2025 10:27:51 +0900 Subject: [PATCH] =?UTF-8?q?fo=20bo=20=EB=A8=B8=EC=A7=80=EC=9E=91=EC=97=85?= =?UTF-8?q?=20-=20=EC=98=A4=EB=A5=98=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/controller/MaEmailController.java | 2 +- .../ntcn/sms/controller/MaSmsController.java | 2 +- .../stl/controller/MaStlMssageController.java | 10 ++-- .../controller/MaMarktAnalsController.java | 4 +- .../controller/MaAuthgrpController.java | 39 +++++++++------ .../author/controller/MaAuthorController.java | 4 ++ .../domain/admin/sys/fnct/vo/BOFnctVO.java | 1 + .../mngr/controller/MAJobUserController.java | 16 +++++-- .../admin/user/mngr/vo/BOJobUserVO.java | 3 ++ .../mngrstr/controller/MngrStrController.java | 6 +-- .../GlobalExceptionControllerAdvice.java | 48 ++++++++++++++++++- .../response/WnbtResponseBody.java | 4 +- .../use/mngr/maJobUserListInqireRForm.jsp | 4 +- .../WEB-INF/views/comm/admin/Include.jsp | 2 +- 14 files changed, 109 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/wb/domainserver/domain/admin/ntcn/email/controller/MaEmailController.java b/src/main/java/com/wb/domainserver/domain/admin/ntcn/email/controller/MaEmailController.java index 4facabc8..10d0303d 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/ntcn/email/controller/MaEmailController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/ntcn/email/controller/MaEmailController.java @@ -131,7 +131,7 @@ public class MaEmailController { content.put("boCtrlMap", service.selectBOMaEmailSndngListInqire(bOMaEmailSrchVO)); content.put("BOMaEmailSrchVO", bOMaEmailSrchVO); - model.addAttribute("resultSrchMap", content); + model.addAttribute("resultListMap", content); // responseHandler.handleResponse( // sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire", maEmailSrchVO), // model, diff --git a/src/main/java/com/wb/domainserver/domain/admin/ntcn/sms/controller/MaSmsController.java b/src/main/java/com/wb/domainserver/domain/admin/ntcn/sms/controller/MaSmsController.java index 7672adc1..acc5b6da 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/ntcn/sms/controller/MaSmsController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/ntcn/sms/controller/MaSmsController.java @@ -151,7 +151,7 @@ public class MaSmsController { content.put("mssageMap", service.selectBOSmsSndngListInqire(bOMaMssageSrchVO)); content.put("bOMaMssageSrchVO", bOMaMssageSrchVO); - model.addAttribute("resultMap", content); + model.addAttribute("resultListMap", content); // responseHandler.handleResponse( // sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/mssage/selectBOSmsSndngListInqire", maSmsSrchVO), // model, diff --git a/src/main/java/com/wb/domainserver/domain/admin/ntcn/stl/controller/MaStlMssageController.java b/src/main/java/com/wb/domainserver/domain/admin/ntcn/stl/controller/MaStlMssageController.java index f0b4eaf7..eeb57206 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/ntcn/stl/controller/MaStlMssageController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/ntcn/stl/controller/MaStlMssageController.java @@ -214,9 +214,9 @@ public class MaStlMssageController { // ); /*엑셀 데이터 set*/ - List> excelList = new ArrayList<>(); - Map excelMap = (Map) resultMap.get("strInfo"); - excelList = (List>) excelMap.get("chargeList"); + List excelList = new ArrayList<>(); + DataMap excelMap = (DataMap) resultMap.get("strInfo"); + excelList = (List) excelMap.get("chargeList"); //엑셀 다운로드 다운로드 시간 Date date = new Date(); @@ -231,8 +231,8 @@ public class MaStlMssageController { BigInteger num = BigInteger.valueOf(excelList.size()); for (int i = 0; i < excelList.size(); i++) { HashMap dataMap = new HashMap<>(); - HashMap map = new HashMap<>(); - map = (HashMap) excelList.get(i); + DataMap map = new DataMap(); + map = (DataMap) excelList.get(i); /*데이터 set*/ dataMap.put("itme01", num.subtract(BigInteger.valueOf(i))); diff --git a/src/main/java/com/wb/domainserver/domain/admin/stats/marktAnals/controller/MaMarktAnalsController.java b/src/main/java/com/wb/domainserver/domain/admin/stats/marktAnals/controller/MaMarktAnalsController.java index 803d0bf8..0545ccad 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/stats/marktAnals/controller/MaMarktAnalsController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/stats/marktAnals/controller/MaMarktAnalsController.java @@ -55,9 +55,9 @@ public class MaMarktAnalsController { */ @Policy(AuthPolicy.RESTRICTED) @RequestMapping(value = "/selectAdminMbrNdMlgStats") - public String selectAdminMbrMlg(ModelMap model, DataMap vo) { + public String selectAdminMbrMlg(ModelMap model) { MarktAnalsVO mavo = new MarktAnalsVO(); - + DataMap vo = new DataMap(); // 응답 메세지 객체 Map content = new HashMap<>(); diff --git a/src/main/java/com/wb/domainserver/domain/admin/sys/authgrp/controller/MaAuthgrpController.java b/src/main/java/com/wb/domainserver/domain/admin/sys/authgrp/controller/MaAuthgrpController.java index 156338bc..959280ac 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/sys/authgrp/controller/MaAuthgrpController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/sys/authgrp/controller/MaAuthgrpController.java @@ -173,23 +173,34 @@ public class MaAuthgrpController { public String selectAuthGrpRegistForm(BOMaAuthgrpVO vo, ModelMap model) { DataMap content = new DataMap(); - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(vo.getPageIndex()); - paginationInfo.setRecordCountPerPage(vo.getPageUnit()); - paginationInfo.setPageSize(paginationProperties.getPageSize()); - - vo.setPaginationInfo(paginationInfo); - vo.setFirstIndex(paginationInfo.getFirstRecordIndex()); - vo.setLastIndex(paginationInfo.getLastRecordIndex()); - vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - content.put("paramVO", vo); + List srchList = new ArrayList<>(); + DataMap srchMap = new DataMap(); + srchMap.put("srchAuthorNm", vo.getSrchAuthorNm()); + srchMap.put("srchSysDvCd", vo.getSrchSysDvCd()); + srchMap.put("pageUnit", vo.getPageUnit()); + srchMap.put("pageIndex", vo.getPageIndex()); + srchMap.put("pageDv", vo.getPageDv()); + srchList.add(srchMap); List authGrlList = new ArrayList<>(); - authGrlList = service.selectBOAuthGrpList(vo); - content.put("resultList", authGrlList); + if(!vo.getAuthorId().isEmpty()) { + DataMap authGrlMap = new DataMap(); + authGrlMap = service.selectBOAuthGrpUpdtForm(vo); + authGrlList.add(authGrlMap); + } - content.put("paginationInfo", vo.getPaginationInfo()); + // 공통코드 호출 + BOMaComncdVO bOMaComncdVO = new BOMaComncdVO(); + bOMaComncdVO.setGroupCd("SYS_DV"); // 시스템구분(SYS_DV) + List sysDvList = boMaComncdService.selectBOCommcdDetailList(bOMaComncdVO); + bOMaComncdVO.setGroupCd("FNCT_DV"); // 기능구분(FNCT_DV) + List fnctDvList = boMaComncdService.selectBOCommcdDetailList(bOMaComncdVO); + + content.put("srchList", srchList); + content.put("mbrGradList", authGrlList); + content.put("paramVO", vo); + content.put("sysDvList", sysDvList); + content.put("fnctDvList", fnctDvList); model.addAttribute("resultMap", content); // responseHandler.handleResponse( diff --git a/src/main/java/com/wb/domainserver/domain/admin/sys/author/controller/MaAuthorController.java b/src/main/java/com/wb/domainserver/domain/admin/sys/author/controller/MaAuthorController.java index 0b5e5a07..38c4b0a0 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/sys/author/controller/MaAuthorController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/sys/author/controller/MaAuthorController.java @@ -2,6 +2,8 @@ package com.wb.domainserver.domain.admin.sys.author.controller; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.wb.domainserver.common.msg.GconeMessageSource; import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo; import com.wb.domainserver.common.prop.PaginationProperties; @@ -103,6 +105,8 @@ public class MaAuthorController { // ); ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); try { resultMap.put("cgn036", objectMapper.writeValueAsString(resultMap.get("cgn036"))); diff --git a/src/main/java/com/wb/domainserver/domain/admin/sys/fnct/vo/BOFnctVO.java b/src/main/java/com/wb/domainserver/domain/admin/sys/fnct/vo/BOFnctVO.java index e75a1d3f..87ff9373 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/sys/fnct/vo/BOFnctVO.java +++ b/src/main/java/com/wb/domainserver/domain/admin/sys/fnct/vo/BOFnctVO.java @@ -74,6 +74,7 @@ public class BOFnctVO extends AbstractVO { /* 권한메뉴기능고유번호 */ private String authorMenuFnctInnb; + private String pageDv; } diff --git a/src/main/java/com/wb/domainserver/domain/admin/user/mngr/controller/MAJobUserController.java b/src/main/java/com/wb/domainserver/domain/admin/user/mngr/controller/MAJobUserController.java index d776c0af..026f793f 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/user/mngr/controller/MAJobUserController.java +++ b/src/main/java/com/wb/domainserver/domain/admin/user/mngr/controller/MAJobUserController.java @@ -1,6 +1,8 @@ package com.wb.domainserver.domain.admin.user.mngr.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.wb.domainserver.common.msg.GconeMessageSource; import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo; import com.wb.domainserver.common.prop.PaginationProperties; @@ -110,6 +112,8 @@ public class MAJobUserController { // sendToResrc.ofPost(RESRC.GCONEBO, "/admin/user/mngr/selectBOJobUserListInqireForm",vo) // ); ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); try { resultMap.put("cgn036", objectMapper.writeValueAsString(resultMap.get("cgn036"))); @@ -187,6 +191,8 @@ public class MAJobUserController { // sendToResrc.ofPost(RESRC.GCONEBO, "/admin/user/mngr/selectBOJobUserRegistForm",vo) // ); ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); try { resultMap.put("managerCodeList", objectMapper.writeValueAsString(resultMap.get("managerCodeList"))); resultMap.put("emailCode", objectMapper.writeValueAsString(resultMap.get("emailCode"))); @@ -298,6 +304,8 @@ public class MAJobUserController { // sendToResrc.ofPost(RESRC.GCONEBO, "/admin/user/mngr/selectBOJobUserUpdtForm",vo) // ); ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); try { resultMap.put("managerCodeList", objectMapper.writeValueAsString(resultMap.get("managerCodeList"))); resultMap.put("emailCode", objectMapper.writeValueAsString(resultMap.get("emailCode"))); @@ -594,9 +602,9 @@ public class MAJobUserController { headerMap.put("itme08", "로그인 보안"); headerMap.put("itme09", "최종접속일시"); - List> excelList = new ArrayList<>(); + List excelList = new ArrayList<>(); if(resultMap != null) { - excelList = (List>) resultMap.get("excelList"); + excelList = (List) resultMap.get("excelList"); } //엑셀 항목에 출력될 내용 설정 @@ -605,8 +613,8 @@ public class MAJobUserController { if(excelList != null) { for (int i = 0; i < excelList.size(); i++ ) { HashMap dataMap = new HashMap<>(); - HashMap map = new HashMap<>(); - map = (HashMap) excelList.get(i); + DataMap map = new DataMap(); + map = excelList.get(i); String ip2fas = ""; String fas = map.get("mblphonCrtfcAt").toString(); diff --git a/src/main/java/com/wb/domainserver/domain/admin/user/mngr/vo/BOJobUserVO.java b/src/main/java/com/wb/domainserver/domain/admin/user/mngr/vo/BOJobUserVO.java index 0272d40c..b55a1ac7 100644 --- a/src/main/java/com/wb/domainserver/domain/admin/user/mngr/vo/BOJobUserVO.java +++ b/src/main/java/com/wb/domainserver/domain/admin/user/mngr/vo/BOJobUserVO.java @@ -113,4 +113,7 @@ public class BOJobUserVO extends AbstractVO { /** 비밀번호변경 여부 */ private String mbrPwdChngAt; +// private String juscrbStrtDt; +// private String juscrbEndDt; + } diff --git a/src/main/java/com/wb/domainserver/domain/mngr/mngrstr/controller/MngrStrController.java b/src/main/java/com/wb/domainserver/domain/mngr/mngrstr/controller/MngrStrController.java index f36f0c8a..d21d0ab5 100644 --- a/src/main/java/com/wb/domainserver/domain/mngr/mngrstr/controller/MngrStrController.java +++ b/src/main/java/com/wb/domainserver/domain/mngr/mngrstr/controller/MngrStrController.java @@ -354,10 +354,10 @@ public class MngrStrController { String kakaoKey = ""; if(content.containsKey("BOMngrStrVO")){ - Map paramVO = (Map) content.get("BOMngrStrVO"); + BOMngrStrVO paramVO = (BOMngrStrVO) content.get("BOMngrStrVO"); - if(!ObjectUtils.isEmpty(paramVO.get("sopmalCd"))){ - kakaoKey = kakaoProperties.getKeyForDomain(paramVO.get("sopmalCd").toString()); + if(!ObjectUtils.isEmpty(paramVO.getSopmalCd())){ + kakaoKey = kakaoProperties.getKeyForDomain(paramVO.getSopmalCd().toString()); } } diff --git a/src/main/java/com/wb/domainserver/exception/advice/GlobalExceptionControllerAdvice.java b/src/main/java/com/wb/domainserver/exception/advice/GlobalExceptionControllerAdvice.java index f2660241..38adf6f3 100644 --- a/src/main/java/com/wb/domainserver/exception/advice/GlobalExceptionControllerAdvice.java +++ b/src/main/java/com/wb/domainserver/exception/advice/GlobalExceptionControllerAdvice.java @@ -4,19 +4,31 @@ import com.wb.domainserver.exception.code.ErrCode; import com.wb.domainserver.exception.WnbtException; import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtWebClientException; +import com.wb.domainserver.realm.RealmContextHolder; import com.wb.domainserver.response.WnbtResponse; import com.wb.domainserver.response.WnbtResponseBody; +import com.wb.domainserver.util.CookieUtils; +import io.jsonwebtoken.Header; +import io.jsonwebtoken.JwtException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.oauth2.client.ClientAuthorizationRequiredException; +import org.springframework.util.MethodInvoker; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.Mapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.servlet.ModelAndView; +import java.io.IOException; +import java.util.Map; + @Slf4j @ControllerAdvice public class GlobalExceptionControllerAdvice { @@ -35,14 +47,25 @@ public class GlobalExceptionControllerAdvice { } @ExceptionHandler(value = WnbtRestException.class) + @RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity ajaxErrorHandler(HttpServletRequest req, HttpServletResponse res, WnbtRestException e){ WnbtResponse wnbtResponse = WnbtResponse.builder() .statusCode(res.getStatus()) .requestUrl(String.valueOf(req.getRequestURL())) - .resBody(new WnbtResponseBody(e.getMessage())) + .resBody(new WnbtResponseBody(e, e.getMessage())) .build(); - return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(wnbtResponse); + int errCode = 500; + + if(StringUtils.hasText(e.getCode())){ + errCode = Integer.parseInt(e.getCode()); + } + + return ResponseEntity + .status(errCode) + .contentType(MediaType.APPLICATION_JSON) + .body(wnbtResponse); +// return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(wnbtResponse); //422 : 서버가 요청을 이해하고 요청 문법도 올바르지만 요청된 지시를 따를 수 없음을 나타냄 //요청 데이터에 대해 validation 처리를 하면서 적합하지 않은 데이터를 받았을 때 반환 } @@ -82,4 +105,25 @@ public class GlobalExceptionControllerAdvice { return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(wnbtResponse); } + /** 해당 exception handler에 오는 경우 토큰 변조로 간주하고 + * 로그아웃 처리를 위해 로그인 관련 쿠키 및 logout으로 redirect 처리하여 + * 재로그인 유도 + */ + @ExceptionHandler(value = JwtException.class) + public void JwtException(HttpServletRequest request, HttpServletResponse response, JwtException e) throws IOException { + log.error(e.getMessage(), e); + String realm = RealmContextHolder.getRealm().toLowerCase(); + + Map cookiePath = CookieUtils.loginCookiePath(); + //리프레쉬 토큰 삭제 + CookieUtils.deleteCookie("RFT", cookiePath.get("RFTPath"), request, response); + //엑세스토큰 삭제 + CookieUtils.deleteCookie("ACT", cookiePath.get("ACTPath"), request, response); + //토큰만료 검증쿠키 삭제 + CookieUtils.deleteCookie("token_expire", cookiePath.get("ACTPath"), request, response); + + response.setStatus(HttpStatus.UNAUTHORIZED.value()); + response.sendRedirect("/"+realm+"/logout"); + } + } diff --git a/src/main/java/com/wb/domainserver/response/WnbtResponseBody.java b/src/main/java/com/wb/domainserver/response/WnbtResponseBody.java index 83f62688..229c8666 100644 --- a/src/main/java/com/wb/domainserver/response/WnbtResponseBody.java +++ b/src/main/java/com/wb/domainserver/response/WnbtResponseBody.java @@ -27,14 +27,16 @@ public class WnbtResponseBody { .setSerializationInclusion(JsonInclude.Include.NON_NULL); // null 값 제외 public WnbtResponseBody(Object result) { - try{ this.result = OBJECT_MAPPER.writeValueAsString(result); } catch (JsonProcessingException e) { log.error(e.getMessage()); throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR); } + } + public WnbtResponseBody(WnbtRestException ex, Object result) { + this.result = result; } diff --git a/src/main/webapp/WEB-INF/views/admin/use/mngr/maJobUserListInqireRForm.jsp b/src/main/webapp/WEB-INF/views/admin/use/mngr/maJobUserListInqireRForm.jsp index e7dc65dc..3424f140 100644 --- a/src/main/webapp/WEB-INF/views/admin/use/mngr/maJobUserListInqireRForm.jsp +++ b/src/main/webapp/WEB-INF/views/admin/use/mngr/maJobUserListInqireRForm.jsp @@ -60,8 +60,8 @@ if (datePick != '') { $(datePick).trigger('click'); } else { - $('#juscrbStrtDt').val(''); - $('#juscrbEndDt').val(''); + $('#juscrbStrtDt').val(''); + $('#juscrbEndDt').val(''); } $('#srchStr').val(''); diff --git a/src/main/webapp/WEB-INF/views/comm/admin/Include.jsp b/src/main/webapp/WEB-INF/views/comm/admin/Include.jsp index 6f1f12a7..a1ff3239 100644 --- a/src/main/webapp/WEB-INF/views/comm/admin/Include.jsp +++ b/src/main/webapp/WEB-INF/views/comm/admin/Include.jsp @@ -66,7 +66,7 @@ - +