From 77171ce671427d7109952f6c3fe7c35968c62d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Tue, 9 Sep 2025 13:46:59 +0900 Subject: [PATCH] =?UTF-8?q?/main.do=20=EC=A0=9C=EA=B1=B0,=20=EC=B2=98?= =?UTF-8?q?=EB=B6=84=EC=82=AC=EC=A0=84=20=EC=86=8C=EC=9C=A0=EC=9E=90=20?= =?UTF-8?q?=ED=96=89=EC=9C=84=EC=9E=90=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/EgovExceptionAdvice.java | 2 +- .../login/controller/LoginController.java | 2 +- .../main/controller/MainController.java | 21 ++++----- .../main/CrdnImpltTaskMapper_maria.xml | 4 +- src/main/webapp/WEB-INF/views/index.jsp | 43 ++++++++++++++++++- 5 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/main/java/egovframework/exception/EgovExceptionAdvice.java b/src/main/java/egovframework/exception/EgovExceptionAdvice.java index 8127011..a518305 100644 --- a/src/main/java/egovframework/exception/EgovExceptionAdvice.java +++ b/src/main/java/egovframework/exception/EgovExceptionAdvice.java @@ -113,7 +113,7 @@ public class EgovExceptionAdvice { @ExceptionHandler(MessageException.class) public Object handleMessageException(MessageException e, HttpServletRequest request) { log.warn("MessageException 발생: ", e); - return getModelAndView(e, request, HttpStatus.INTERNAL_SERVER_ERROR); + return getModelAndView(e, request, HttpStatus.BAD_REQUEST); } /** diff --git a/src/main/java/go/kr/project/login/controller/LoginController.java b/src/main/java/go/kr/project/login/controller/LoginController.java index 31efb0c..a8ca205 100644 --- a/src/main/java/go/kr/project/login/controller/LoginController.java +++ b/src/main/java/go/kr/project/login/controller/LoginController.java @@ -160,7 +160,7 @@ public class LoginController { } else { // 로그인 성공 Map data = new HashMap<>(); - data.put("redirectUrl", "/main.do"); + data.put("redirectUrl", "/"); return ApiResponseUtil.success(data, MessageConstants.Login.SUCCESS); } } else { diff --git a/src/main/java/go/kr/project/main/controller/MainController.java b/src/main/java/go/kr/project/main/controller/MainController.java index ef14295..9d6c4fe 100644 --- a/src/main/java/go/kr/project/main/controller/MainController.java +++ b/src/main/java/go/kr/project/main/controller/MainController.java @@ -32,15 +32,6 @@ import javax.servlet.http.HttpServletRequest; @Tag(name = "메인 페이지", description = "메인 페이지 관련 API") public class MainController { - @Operation(summary = "메인 페이지 조회", description = "메인 페이지를 조회합니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메인 페이지 조회 성공") - }) - @GetMapping(value = "/main.do") - public String mainPage(Model model, HttpServletRequest request) { - return "main/main"+ TilesConstants.BASE; - } - /** * 루트 URL 접근 시 메인 페이지로 이동 * @param model 모델 @@ -49,11 +40,21 @@ public class MainController { */ @Operation(summary = "인덱스 페이지 조회", description = "루트 URL 접근 시 메인 페이지를 조회합니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "인덱스 페이지 조회 성공") + @ApiResponse(responseCode = "200", description = "인덱스 페이지 조회 성공") }) @GetMapping(value = "/") public String index(Model model, HttpServletRequest request) { return "index"; } + + @Operation(summary = "메인 페이지 조회", description = "메인 페이지를 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메인 페이지 조회 성공") + }) + @GetMapping(value = "/main.do") + public String mainPage(Model model, HttpServletRequest request) { + return "main/main"+ TilesConstants.BASE; + } + } diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnImpltTaskMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnImpltTaskMapper_maria.xml index cd6d77b..5bc242f 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnImpltTaskMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnImpltTaskMapper_maria.xml @@ -210,7 +210,7 @@ aio.ACT_TYPE_CD, act.CD_NM AS ACT_TYPE_CD_NM FROM tb_act_info aio - inner JOIN tb_ownr_info oi ON aio.CRDN_YR = oi.CRDN_YR AND aio.CRDN_NO = oi.CRDN_NO AND aio.DEL_YN = 'N' + inner JOIN tb_ownr_info oi ON aio.CRDN_YR = oi.CRDN_YR AND aio.CRDN_NO = oi.CRDN_NO AND oi.DEL_YN = 'N' INNER JOIN tb_ownr o ON o.OWNR_ID = oi.OWNR_ID AND o.DEL_YN = 'N' LEFT JOIN tb_cd_detail impltTrprSe ON impltTrprSe.CD_GROUP_ID = 'IMPLT_TRPR_SE_CD' AND impltTrprSe.CD_ID = '1' LEFT JOIN tb_cd_detail act ON act.CD_GROUP_ID = 'ACT_TYPE_CD' AND act.CD_ID = aio.ACT_TYPE_CD @@ -237,7 +237,7 @@ aio.ACT_TYPE_CD, act.CD_NM AS ACT_TYPE_CD_NM FROM tb_act_info aio - INNER JOIN tb_actr_info ai ON ai.ACT_INFO_ID = aio.ACT_INFO_ID AND aio.DEL_YN = 'N' + INNER JOIN tb_actr_info ai ON ai.ACT_INFO_ID = aio.ACT_INFO_ID AND ai.DEL_YN = 'N' INNER JOIN tb_ownr o ON o.OWNR_ID = ai.OWNR_ID AND o.DEL_YN = 'N' LEFT JOIN tb_cd_detail impltTrprSe ON impltTrprSe.CD_GROUP_ID = 'IMPLT_TRPR_SE_CD' AND impltTrprSe.CD_ID = '2' LEFT JOIN tb_cd_detail act ON act.CD_GROUP_ID = 'ACT_TYPE_CD' AND act.CD_ID = aio.ACT_TYPE_CD diff --git a/src/main/webapp/WEB-INF/views/index.jsp b/src/main/webapp/WEB-INF/views/index.jsp index 94dd2f2..f62883e 100644 --- a/src/main/webapp/WEB-INF/views/index.jsp +++ b/src/main/webapp/WEB-INF/views/index.jsp @@ -1,10 +1,51 @@ <%@ page import="go.kr.project.login.model.SessionVO" %> +<%@ page import="go.kr.project.system.menu.model.MenuVO" %> +<%@ page import="java.util.List" %> +<%@ page import="egovframework.filter.XssUtil" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + +<%! + /** + * 메뉴 목록을 재귀적으로 탐색하여 첫 번째 유효한 URL을 찾습니다. + * @param menus 메뉴 목록 + * @return 찾은 첫 번째 URL, 없으면 null + */ + public String findFirstUrl(List menus) { + if (menus == null) { + return null; + } + for (MenuVO menu : menus) { + // 현재 메뉴에 URL이 있으면 바로 반환 + String menuUrl = menu.getMenuUrl(); + if (menuUrl != null && !menuUrl.trim().isEmpty()) { + return menuUrl; + } + // 자식 메뉴가 있으면 재귀적으로 탐색 + if (menu.getChildren() != null && !menu.getChildren().isEmpty()) { + String childUrl = findFirstUrl(menu.getChildren()); + if (childUrl != null) { + return childUrl; + } + } + } + return null; + } +%> <% if( session.getAttribute("sessionVO") == null || !((SessionVO) session.getAttribute("sessionVO")).isLogin()){ response.sendRedirect("/login/login.do"); }else{ - response.sendRedirect("/main.do"); + SessionVO svo = (SessionVO)session.getAttribute("sessionVO"); + List menus = svo.getMenus(); + String firstUrl = "/main.do"; // fallback + + if(menus != null && !menus.isEmpty()){ + String foundUrl = findFirstUrl(menus); + if (foundUrl != null) { + firstUrl = new XssUtil().unescape(foundUrl); + } + } + response.sendRedirect(firstUrl); } %> \ No newline at end of file