package itn.let.sec.rmt.web; import java.io.OutputStream; import java.text.SimpleDateFormat; 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 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.Model; 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.bind.support.SessionStatus; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.support.RequestContextUtils; import org.springmodules.validation.commons.DefaultBeanValidator; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.util.EgovDoubleSubmitHelper; import itn.com.cmm.util.RedirectUrlMaker; import itn.let.sec.ram.service.AuthorManageVO; import itn.let.sec.ram.service.EgovAuthorManageService; import itn.let.sec.rmt.service.EgovRoleManageService; import itn.let.sec.rmt.service.RoleManage; import itn.let.sec.rmt.service.RoleManageVO; import itn.let.uss.umt.service.UserDefaultVO; /** * 롤관리에 관한 controller 클래스를 정의한다. * @author 공통서비스 개발팀 이문준 * @since 2009.06.01 * @version 1.0 * @see * *
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2009.03.11  이문준          최초 생성
 *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 * 
*/ @Controller public class EgovRoleManageController { @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; @Resource(name = "egovRoleManageService") private EgovRoleManageService egovRoleManageService; @Resource(name = "EgovCmmUseService") EgovCmmUseService egovCmmUseService; @Resource(name = "egovAuthorManageService") private EgovAuthorManageService egovAuthorManageService; /** EgovPropertyService */ @Resource(name = "propertiesService") protected EgovPropertyService propertiesService; /** Message ID Generation */ @Resource(name="egovRoleIdGnrService") private EgovIdGnrService egovRoleIdGnrService; @Autowired private DefaultBeanValidator beanValidator; //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} private String[][] roleExcelValue ={ {"0", "번호" , "1" , "" }, {"1", "롤ID" , "WEB_ROLE" , ""}, {"2", "롤명" , "itn-cop-bbs", ""}, {"3", "롤패턴" , "/itn/web/cop/bbs/.*.do.*", ""}, {"4", "롤타입" , "URL", ""}, {"5", "롤순서" , "1", "(숫자)"}, {"6", "롤설명" , "게시판", ""}, {"7", "등록일자" , "2019-06-17", "(날짜형식)"} } ; /** * 롤 목록화면 이동 * @return String * @exception Exception */ @RequestMapping("/sec/rmt/EgovRoleListView.do") public String selectRoleListView() throws Exception { return "/sec/rmt/EgovRoleManage"; } /** * 등록된 롤 정보 목록 조회 * @param roleManageVO RoleManageVO * @return String * @exception Exception */ @RequestMapping(value="/sec/rmt/EgovRoleList.do") public String selectRoleList(@ModelAttribute("roleManageVO") RoleManageVO roleManageVO, HttpServletRequest request, ModelMap model) throws Exception { if(roleManageVO.getPageUnit() != 10) { roleManageVO.setPageUnit(roleManageVO.getPageUnit()); } Map flashMap =RequestContextUtils.getInputFlashMap(request); if(flashMap!=null && flashMap.get("roleManageVO") != null) { roleManageVO = (RoleManageVO)flashMap.get("roleManageVO"); model.addAttribute("roleManageVO", roleManageVO); } /** paging */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(roleManageVO.getPageIndex()); paginationInfo.setRecordCountPerPage(roleManageVO.getPageUnit()); paginationInfo.setPageSize(roleManageVO.getPageSize()); roleManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); roleManageVO.setLastIndex(paginationInfo.getLastRecordIndex()); roleManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); if("".equals(roleManageVO.getSearchSortCnd())){ //최초조회시 최신것 조회List roleManageVO.setSearchSortCnd("SORT_TEMP_NO"); roleManageVO.setSearchSortOrd("desc"); }else { if("ROLE_SORT".equals(roleManageVO.getSearchSortCnd())) { roleManageVO.setSearchSortCnd("CAST(ROLE_SORT AS UNSIGNED)"); //string to int cast } } roleManageVO.setRoleManageList(egovRoleManageService.selectRoleList(roleManageVO)); if("CAST(ROLE_SORT AS UNSIGNED)".equals(roleManageVO.getSearchSortCnd())) { roleManageVO.setSearchSortCnd("ROLE_SORT"); //string to int cast } model.addAttribute("roleList", roleManageVO.getRoleManageList()); int totCnt = egovRoleManageService.selectRoleListTotCnt(roleManageVO); paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); return "/sec/rmt/EgovRoleManage"; } /** * 등록된 롤 정보 조회 * @param roleCode String * @param roleManageVO RoleManageVO * @param authorManageVO AuthorManageVO * @return String * @exception Exception */ @RequestMapping(value="/sec/rmt/EgovRole.do") public String selectRole(@RequestParam("roleCode") String roleCode, @ModelAttribute("roleManageVO") RoleManageVO roleManageVO, @ModelAttribute("authorManageVO") AuthorManageVO authorManageVO, ModelMap model) throws Exception { roleManageVO.setRoleCode(roleCode); authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorAllList(authorManageVO)); model.addAttribute("roleManage", egovRoleManageService.selectRole(roleManageVO)); model.addAttribute("authorManageList", authorManageVO.getAuthorManageList()); model.addAttribute("cmmCodeDetailList", getCmmCodeDetailList(new ComDefaultCodeVO(),"COM029")); return "/sec/rmt/EgovRoleUpdate"; } /** * 롤 등록화면 이동 * @param authorManageVO AuthorManageVO * @return String * @exception Exception */ @RequestMapping("/sec/rmt/EgovRoleInsertView.do") public String insertRoleView(@ModelAttribute("authorManageVO") AuthorManageVO authorManageVO, ModelMap model) throws Exception { authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorAllList(authorManageVO)); model.addAttribute("authorManageList", authorManageVO.getAuthorManageList()); model.addAttribute("cmmCodeDetailList", getCmmCodeDetailList(new ComDefaultCodeVO(),"COM029")); return "/sec/rmt/EgovRoleInsert"; } /** * 공통코드 호출 * @param comDefaultCodeVO ComDefaultCodeVO * @param codeId String * @return List * @exception Exception */ public List getCmmCodeDetailList(ComDefaultCodeVO comDefaultCodeVO, String codeId) throws Exception { comDefaultCodeVO.setCodeId(codeId); return egovCmmUseService.selectCmmCodeDetail(comDefaultCodeVO); } /** * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 등록 * @param roleManage RoleManage * @param roleManageVO RoleManageVO * @return String * @exception Exception */ @RequestMapping(value="/sec/rmt/EgovRoleInsert.do") public String insertRole(@ModelAttribute("roleManage") RoleManage roleManage, @ModelAttribute("roleManageVO") RoleManageVO roleManageVO, BindingResult bindingResult, SessionStatus status, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { beanValidator.validate(roleManage, bindingResult); //validation 수행 if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) { return "forward:/sec/rmt/EgovRoleList.do"; } if (bindingResult.hasErrors()) { return "/sec/rmt/EgovRoleInsert"; } else { String roleTyp = roleManage.getRoleTyp(); if(roleTyp.equals("method")) roleTyp = "mtd"; else if(roleTyp.equals("pointcut")) roleTyp = "pct"; else roleTyp = "web"; roleManage.setRoleCode(roleTyp.concat("-").concat(egovRoleIdGnrService.getNextStringId())); roleManageVO.setRoleCode(roleManage.getRoleCode()); status.setComplete(); model.addAttribute("cmmCodeDetailList", getCmmCodeDetailList(new ComDefaultCodeVO(),"COM029")); model.addAttribute("message", egovMessageSource.getMessage("success.common.insert")); model.addAttribute("roleManage", egovRoleManageService.insertRole(roleManage, roleManageVO)); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sec/rmt/EgovRoleList.do"); return redirectUrlMaker.getRedirectUrl(); //return "/sec/rmt/EgovRoleUpdate"; } } /** * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 수정 * @param roleManage RoleManage * @param bindingResult BindingResult * @return String * @exception Exception */ @RequestMapping(value="/sec/rmt/EgovRoleUpdate.do") public String updateRole(@ModelAttribute("roleManageVO") RoleManageVO roleManageVO, BindingResult bindingResult, SessionStatus status, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) { return "redirect:/sec/rmt/EgovRoleList.do"; } beanValidator.validate(roleManageVO, bindingResult); //validation 수행 if (bindingResult.hasErrors()) { return "/sec/rmt/EgovRoleUpdate"; } else { egovRoleManageService.updateRole(roleManageVO); status.setComplete(); redirectAttributes.addFlashAttribute("roleManageVO", roleManageVO); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sec/rmt/EgovRoleList.do"); return redirectUrlMaker.getRedirectUrl(); } } /** * 불필요한 롤정보를 화면에 조회하여 데이터베이스에서 삭제 * @param roleManage RoleManage * @return String * @exception Exception */ @RequestMapping(value="/sec/rmt/EgovRoleDelete.do") public String deleteRole(@ModelAttribute("roleManageVO") RoleManageVO roleManageVO, SessionStatus status, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { egovRoleManageService.deleteRole(roleManageVO); status.setComplete(); //model.addAttribute("message", egovMessageSource.getMessage("success.common.delete")); redirectAttributes.addFlashAttribute("roleManageVO", roleManageVO); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sec/rmt/EgovRoleList.do"); return redirectUrlMaker.getRedirectUrl(); //return "forward:/sec/rmt/EgovRoleList.do"; } /** * 불필요한 그룹정보 목록을 화면에 조회하여 데이터베이스에서 삭제 * @param roleCodes String * @param roleManage RoleManage * @return String * @exception Exception */ @RequestMapping(value="/sec/rmt/EgovRoleListDelete.do") public String deleteRoleList(@RequestParam("roleCodes") String roleCodes, @ModelAttribute("roleManage") RoleManage roleManage, SessionStatus status, RedirectAttributes redirectAttributes, Model model) throws Exception { String [] strRoleCodes = roleCodes.split(";"); for(int i=0; i roleManageList = egovRoleManageService.selectRoleList(roleManageVO) ; { //화면 리스트 sheetTitle = "롤 리스트(화면)" ; //제목 Sheet sheet = wb.createSheet(sheetTitle); row = sheet.createRow(0); for(int i=0 ; i < roleExcelValue.length ; i++) { cell = row.createCell(i); cell.setCellStyle(style); cell.setCellValue(roleExcelValue[i][1]); } for(int i=0; i < roleManageList.size(); i++){ row = sheet.createRow(i+1); for(int j=0 ; j < roleExcelValue.length ; j++) { cell = row.createCell(j); cell.setCellStyle(style); if(j==0) cell.setCellValue(i+1); //번호 if(j==1) cell.setCellValue(roleManageList.get(i).getRoleCode()); //롤ID if(j==2) cell.setCellValue(roleManageList.get(i).getRoleNm()); //롤명 if(j==3) cell.setCellValue(roleManageList.get(i).getRolePtn()); //롤패턴 if(j==4) cell.setCellValue(roleManageList.get(i).getRoleTyp()); //롤타입 if(j==5) cell.setCellValue(roleManageList.get(i).getRoleSort()); //롤순서 if(j==6) cell.setCellValue(roleManageList.get(i).getRoleDc()); //롤설명 if(j==7) cell.setCellValue(roleManageList.get(i).getRoleCreatDe()); //등록일자 } } } { //DB리스트 sheetTitle = "롤 리스트(DB)" ; //제목 Sheet sheet = wb.createSheet(sheetTitle); row = sheet.createRow(0); for(int i=0 ; i < roleExcelValue.length-2 ; i++){ //아이디,등록일자 없어 -2 cell = row.createCell(i); cell.setCellStyle(style); if(i==0) { cell.setCellValue("롤ID"); }else{ //2번제 컬럼 부터 하나씩 앞으로 세팅 if(!"".equals(roleExcelValue[i+1][3])){ cell.setCellValue(roleExcelValue[i+1][1]+"\n"+roleExcelValue[i+1][3]); }else { cell.setCellValue(roleExcelValue[i+1][1]); } } } for(int i=0; i < roleManageList.size(); i++){ row = sheet.createRow(i+1); for(int j=0 ; j < roleExcelValue.length-2 ; j++) {//아이디 없어 -1 cell = row.createCell(j); cell.setCellStyle(style); if(j==0) cell.setCellValue(roleManageList.get(i).getRoleCode()); //롤ID if(j==1) cell.setCellValue(roleManageList.get(i).getRoleNm()); //롤명 if(j==2) cell.setCellValue(roleManageList.get(i).getRolePtn()); //롤패턴 if(j==3) cell.setCellValue(roleManageList.get(i).getRoleTyp()); //롤타입 if(j==4) cell.setCellValue(roleManageList.get(i).getRoleSort()); //롤순서 if(j==5) cell.setCellValue(roleManageList.get(i).getRoleDc()); //롤설명 //if(j==6) cell.setCellValue(roleManageList.get(i).getRoleCreatDe()); //등록일자 } } } 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) {} } } }