package itn.let.uat.uap.web; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; 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.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springmodules.validation.commons.DefaultBeanValidator; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.util.RedirectUrlMaker; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.uat.uap.service.EgovLoginPolicyService; import itn.let.uat.uap.service.LoginPolicy; import itn.let.uat.uap.service.LoginPolicyVO; /** * 로그인정책에 대한 controller 클래스를 정의한다. * 로그인정책에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다. * 로그인정책의 조회기능은 목록조회, 상세조회로 구분된다. * @author 공통서비스개발팀 lee.m.j * @since 2009.08.03 * @version 1.0 * @see * *
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2009.08.03  lee.m.j        최초 생성
 *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 * 
*/ @Controller public class EgovLoginPolicyController { @Resource(name = "egovMessageSource") EgovMessageSource egovMessageSource; @Resource(name = "egovLoginPolicyService") EgovLoginPolicyService egovLoginPolicyService; @Resource(name = "IpGroupPolicyIdGnrService") private EgovIdGnrService idgenServicePolice; @Resource(name = "egovSiteManagerService") private EgovSiteManagerService egovSiteManagerService; @Autowired private DefaultBeanValidator beanValidator; //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} private String[][] loginPolicyExcelValue ={ {"0" ,"번호" , "1" , "" }, {"1", "사이트명" , "ITN" , "[코드]"}, {"2", "사용그룹" , "로컬아이피", ""}, {"3", "IP정보" , "192.168.0", ""}, {"4", "등록자" , "admin", "[코드]"}, {"5", "등록일" , "2018-11-28", "(날짜형식)"}, {"6", "수정자" , "admin4", ""}, {"7", "수정일" ,"2019-10-31", "(날짜형식)"} } ; /** * 로그인정책 목록 조회화면으로 이동한다. * @return String - 리턴 Url */ @RequestMapping("/uat/uap/selectLoginPolicyListView.do") public String selectLoginPolicyListView() throws Exception { return "/uat/uap/EgovLoginPolicyList"; } /** * 로그인정책 목록을 조회한다. * @param loginPolicyVO - 로그인정책 VO * @return String - 리턴 Url */ @RequestMapping("/uat/uap/selectLoginPolicyList.do") public String selectLoginPolicyList( @RequestParam Map commandMap , String[] adminAccessIp , @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO, ModelMap model) throws Exception { if(commandMap.get("adminAccessIpFlag") !=null && adminAccessIp.length != 0){ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); loginPolicyVO.setEmplyrId(user.getId()); for(String accessIp:adminAccessIp) { loginPolicyVO.setIpInfo(accessIp); egovLoginPolicyService.insertAdminLoginIp(loginPolicyVO) ; } } /** paging */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(loginPolicyVO.getPageIndex()); paginationInfo.setRecordCountPerPage(loginPolicyVO.getPageUnit()); paginationInfo.setPageSize(loginPolicyVO.getPageSize()); loginPolicyVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); loginPolicyVO.setLastIndex(paginationInfo.getLastRecordIndex()); loginPolicyVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); loginPolicyVO.setLoginPolicyList(egovLoginPolicyService.selectLoginPolicyList(loginPolicyVO)); model.addAttribute("loginPolicyList", loginPolicyVO.getLoginPolicyList()); int totCnt = egovLoginPolicyService.selectLoginPolicyListTotCnt(loginPolicyVO); paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); //model.addAttribute("message", egovMessageSource.getMessage("success.common.select")); /*관리자 접속 IP 정보 조회*/ LoginPolicyVO tempLoginPolicyVO = new LoginPolicyVO(); List adminLoginIpList = egovLoginPolicyService.selectAdminLoginIpList(tempLoginPolicyVO) ; model.addAttribute("adminLoginIpList", adminLoginIpList); return "/uat/uap/EgovLoginPolicyList"; } /** * 로그인정책 목록의 상세정보를 조회한다. * @param loginPolicyVO - 로그인정책 VO * @return String - 리턴 Url */ @RequestMapping("/uat/uap/getLoginPolicy.do") public String selectLoginPolicy(@RequestParam("emplyrId") String emplyrId, @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO, ModelMap model) throws Exception { loginPolicyVO.setEmplyrId(emplyrId); model.addAttribute("loginPolicy", egovLoginPolicyService.selectLoginPolicy(loginPolicyVO)); LoginPolicyVO vo = (LoginPolicyVO) model.get("loginPolicy"); if (vo.getRegYn().equals("N")){ return "/uat/uap/EgovLoginPolicyRegist"; }else{ return "/uat/uap/EgovLoginPolicyRegist"; //return "/uat/uap/EgovLoginPolicyUpdt"; } } /** * 로그인정책 정보 등록화면으로 이동한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/addLoginPolicyView.do") public String insertLoginPolicyView(@RequestParam("emplyrId") String emplyrId, @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO, ModelMap model) throws Exception { loginPolicyVO.setEmplyrId(emplyrId); model.addAttribute("loginPolicy", egovLoginPolicyService.selectLoginPolicy(loginPolicyVO)); model.addAttribute("message", egovMessageSource.getMessage("success.common.select")); return "/uat/uap/EgovLoginPolicyRegist"; } /** * 로그인정책 정보를 신규로 등록한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/addLoginPolicy.do") public String insertLoginPolicy(@ModelAttribute("loginPolicy") LoginPolicy loginPolicy, BindingResult bindingResult, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { beanValidator.validate(loginPolicy, bindingResult); //validation 수행 if (bindingResult.hasErrors()) { model.addAttribute("loginPolicyVO", loginPolicy); return "/uat/uap/EgovLoginPolicyRegist"; } else { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); loginPolicy.setUserId(user.getId()); egovLoginPolicyService.insertLoginPolicy(loginPolicy); model.addAttribute("message", egovMessageSource.getMessage("success.common.update")); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uat/uap/selectLoginPolicyList.do"); return redirectUrlMaker.getRedirectUrl(); //return "forward:/uat/uap/getLoginPolicy.do"; } } /** * 기 등록된 로그인정책 정보를 수정한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/updtLoginPolicy.do") public String updateLoginPolicy(@ModelAttribute("loginPolicy") LoginPolicy loginPolicy, BindingResult bindingResult, ModelMap model) throws Exception { beanValidator.validate(loginPolicy, bindingResult); //validation 수행 if (bindingResult.hasErrors()) { model.addAttribute("loginPolicyVO", loginPolicy); return "/uat/uap/EgovLoginPolicyUpdt"; } else { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); loginPolicy.setUserId(user.getId()); egovLoginPolicyService.updateLoginPolicy(loginPolicy); model.addAttribute("message", egovMessageSource.getMessage("success.common.update")); return "forward:/uat/uap/selectLoginPolicyList.do"; } } /** * 기 등록된 로그인정책 정보를 삭제한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/removeLoginPolicy.do") public String deleteLoginPolicy(@ModelAttribute("loginPolicy") LoginPolicy loginPolicy, ModelMap model) throws Exception { egovLoginPolicyService.deleteLoginPolicy(loginPolicy); model.addAttribute("message", egovMessageSource.getMessage("success.common.delete")); return "forward:/uat/uap/selectLoginPolicyList.do"; } /** * 로그인그룹 정책 목록을 조회한다. * @param loginPolicyVO - 로그인정책 VO * @return String - 리턴 Url */ @RequestMapping("/uat/uap/selectLoginGroupPolicyList.do") public String selectLoginGroupPolicyList( @RequestParam Map commandMap , String[] adminAccessIp , @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO, ModelMap model, HttpSession session) throws Exception { if(commandMap.get("adminAccessIpFlag") !=null && adminAccessIp.length != 0){ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); loginPolicyVO.setEmplyrId(user.getId()); for(String accessIp:adminAccessIp) { loginPolicyVO.setIpInfo(accessIp); egovLoginPolicyService.insertAdminLoginIp(loginPolicyVO) ; } } if(loginPolicyVO.getPageUnit() != 10) { loginPolicyVO.setPageUnit(loginPolicyVO.getPageUnit()); } /** paging */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(loginPolicyVO.getPageIndex()); paginationInfo.setRecordCountPerPage(loginPolicyVO.getPageUnit()); paginationInfo.setPageSize(loginPolicyVO.getPageSize()); loginPolicyVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); loginPolicyVO.setLastIndex(paginationInfo.getLastRecordIndex()); loginPolicyVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); List loginPolicyGroupList = new ArrayList(); LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); if("".equals(loginPolicyVO.getSearchSortCnd())){ //최초조회시 최신것 조회List loginPolicyVO.setSearchSortCnd("ipGroupId"); loginPolicyVO.setSearchSortOrd("desc"); } loginPolicyGroupList = egovLoginPolicyService.selectLoginGroupPolicyList(loginPolicyVO); model.addAttribute("loginPolicyList", loginPolicyGroupList); int totCnt = egovLoginPolicyService.selectLoginGroupPolicyListTotCnt(loginPolicyVO); paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); /*관리자 접속 IP 정보 조회*/ LoginPolicyVO tempLoginPolicyVO = new LoginPolicyVO(); List adminLoginIpList = egovLoginPolicyService.selectAdminLoginIpList(tempLoginPolicyVO) ; model.addAttribute("adminLoginIpList", adminLoginIpList); return "/uat/uap/EgovLoginGroupPolicyList"; } /** * 로그인정책 정보 등록화면으로 이동한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/addLoginGroupPolicyView.do") public String addLoginGroupPolicyView(@ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO, HttpSession session , ModelMap model) throws Exception { return "/uat/uap/EgovLoginGroupPolicyRegist"; } /** * 로그인정책 정보를 신규로 등록한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/addLoginGroupPolicy.do") public String insertLoginGroupPolicy(@ModelAttribute("loginPolicy") LoginPolicyVO loginPolicyVO, BindingResult bindingResult, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); String ipGroupId = idgenServicePolice.getNextStringId(); loginPolicyVO.setIpGroupId(ipGroupId); loginPolicyVO.setFrstRegisterId(user.getId()); if(null != user && !"super".equals(user.getSiteId())){ loginPolicyVO.setSiteId(user.getSiteId()); } egovLoginPolicyService.insertLoginGroupPolicy(loginPolicyVO); model.addAttribute("message", egovMessageSource.getMessage("success.common.update")); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uat/uap/selectLoginGroupPolicyList.do"); return redirectUrlMaker.getRedirectUrl(); //return "forward:/uat/uap/getLoginPolicy.do"; } /** * 기 등록된 로그인정책 정보를 삭제한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/ipGroupPolicyListDelete.do") public String deleteIpGroupPolicyList(@RequestParam("del") String[] del ,RedirectAttributes redirectAttributes, ModelMap model) throws Exception { for(String id:del) { egovLoginPolicyService.deleteGroupPolicy(id); } redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uat/uap/selectLoginGroupPolicyList.do"); return redirectUrlMaker.getRedirectUrl(); } /** * 로그인정책 목록의 상세정보를 조회한다. * @param loginPolicyVO - 로그인정책 VO * @return String - 리턴 Url */ @RequestMapping("/uat/uap/getLoginGroupPolicy.do") public String getLoginGroupPolicy(@RequestParam("ipGroupId") String ipGroupId, @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO, ModelMap model) throws Exception { loginPolicyVO.setIpGroupId(ipGroupId); loginPolicyVO = egovLoginPolicyService.selectLoginGroupPolicy(loginPolicyVO) ; model.addAttribute("loginPolicyVO", loginPolicyVO); return "/uat/uap/EgovLoginGroupPolicyRegist"; } /** * 기 등록된 로그인정책 정보를 수정한다. * @param loginPolicy - 로그인정책 model * @return String - 리턴 Url */ @RequestMapping("/uat/uap/loginGroupPolicyUpdate.do") public String updateLoginGroupPolicy(@ModelAttribute("loginPolicy") LoginPolicyVO loginPolicyVO, BindingResult bindingResult, ModelMap model) throws Exception { beanValidator.validate(loginPolicyVO, bindingResult); //validation 수행 if (bindingResult.hasErrors()) { model.addAttribute("loginPolicyVO", loginPolicyVO); return "/uat/uap/EgovLoginPolicyUpdt"; } else { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); loginPolicyVO.setIpGroupId(loginPolicyVO.getIpGroupId()); if(null != user && !"super".equals(user.getSiteId())){ loginPolicyVO.setSiteId(user.getSiteId()); } loginPolicyVO.setLastUpdusrId(user.getId()); egovLoginPolicyService.updateLoginGroupPolicy(loginPolicyVO); model.addAttribute("message", egovMessageSource.getMessage("success.common.update")); return "redirect:/uat/uap/selectLoginGroupPolicyList.do"; } } //리스트 엑셀 다운로드 @RequestMapping(value="/uat/uap/loginPolicyListExcelDownload.do") public void loginPolicyListExcelDownload(LoginPolicyVO loginPolicyVO, HttpServletRequest request, HttpServletResponse response , ModelMap model) throws Exception { loginPolicyVO.setRecordCountPerPage(100000); loginPolicyVO.setFirstIndex(0); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); if(null != loginVO && !"super".equals(loginVO.getSiteId())){ loginPolicyVO.setSiteId(loginVO.getSiteId()); } // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. SXSSFWorkbook wb = new SXSSFWorkbook(100); CellStyle style = wb.createCellStyle(); style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 style.setBorderLeft(CellStyle.BORDER_THIN); style.setBorderRight(CellStyle.BORDER_THIN); style.setBorderTop(CellStyle.BORDER_THIN); Font font = wb.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold Cell cell = null; Row row = null; String fileName ="관리자접근IP 리스트"; String sheetTitle = ""; try{ List loginPolicyList = egovLoginPolicyService.selectLoginGroupPolicyList(loginPolicyVO); { //화면 리스트 sheetTitle = "관리자접근IP 리스트(화면)" ; //제목 Sheet sheet = wb.createSheet(sheetTitle); row = sheet.createRow(0); for(int i=0 ; i < loginPolicyExcelValue.length ; i++) { cell = row.createCell(i); cell.setCellStyle(style); cell.setCellValue(loginPolicyExcelValue[i][1]); } for(int i=0; i < loginPolicyList.size(); i++){ row = sheet.createRow(i+1); for(int j=0 ; j < loginPolicyExcelValue.length ; j++) { cell = row.createCell(j); cell.setCellStyle(style); if(j==0) cell.setCellValue(i+1); //번호 if(j==1) cell.setCellValue( loginPolicyList.get(i).getSiteIdTxt()); //사이트명 if(j==2) cell.setCellValue( loginPolicyList.get(i).getIpDc()); //사용그룹 if(j==3) cell.setCellValue( loginPolicyList.get(i).getIpInfo()); //IP정보 if(j==4) cell.setCellValue( loginPolicyList.get(i).getFrstRegisterId()); //등록자 if(j==5) cell.setCellValue( loginPolicyList.get(i).getFrstRegistPnttm()); //등록일 if(j==6) cell.setCellValue( loginPolicyList.get(i).getLastUpdusrId()); //수정자 if(j==7) cell.setCellValue( loginPolicyList.get(i).getLastUpdtPnttm()); //수정일 } } } { //DB리스트 sheetTitle = "관리자접근IP 리스트(DB)" ; //제목 Sheet sheet = wb.createSheet(sheetTitle); row = sheet.createRow(0); /*for(int i=0 ; i < userExcelValue.length ; i++) {*/ for(int i=0 ; i < loginPolicyExcelValue.length-4 ; i++){ //아이디 없어 -1 cell = row.createCell(i); cell.setCellStyle(style); if(i==0) { cell.setCellValue("관리자 접근 아이디"); }else{ if(!"".equals(loginPolicyExcelValue[i][3])){ cell.setCellValue(loginPolicyExcelValue[i][1]+"\n"+loginPolicyExcelValue[i][3]); }else { cell.setCellValue(loginPolicyExcelValue[i][1]); } } } for(int i=0; i < loginPolicyList.size(); i++){ row = sheet.createRow(i+1); for(int j=0 ; j < loginPolicyExcelValue.length-4 ; j++) {//아이디 없어 -1 cell = row.createCell(j); cell.setCellStyle(style); if(j==0) cell.setCellValue( loginPolicyList.get(i).getIpGroupId()); //아이디 if(j==1) cell.setCellValue( loginPolicyList.get(i).getSiteId()); //사이트명 if(j==2) cell.setCellValue( loginPolicyList.get(i).getIpDc()); //사용그룹 if(j==3) cell.setCellValue( loginPolicyList.get(i).getIpInfo()); //IP정보 } } } response.setHeader("Set-Cookie", "fileDownload=true; path=/"); SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); Date currentTime = new Date (); String mTime = mSimpleDateFormat.format ( currentTime ); fileName = fileName+"("+mTime+")"; response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); wb.write(response.getOutputStream()); }catch(Exception e) { response.setHeader("Set-Cookie", "fileDownload=false; path=/"); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Content-Type","text/html; charset=utf-8"); OutputStream out = null; try { out = response.getOutputStream(); byte[] data = new String("fail..").getBytes(); out.write(data, 0, data.length); } catch(Exception ignore) { ignore.printStackTrace(); } finally { if(out != null) try { out.close(); } catch(Exception ignore) {} } }finally { // 디스크 적었던 임시파일을 제거합니다. wb.dispose(); try { wb.close(); } catch(Exception ignore) {} } } }