package com.urpsys.basefront.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.egovframe.rte.fdl.property.EgovPropertyService; import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.urpsys.basefront.common.egov.util.EgovStringUtil; import com.urpsys.basefront.common.util.CommonUtil; import com.urpsys.basefront.common.util.ConvertUtils; import com.urpsys.basefront.common.util.RestApiCallUtil; import com.urpsys.basefront.domain.MemberVO; import com.urpsys.basefront.domain.TokenInfo; import com.urpsys.itmsfront.sys.domain.PrsnlPortletCreateVO; import com.urpsys.itmsfront.sys.domain.PrsnlPortletManageVO; import kong.unirest.HttpResponse; import kong.unirest.JsonNode; import kong.unirest.Unirest; import kong.unirest.json.JSONObject; import lombok.extern.slf4j.Slf4j; /** * 메인처리 Controller * @author urp 인프라본부 나혁제 * @since 2025.01.03 * @version 1.0 * @see * *
 * << 개정이력(Modification Information) >>
 *
 *  수정일           수정자       수정내용
 *  ----------   --------   ---------------------------
 *  2025.01.03     나혁제       최초 생성
 *
 * 
* */ @Slf4j @Controller public class MainController { @Value("${custom.auth_server}") private String strAuthServer; // 인증서버 @Value("${custom.api_server}") private String strApiServer; // Api Server @Resource(name="RestApiCallUtil") private RestApiCallUtil restApiCallUtil; /** EgovPropertyService */ @Resource(name = "propertiesService") protected EgovPropertyService propertyService; // @Autowired // HtmlEmailUtil htmlEmailUtil; @Value("${custom.client}") private String strClient; // 납품고객 @RequestMapping(value={ "/", "/main/actionMain.do"}) public String actionMain(HttpServletRequest request , HttpServletResponse response , ModelMap model) { log.info(">>>>>>>>>>>>>>> /main/actionMain.do <<<<<<<<<<<<<<<"); // htmlEmailUtil.send("sydongeun21@urp-ai.co.kr", "잘해봅시다1", "잘해봅시다1"); HttpSession session = request.getSession(); log.info("tokenInfo1 세션값 체크 =>"+request.getSession().getAttribute("tokenInfo")); log.info("오류갑확인 =>"+request.getParameter("error")); String strError = request.getParameter("error"); if(strError==null) strError =""; // 세션체크 TokenInfo tokenInfo = (TokenInfo)request.getSession().getAttribute("tokenInfo"); log.info("tokenInfo=>{}", tokenInfo); String strReturnJsp = ""; // 로그인 처리 if(tokenInfo == null ) { log.info("여기서 확인해보자 =>"+strError); String strErrorMsg = ""; if(!strError.equals("")) { String[] srError = strError.split(":"); log.info("srError1 =>"+srError[0]); log.info("srError2 =>"+srError[1]); // 에러메세지 생성 if(srError[0].equals("-1")) { strErrorMsg = "고객님의 아이디는 5회 로그인 오류로 인해 잠금처리 되었습니다. 시스템 관리자에게 연락해 주세요."; } else if(srError[0].equals("-2")) { strErrorMsg = "아이디 혹은 비밀번호을 확인해주세요. 5회 로그인 오류인경우 아이디가 잠금처리가 됩니다."; } else if(srError[0].equals("-3")) { strErrorMsg = "아이디 혹은 비밀번호을 확인해주세요. 5회 로그인 오류인경우 아이디가 잠금처리가 됩니다."; } else if(srError[0].equals("-4")) { strErrorMsg = "사용자 정보는 존재하나 권한정보가 존재하지 않습니다. 시스템 관리자에게 연락해 주세요."; } else { strErrorMsg = ""; } } model.addAttribute("strErrorMsg", strErrorMsg); // 2025.12.04 한국투자공사 한국투자공사 로그인 화면 변경 if(strClient.equals("kic")) { strReturnJsp = "/main/LoginUsr_kic"; } else { strReturnJsp = "/main/LoginUsr"; } } else { // 메인 페이지 이동 strReturnJsp = "forward:/main/mainPage.do"; } log.info("<<<<<<<<<<<<<<< /main/actionMain.do >>>>>>>>>>>>>>>"); return strReturnJsp; } /** * 일반(스프링 시큐리티) 로그인을 처리한다 * @param vo - 아이디, 비밀번호가 담긴 LoginVO * @param request - 세션처리를 위한 HttpServletRequest * @return result - 로그인결과(세션정보) * @exception Exception */ @RequestMapping(value = "/main/actionSecurityLogin.do") public String actionSecurityLogin( HttpServletRequest request , HttpServletResponse response , ModelMap model) throws Exception { log.info(">>>>>>>>>>>>>>> /main/actionSecurityLogin.do <<<<<<<<<<<<<<<"); String strId = (String)request.getParameter("userId"); String strPassWord = (String)request.getParameter("password"); log.info("strId =>{}" , strId); log.info("strPassWord =>{}" , strPassWord); String strAuthUrl = strAuthServer+"/oauth/token"; HttpResponse resAuth = Unirest.post(strAuthUrl) .basicAuth("clientId", "secretKey") .queryString("grant_type", "password") .queryString("username", strId) .queryString("password", strPassWord) .asString(); String returnAuth = resAuth.getBody(); Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create(); // snakecase to camelcase TokenInfo tokenInfo = gson.fromJson(returnAuth, TokenInfo.class); String strReturnJsp = ""; // 오류 발생 if( (tokenInfo.getError_description() != null && !tokenInfo.getError_description().equals("")) || (tokenInfo.getError() != null && !tokenInfo.getError().equals("")) ) { strReturnJsp = "/main/LoginUsr"; } // 정상로그인 else { strReturnJsp = "forward:/main/mainPage.do"; // timeout 설정 request.getSession().setMaxInactiveInterval(60*60); // 세션처리1 request.getSession().setAttribute("tokenInfo", tokenInfo); } log.info("<<<<<<<<<<<<<<< /main/actionSecurityLogin.do >>>>>>>>>>>>>>>"); return strReturnJsp; } /** * 템플릿 메인 페이지 조회 * @return 메인페이지 정보 Map [key : 항목명] * * @param request * @param model * @exception Exception Exception */ @RequestMapping(value = "/main/mainPage.do") public String getMgtMainPage( HttpServletRequest request , ModelMap model) throws Exception { log.info(">>>>>>>>>>>>>>> /main/mainPage.do <<<<<<<<<<<<<<<"); MemberVO memberVo = (MemberVO)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); PrsnlPortletCreateVO prsnlPortletCreateVO = new PrsnlPortletCreateVO(); prsnlPortletCreateVO.setUserId(memberVo == null ? "" : EgovStringUtil.isNullToString(memberVo.getTokenInfo().getStrMEM_ID())); // Body Setting Start --------------------------------- Map bodyMap = ConvertUtils.convertToMap(prsnlPortletCreateVO); // Body Setting End --------------------------------- Map returnMap = restApiCallUtil.RestApiCall( bodyMap, "/potl/mainPortletPage.do"); List> resultList = (List>)returnMap.get("resultList"); int portletCnt=(int)returnMap.get("totCnt"); model.addAttribute("resultList" , resultList); model.addAttribute("portletCnt" , portletCnt); PrsnlPortletManageVO prsnlPortletManageVO = new PrsnlPortletManageVO(); // Body Setting Start ------------------------------- prsnlPortletManageVO.setPageUnit(propertyService.getInt("pageUnit")); prsnlPortletManageVO.setPageSize(propertyService.getInt("pageSize")); PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo (prsnlPortletManageVO.getPageIndex()); paginationInfo.setRecordCountPerPage(prsnlPortletManageVO.getPageUnit()); paginationInfo.setPageSize (prsnlPortletManageVO.getPageSize()); prsnlPortletManageVO.setFirstIndex (paginationInfo.getFirstRecordIndex()); prsnlPortletManageVO.setLastIndex (paginationInfo.getLastRecordIndex()); prsnlPortletManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); Map bodyMap2 = ConvertUtils.convertToMapAll(prsnlPortletManageVO); // Body Setting End --------------------------------- // RestApi Call Start --------------------------------- Map returnMap2 = restApiCallUtil.RestApiCall( bodyMap2, "/sys/selectPortletManageList.do"); // RestApi Call End ----------------------------------- List> resultList2 = (List>) returnMap2.get("resultList"); model.addAttribute("resultList2", resultList2); log.info("<<<<<<<<<<<<<<< /main/mainPage.do >>>>>>>>>>>>>>>"); return "uritms-tiles1/main/MainView"; } /** * 로그아웃 처리를 수행 * @author urp 인프라본부 나혁제 * 작성일 : 2025.01.24 */ @RequestMapping(value = "/main/logout.do") public String loout(HttpServletRequest request, HttpServletResponse response) throws Exception { log.info(">>>>>>>>>>>>>>> /main/logout.do <<<<<<<<<<<<<<<"); request.getSession().setAttribute("tokenInfo", null); request.logout(); log.info("<<<<<<<<<<<<<<< /main/logout.do >>>>>>>>>>>>>>>"); return "forward:/main/actionMain.do"; } /** * Header Page를 조회한다. * @param menuManageVO MenuManageVO * @return 출력페이지정보 "EgovIncHeader" * @exception Exception */ @RequestMapping(value="/main/EgovHeader.do") public String selectHeader( HttpServletRequest request , HttpServletResponse response , ModelMap model ) throws Exception { log.info(">>>>>>>>>>>>>>> /main/EgovHeader.do <<<<<<<<<<<<<<<"); // 세션체크 TokenInfo tokenInfo = (TokenInfo)request.getSession().getAttribute("tokenInfo"); // log.info("tokenInfo=>{}", tokenInfo); List> list_headmenu = (List>)request.getSession().getAttribute("list_headmenu"); List> list_menulist = (List>)request.getSession().getAttribute("list_menulist"); String strMainYn = CommonUtil.nvl(request.getParameter("main_view")); // 2025.04.25 나혁제 메인화면 여부 // if(tokenInfo != null && tokenInfo.getStrMEM_ID() != null && tokenInfo.getStrMEM_ID().equals("")) if( ( tokenInfo != null) && (list_headmenu==null || list_menulist==null) ) { Map headers = new HashMap<>(); headers.put("Content-Type", "application/json"); // log.info("tokenInfo.getAccess_token()=>{}", tokenInfo.getAccess_token()); // log.info("tokenInfo.getToken_type()=>{}", tokenInfo.getToken_type()); // headers.put("Authorization", "Bearer "+tokenInfo.getAccess_token()); headers.put("Authorization", tokenInfo.getToken_type()+" "+tokenInfo.getAccess_token()); Map body = new HashMap<>(); String strApiUrl = strApiServer+"/main/EgovHeader.do"; log.info("한번 봅시다. strApiUrl =>"+strApiUrl); // HttpResponse jsonResponse = Unirest.put("http://localhost:9012/main/EgovHeader.do") HttpResponse jsonResponse = Unirest.put(strApiUrl) .headers(headers) .body(body) .asJson(); JSONObject returnObj = jsonResponse.getBody().getObject(); JSONObject returnObjData = returnObj.getJSONObject("data"); Map returnMap = ConvertUtils.getMapFromJSONObject(returnObjData); // Map 변환처리 list_headmenu = (List>)returnMap.get("list_headmenu"); list_menulist = (List>)returnMap.get("list_menulist"); } request.getSession().setAttribute("list_headmenu", list_headmenu); request.getSession().setAttribute("list_menulist", list_menulist); // log.info("한번 봅시다. [{}]", list_menulist.toString()); model.addAttribute("list_headmenu", list_headmenu); model.addAttribute("list_menulist", list_menulist); model.addAttribute("strMainYn", strMainYn); log.info("<<<<<<<<<<<<<<< /main/EgovHeader.do >>>>>>>>>>>>>>>"); return "main/inc/IncHeader"; // 업무화면의 상단메뉴 화면 } /** * 좌측메뉴를 조회한다. * @param * @return 출력페이지정보 "EgovIncLeftmenu" * @exception Exception */ @RequestMapping(value="/main/EgovMenuLeft.do") public String selectMenuLeft(ModelMap model) throws Exception { log.info(">>>>>>>>>>>>>>> /main/EgovMenuLeft.do <<<<<<<<<<<<<<<"); model.addAttribute("lastLogoutDateTime", "로그아웃 타임: 2021-08-12 11:30"); log.info("<<<<<<<<<<<<<<< /main/EgovMenuLeft.do >>>>>>>>>>>>>>>"); return "main/inc/IncLeftmenu"; } /** * Footer Page를 조회한다. * @param * @return 출력페이지정보 "EgovIncFooter" * @exception Exception */ @RequestMapping(value="/main/EgovFooter.do") public String selectFooter(ModelMap model) throws Exception { log.info(">>>>>>>>>>>>>>> /main/EgovFooter.do <<<<<<<<<<<<<<<"); log.info("<<<<<<<<<<<<<<< /main/EgovFooter.do >>>>>>>>>>>>>>>"); return "main/inc/IncFooter"; } }