422 lines
14 KiB
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";
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|