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) {}
}
}
}