itsm_ysm/src/main/java/com/urpsys/basefront/controller/MainController.java

422 lines
14 KiB
Java

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
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2025.01.03 나혁제 최초 생성
*
* </pre>
*
*/
@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<String> 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<String, Object> bodyMap = ConvertUtils.convertToMap(prsnlPortletCreateVO);
// Body Setting End ---------------------------------
Map<String, Object> returnMap = restApiCallUtil.RestApiCall( bodyMap, "/potl/mainPortletPage.do");
List<Map<String, Object>> resultList = (List<Map<String, Object>>)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<String, Object> bodyMap2 = ConvertUtils.convertToMapAll(prsnlPortletManageVO);
// Body Setting End ---------------------------------
// RestApi Call Start ---------------------------------
Map<String, Object> returnMap2 = restApiCallUtil.RestApiCall( bodyMap2, "/sys/selectPortletManageList.do");
// RestApi Call End -----------------------------------
List<Map<String, Object>> resultList2 = (List<Map<String, Object>>) 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<Map<String, Object>> list_headmenu = (List<Map<String, Object>>)request.getSession().getAttribute("list_headmenu");
List<Map<String, Object>> list_menulist = (List<Map<String, Object>>)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<String, String> 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<String, String> body = new HashMap<>();
String strApiUrl = strApiServer+"/main/EgovHeader.do";
log.info("한번 봅시다. strApiUrl =>"+strApiUrl);
// HttpResponse<JsonNode> jsonResponse = Unirest.put("http://localhost:9012/main/EgovHeader.do")
HttpResponse<JsonNode> jsonResponse = Unirest.put(strApiUrl)
.headers(headers)
.body(body)
.asJson();
JSONObject returnObj = jsonResponse.getBody().getObject();
JSONObject returnObjData = returnObj.getJSONObject("data");
Map<String, Object> returnMap = ConvertUtils.getMapFromJSONObject(returnObjData); // Map 변환처리
list_headmenu = (List<Map<String, Object>>)returnMap.get("list_headmenu");
list_menulist = (List<Map<String, Object>>)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";
}
}