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