package itn.let.uat.uia.web; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.RSAPublicKeySpec; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Resource; import javax.crypto.Cipher; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.SavedRequest; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import NiceID.Check.CPClient; import egovframework.rte.fdl.cmmn.trace.LeaveaTrace; import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.captcha.CaptchaUtil; import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.EgovFileMngUtil; import itn.com.cmm.service.FileVO; import itn.com.cmm.util.StringUtil; import itn.com.cmm.util.WebUtil; import itn.com.uss.olh.hpc.service.HackIpService; import itn.com.uss.olh.hpc.service.HackIpVO; import itn.let.cert.ip.service.CertIpService; import itn.let.cert.ip.service.CertLoginLogService; import itn.let.cert.ip.service.MberCertIpVO; import itn.let.cert.ip.service.MberCertLoginLogVO; import itn.let.cert.phone.service.CertPhoneService; import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.cop.bbs.service.BoardVO; import itn.let.mjo.event.service.MjonEventService; import itn.let.mjo.event.service.MjonEventVO; import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; import itn.let.mjo.msgdata.web.MjonMsgDataController; import itn.let.mjo.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentVO; import itn.let.mjo.pay.service.KmcVO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.sym.grd.service.MberGrdService; import itn.let.sym.grd.service.MberGrdVO; import itn.let.sym.log.clg.service.EgovLoginLogService; import itn.let.sym.log.clg.service.LoginLog; import itn.let.sym.mnu.mpm.service.MenuManageJTreeVO; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; import itn.let.sym.site.service.SiteManagerVO; import itn.let.sym.site.service.TermsVO; import itn.let.uat.uap.service.EgovLoginPolicyService; import itn.let.uat.uap.service.LoginPolicyVO; import itn.let.uat.uia.service.AuthCertVO; import itn.let.uat.uia.service.EgovLoginService; import itn.let.uss.umt.service.EgovMberManageService; import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.MberManageConfigVO; import itn.let.uss.umt.service.MberManageVO; import itn.let.uss.umt.service.UserDefaultVO; import itn.let.uss.umt.service.UserGuestVO; import itn.let.uss.umt.service.UserManageVO; import itn.let.utl.fcc.service.EgovCryptoUtil; import itn.let.utl.fcc.service.EgovStringUtil; import itn.let.utl.sim.service.EgovClntInfo; import itn.let.utl.user.service.MjonNoticeSendUtil; import itn.let.utl.user.service.MjonSmsCertSendUtil; /** * 일반 로그인, 인증서 로그인을 처리하는 컨트롤러 클래스 * * @author 공통서비스 개발팀 박지욱 * @since 2009.03.06 * @version 1.0 * @see * *
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자          수정내용
 *  -------    --------    ---------------------------
 *  2009.03.06  박지욱          최초 생성
 *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 *      
*/ @Controller public class EgovLoginController { static String RSA_WEB_KEY = "_RSA_WEB_Key_"; // 개인키 session key static String RSA_INSTANCE = "RSA"; // rsa transformation /** 네이버 인증 관련 */ @Value("#{globalSettings['Globals.itn.naver.clentId']}") private String itnNaverClientId; @Value("#{globalSettings['Globals.itn.naver.clientSecret']}") private String itnNaverClientSecret; @Value("#{globalSettings['Globals.itn.naver.returnUrl']}") private String itnNaverReturnUrl; /** 카카오 인증 관련 */ @Value("#{globalSettings['Globals.itn.kakao.restApiKey']}") private String itnKakaoRestApiKey; @Value("#{globalSettings['Globals.itn.kakao.returnUrl']}") private String itnKakaoReturnUrl; /** EgovLoginService */ @Resource(name = "loginService") private EgovLoginService loginService; /** EgovMessageSource */ @Resource(name = "egovMessageSource") EgovMessageSource egovMessageSource; /** EgovLoginPolicyService */ @Resource(name = "egovLoginPolicyService") EgovLoginPolicyService egovLoginPolicyService; /** EgovPropertyService */ @Resource(name = "propertiesService") protected EgovPropertyService propertiesService; /** TRACE */ @Resource(name = "leaveaTrace") LeaveaTrace leaveaTrace; @Resource(name = "EgovLoginLogService") private EgovLoginLogService loginLogService; @Resource(name = "egovSiteManagerService") private EgovSiteManagerService egovSiteManagerService; /** userManageService */ @Resource(name = "userManageService") private EgovUserManageService userManageService; /** mberManageService */ @Resource(name = "mberManageService") private EgovMberManageService mberManageService; @Resource(name = "hackIpService") private HackIpService hackIpService; @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; @Resource(name = "EgovFileMngUtil") private EgovFileMngUtil fileUtil; @Resource(name = "EgovFileMngService") private EgovFileMngService fileMngService; @Resource(name = "mjonMsgService") private MjonMsgService mjonMsgService; @Resource(name = "MjonMsgDataService") private MjonMsgDataService mjonMsgDataService; @Resource(name = "egovCryptoUtil") EgovCryptoUtil egovCryptoUtil; @Resource(name = "MjonMsgSentService") private MjonMsgSentService mjonMsgSentService; /** 알림전송 Util */ @Resource(name = "mjonNoticeSendUtil") private MjonNoticeSendUtil mjonNoticeSendUtil; @Resource(name = "MjonSmsCertSendUtil") private MjonSmsCertSendUtil mjonSmsCertSendUtil; @Resource(name="MjonCommon") private MjonCommon mjonCommon; @Resource(name = "MjonEventService") private MjonEventService mjonEventService; @Resource(name = "mjonPayService") private MjonPayService mjonPayService; @Resource(name = "mberGrdService") MberGrdService mberGrdService; @Resource(name = "CertPhoneService") private CertPhoneService certPhoneService; @Resource(name = "CertLoginLogService") private CertLoginLogService certLoginLogService; @Resource(name = "CertIpService") private CertIpService certIpService; private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class); /* 문자온 사용자 로그인 시작 */ // 회원가입 1뎁스 - 개인/기업 선택 @RequestMapping(value = "/web/user/login/selectUserDept.do") public String selectUserDept(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/"; // B선라인 String blineCode = request.getParameter("blineCode"); if (blineCode != null && blineCode.length() != 0){ } else { blineCode = "N"; } model.addAttribute("blineCode", blineCode); return "web/login/usrSelectDept"; } // 회원가입 2뎁스 - 약관 동의 @RequestMapping(value = "/web/user/login/checkTerms.do") public String checkTerms(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes, @ModelAttribute("mberManageVO") MberManageVO mberManageVO, TermsVO termsVO, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/"; //URL을 이용한 비정상적인 접근 차단 if("".equals(mberManageVO.getDept()) || mberManageVO.getDept() == null) { redirectAttributes.addFlashAttribute("message", "잘못된 경로로 접속하여 메인화면으로 이동됩니다"); return "redirect:/web/main/mainPage.do"; } // 본인인증 방식 선택 정보 불러오기 JoinSettingVO joinSettingVO = egovSiteManagerService.selectJoinCertTypeDetail(); model.addAttribute("joinSettingVO", joinSettingVO); // 약관 사용메뉴 - 01:회원가입 termsVO.setMenuNm("01"); List termsList = new ArrayList(); termsList = egovSiteManagerService.selectTermsMenu(termsVO); model.addAttribute("termsList", termsList); // 나이스 본인인증 /* * String referer = (String) request.getHeader("REFERER"); * * URL newURL = new URL(referer); * * String protocol = newURL.getProtocol() + "://"; String host = * newURL.getHost(); * * String succUrl = protocol + host + "/web/user/login/niceCheckAjax.do"; // 성공시 * 이동할 URL - String failUrl = protocol + host + * "/web/user/login/selectUserDept.do"; * * mberManageVO.setNiceSuccUrl(succUrl); mberManageVO.setNiceFailUrl(failUrl); */ model.addAttribute("mberManageVO", mberManageVO); // KMC 본인인증 데이터 불러오기 // 핸드폰인증만 사용할 시 if (joinSettingVO.getJoinCertType().equals("M")) { KmcCertChecker kmcCertCheck = new KmcCertChecker(); // kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://219.240.88.15:8095"; }else if(request.getRequestURL().toString().contains("www.")){ serverNm = request.getScheme() + "://www.munjaon.co.kr"; } else { serverNm = request.getScheme() + "://munjaon.co.kr"; } AuthCertVO certVO = kmcCertCheck.authCertCheck(serverNm + "/web/cop/kmc/authRequestAjax.do"); model.addAttribute("tr_cert", certVO.getTr_cert()); model.addAttribute("tr_url", certVO.getTr_url()); model.addAttribute("tr_add", certVO.getTr_add()); } // B선라인 String blineCode = request.getParameter("blineCode"); if (blineCode != null && blineCode.length() != 0){ } else { blineCode = "N"; } model.addAttribute("blineCode", blineCode); return "web/login/usrCheckTerms"; } // 회원가입 - 정보 입력 후 KMC 팝업에 삽입 @RequestMapping(value = "/web/user/login/kmcPopupAjax.do") public ModelAndView kmcPopupAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, ModelMap model, HttpSession session, @RequestParam Map commandMap, HttpServletRequest request) throws Exception { System.out.println("++++++++++++ 세션체크 ::: " + (MberManageVO) session.getAttribute("mberSession")); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); KmcCertChecker kmcCertCheck = new KmcCertChecker(); // kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://219.240.88.15:8095"; } else { serverNm = request.getScheme() + "://www.munjaon.co.kr"; } AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do", mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(), mberManageVO.getNationality(), mberManageVO.getBirth()); System.out.println("++++++++++++ 세션체크222 ::: " + (MberManageVO) session.getAttribute("mberSession")); /* * model.addAttribute("tr_cert", certVO.getTr_cert()); * model.addAttribute("tr_url", certVO.getTr_url()); * model.addAttribute("tr_add", certVO.getTr_add()); */ modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); modelAndView.addObject("tr_add", certVO.getTr_add()); return modelAndView; } // 회원가입 3뎁스 - 정보입력 @RequestMapping(value = "/web/user/login/insertUsrView.do") public String insertUsrView(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("mberManageVO") MberManageVO mberManageVO, TermsVO termsVO, ModelMap model, HttpSession session, JoinSettingVO joinSettingVO, RedirectAttributes redirectAttributes) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/cmm/main/mainPage.do"; //URL을 이용한 비정상적인 접근 차단 if("".equals(mberManageVO.getDept()) || mberManageVO.getDept() == null || "".equals(mberManageVO.getMblDn()) || mberManageVO.getMblDn() == null) { redirectAttributes.addFlashAttribute("message", "잘못된 경로로 접속하여 메인화면으로 이동됩니다"); return "redirect:/web/main/mainPage.do"; } System.out.println("++++++++++++ 세션체크 ::: " + (MberManageVO) session.getAttribute("mberSession")); if (null == session.getAttribute("mberSession")) { // 세션이 없을 시 메인화면으로 팅김 redirectAttributes.addFlashAttribute("message", "쿠키 설정을 확인하세요."); return "redirect:/"; } // 이메일 코드조회 ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); voComCode.setCodeId("ITN031"); model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); // 방문경로 코드조회 voComCode.setCodeId("ITN025"); model.addAttribute("visitRoute", cmmUseService.selectCmmCodeDetail(voComCode)); // 기업유형 코드조회 voComCode.setCodeId("ITN033"); model.addAttribute("bizTypeCode", cmmUseService.selectCmmCodeDetail(voComCode)); // 본인인증 방식 선택 정보 불러오기 JoinSettingVO joinCertType = egovSiteManagerService.selectJoinCertTypeDetail(); String joinType = joinCertType.getJoinCertType(); model.addAttribute("joinType", joinType); // 본인인증 // 회원타입(개인,기업) 담아둔 세션 조회 session = request.getSession(); MberManageVO mberSessionVO = (MberManageVO) session.getAttribute("mberSession"); if (joinType.equals("M") || joinType.equals("A")) { // 크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 // samesite 보안을 none처리 /* * response.setHeader("Set-Cookie", * "AuthKmcCertVO=AuthKmcCertVO; Secure; SameSite=None"); //KMC 문자 본인인증 세션 정보 * 받아오기 AuthCertVO certKmcVO = (AuthCertVO) * session.getAttribute("AuthKmcCertVO"); * * if(certKmcVO != null) { * * mberManageVO.setNiceNm(certKmcVO.getCertName()); //본인인증 이름 * mberManageVO.setMoblphonNo(certKmcVO.getCertPhone()); //본인인증 핸드폰 * mberManageVO.setMblDn(certKmcVO.getCertDi()); //본인인증 중복가입방지 번호 * mberManageVO.setNationality(certKmcVO.getCertNation()); * mberManageVO.setBirthDay(certKmcVO.getBirthDay()); * mberManageVO.setSexdstnCode(certKmcVO.getSexdstnCode()); * * } */ } else { // ARS 전화 본인인증 세션 정보 받아오기 AuthCertVO certArsVO = (AuthCertVO) session.getAttribute("AuthARSCertVO"); if (certArsVO != null) { mberManageVO.setMoblphonNo(certArsVO.getCertPhone()); // 본인인증 핸드폰 } } model.addAttribute("mberSessionVO", mberSessionVO); // 나이스 본인인증을 했을때 세션처리 후 데이터 저장해주기. /* * MberManageVO VO = new MberManageVO(); if (null != * request.getSession().getAttribute("userSearchVO")) { // 세션체크 VO = * ((MberManageVO) request.getSession().getAttribute("userSearchVO")); * mberManageVO.setNiceNm(VO.getNiceNm()); // 이름 * mberManageVO.setSexdstnCode(VO.getSexdstnCode()); // 성별 * mberManageVO.setMoblphonNo(VO.getMoblphonNo()); // 핸드폰번호 * mberManageVO.setBirthDay(VO.getBirthDay()); // 생년월일 * mberManageVO.setMblDn(VO.getMblDn()); // 모바일 인증키 * session.removeAttribute("userSearchVO"); } */ model.addAttribute("mberManageVO", mberManageVO); // B선라인 String blineCode = request.getParameter("blineCode"); if (blineCode != null && blineCode.length() != 0){ } else { blineCode = "N"; } model.addAttribute("blineCode", blineCode); return "web/login/usrInsertView"; } // 회원가입 3뎁스 - 정보입력 - 2023-01-25 사업자등록번호 비교 방식 변경으로 추가함 @RequestMapping(value = "/web/user/login/new_insertUsrView.do") public String new_insertUsrView(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("mberManageVO") MberManageVO mberManageVO, TermsVO termsVO, ModelMap model, HttpSession session, JoinSettingVO joinSettingVO, RedirectAttributes redirectAttributes) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/cmm/main/mainPage.do"; //URL을 이용한 비정상적인 접근 차단 if("".equals(mberManageVO.getDept()) || mberManageVO.getDept() == null || "".equals(mberManageVO.getMblDn()) || mberManageVO.getMblDn() == null) { redirectAttributes.addFlashAttribute("message", "잘못된 경로로 접속하여 메인화면으로 이동됩니다"); return "redirect:/web/main/mainPage.do"; } System.out.println("++++++++++++ 세션체크 ::: " + (MberManageVO) session.getAttribute("mberSession")); if (null == session.getAttribute("mberSession")) { // 세션이 없을 시 메인화면으로 팅김 redirectAttributes.addFlashAttribute("message", "쿠키 설정을 확인하세요."); return "redirect:/"; } // 이메일 코드조회 ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); voComCode.setCodeId("ITN031"); model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); // 방문경로 코드조회 voComCode.setCodeId("ITN025"); model.addAttribute("visitRoute", cmmUseService.selectCmmCodeDetail(voComCode)); // 기업유형 코드조회 voComCode.setCodeId("ITN033"); model.addAttribute("bizTypeCode", cmmUseService.selectCmmCodeDetail(voComCode)); // 본인인증 방식 선택 정보 불러오기 JoinSettingVO joinCertType = egovSiteManagerService.selectJoinCertTypeDetail(); String joinType = joinCertType.getJoinCertType(); model.addAttribute("joinType", joinType); // 본인인증 // 회원타입(개인,기업) 담아둔 세션 조회 session = request.getSession(); MberManageVO mberSessionVO = (MberManageVO) session.getAttribute("mberSession"); if (joinType.equals("M") || joinType.equals("A")) { // 크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 // samesite 보안을 none처리 /* * response.setHeader("Set-Cookie", * "AuthKmcCertVO=AuthKmcCertVO; Secure; SameSite=None"); //KMC 문자 본인인증 세션 정보 * 받아오기 AuthCertVO certKmcVO = (AuthCertVO) * session.getAttribute("AuthKmcCertVO"); * * if(certKmcVO != null) { * * mberManageVO.setNiceNm(certKmcVO.getCertName()); //본인인증 이름 * mberManageVO.setMoblphonNo(certKmcVO.getCertPhone()); //본인인증 핸드폰 * mberManageVO.setMblDn(certKmcVO.getCertDi()); //본인인증 중복가입방지 번호 * mberManageVO.setNationality(certKmcVO.getCertNation()); * mberManageVO.setBirthDay(certKmcVO.getBirthDay()); * mberManageVO.setSexdstnCode(certKmcVO.getSexdstnCode()); * * } */ } else { // ARS 전화 본인인증 세션 정보 받아오기 AuthCertVO certArsVO = (AuthCertVO) session.getAttribute("AuthARSCertVO"); if (certArsVO != null) { mberManageVO.setMoblphonNo(certArsVO.getCertPhone()); // 본인인증 핸드폰 } } model.addAttribute("mberSessionVO", mberSessionVO); // 나이스 본인인증을 했을때 세션처리 후 데이터 저장해주기. /* * MberManageVO VO = new MberManageVO(); if (null != * request.getSession().getAttribute("userSearchVO")) { // 세션체크 VO = * ((MberManageVO) request.getSession().getAttribute("userSearchVO")); * mberManageVO.setNiceNm(VO.getNiceNm()); // 이름 * mberManageVO.setSexdstnCode(VO.getSexdstnCode()); // 성별 * mberManageVO.setMoblphonNo(VO.getMoblphonNo()); // 핸드폰번호 * mberManageVO.setBirthDay(VO.getBirthDay()); // 생년월일 * mberManageVO.setMblDn(VO.getMblDn()); // 모바일 인증키 * session.removeAttribute("userSearchVO"); } */ model.addAttribute("mberManageVO", mberManageVO); return "web/login/new_usrInsertView"; } // 회원가입 - 가입처리 @RequestMapping(value = "/web/user/login/usrJoinInsertAjax.do") public ModelAndView insertUsr(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map commandMap, HttpSession session, RedirectAttributes redirectAttributes, JoinSettingVO joinSettingVO, final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); //비밀번호 규칙성 검증 추가 - 취약점 조치 mberManageVO.setPassword(mberManageVO.getPassword().trim()); String passWord = mberManageVO.getPassword(); if(passWord.length() < 8 || passWord.length() > 20) { modelAndView.addObject("resultSts", "passWordFail"); return modelAndView; } Pattern digitPattern = Pattern.compile("[0-9]"); Matcher digitMatcher = digitPattern.matcher(passWord); boolean hasDigit = digitMatcher.find(); Pattern letterPattern = Pattern.compile("[a-zA-Z]"); Matcher letterMatcher = letterPattern.matcher(passWord); boolean hasLetter = letterMatcher.find(); Pattern specialPattern = Pattern.compile("[`~!@@#$%^&*|\\\\'\";:/?]"); Matcher specialMatcher = specialPattern.matcher(passWord); boolean hasSpecialCharacter = specialMatcher.find(); if(hasDigit == false || hasLetter == false || hasSpecialCharacter == false) { modelAndView.addObject("resultSts", "passWordFail"); return modelAndView; } // 사업자등록증 업로드 List result = null; String wAtchFileId = ""; //사업자등록증 첨부파일 ID String cAtchFileId = ""; //재직증명서 첨부파일 ID final Map files = multiRequest.getFileMap(); //다중 업로드 처리 Map fileC = new LinkedHashMap<>(); //사업자등록증 Map fileW = new LinkedHashMap<>(); //재직증명서 if (!files.isEmpty()) { Iterator> it = files.entrySet().iterator(); int cIndex = 0; int wIndex = 0; while(it.hasNext()) { Map.Entry entry = it.next(); MultipartFile mFile = entry.getValue(); if(entry.getKey().equals("file")) { //사업자등록증 - jsp에서 넘겨준 input type="file"의 name fileC.put("fileC" + cIndex, mFile); cIndex++; } if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name fileW.put("fileW" + wIndex, mFile); wIndex++; } } if(fileC != null) { // 사업자등록증 List resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", ""); wAtchFileId = fileMngService.insertFileInfs(resultC); mberManageVO.setAtchFileId(wAtchFileId); } if(fileW != null) { // 재직증명서 첨부파일 List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", ""); cAtchFileId = fileMngService.insertFileInfs(resultW); mberManageVO.setWorkAtchFileId(cAtchFileId); } } // 신규 회원 문자단가 기본 설정값 // 2021.05.21 기본값을 설정하지 않고, 단가가 다른 회원만 해당 값을 넣어줌. 문자 보낼 때 // 해당 필드가 비어있으면 기본단가 테이블에서 기본 가격을 가지고오기로 수정 // joinSettingVO = egovSiteManagerService.selectJoinSetting(); // mberManageVO.setShortPrice(joinSettingVO.getShortPrice()); // mberManageVO.setLongPrice(joinSettingVO.getLongPrice()); // mberManageVO.setPicturePrice(joinSettingVO.getPicturePrice()); // // 사업자등록 등록시 첨부파일ID 설정 // mberManageVO.setAtchFileId(atchFileId); int resultUsr = 0; try { String mberId = mberManageVO.getMberId(); String mberNm = mberManageVO.getMberNm(); // 내외국인 구분값이 없으면 내국인(0)으로 값 세팅 if (StringUtil.isEmpty(mberManageVO.getNationality())) { mberManageVO.setNationality("0"); } //아이디 소문자 변환 mberManageVO.setMberId(mberManageVO.getMberId().toLowerCase()); // 회원정보 디비 입력 resultUsr = mberManageService.insertUsr(mberManageVO); try { // 기업회원일 시 기업회원 정보 내역에 입력 if("c".equals(mberManageVO.getDept().trim())) { mberManageVO.setHstType("01"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드) mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드) mberManageService.insertCmpUsrHst(mberManageVO); } }catch(Exception ex) { System.out.println("#############################################################"); if (null != mberManageVO && null != mberManageVO.getMberId()) { System.out.println("회원가입 => 기업회원가입 아이디 : " + mberManageVO.getMberId()); } System.out.println("회원가입 => 기업회원가입 오류 : " + ex.getMessage()); ex.printStackTrace(); } // 본인인증 방식 선택 정보 불러오기 JoinSettingVO joinCertType = egovSiteManagerService.selectJoinCertTypeDetail(); String joinType = joinCertType.getJoinCertType(); // 본인인증 확인용 session = request.getSession(); // 회원 세션 정보 받아오기 // MberManageVO mberSessionVO = (MberManageVO) // session.getAttribute("mberSession"); if (joinType.equals("A")) { // 회원인증이 ARS 전화 + KMC 문자인증 둘다 하는경우 // ARS 본인인증 세션정보 받아오기 AuthCertVO certArsVO = (AuthCertVO) session.getAttribute("AuthARSCertVO"); // 회원 아이디/이름 저장하기 certArsVO.setMberId(mberId); certArsVO.setCertName(mberNm); // 디비 테이블에 저장하기 mberManageService.insertCertInfoLog(certArsVO); // 전화 인증 세션 삭제 session.removeAttribute("AuthARSCertVO"); //세션 이슈로 인한 세션 삭제, 로그는 본인인증 시 insert되며 로그 테이블 idx를 가져와 회원가입 시 로그 데이터의 mberId 업데이트 처리 // KMC 문자 본인인증 세션 정보 받아오기 // AuthCertVO certKmcVO = (AuthCertVO) session.getAttribute("AuthKmcCertVO"); // 회원아이디 저장하기 AuthCertVO certKmcVO = new AuthCertVO(); certKmcVO.setMberId(mberId); // 디비 테이블에 저장하기 mberManageService.insertCertInfoLog(certKmcVO); // 문자 인증 세션 삭제 // session.removeAttribute("AuthKmcCertVO"); } else if (joinType.equals("P")) { // 회원인증이 ARS 전화인증만 하는 경우 // ARS 본인인증 세션정보 받아오기 AuthCertVO certArsVO = (AuthCertVO) session.getAttribute("AuthARSCertVO"); // 회원 아이디/이름 저장하기 certArsVO.setMberId(mberId); certArsVO.setCertName(mberNm); // 디비 테이블에 저장하기 mberManageService.insertCertInfoLog(certArsVO); // 전화 인증 세션 삭제 session.removeAttribute("AuthARSCertVO"); } else { // 회원인증이 KMC 본인인증만 하는 경우 // KMC 문자 본인인증 세션 정보 받아오기 // AuthCertVO certKmcVO = (AuthCertVO) session.getAttribute("AuthKmcCertVO"); // 회원아이디 저장하기 //AuthCertVO certKmcVO = new AuthCertVO(); //certKmcVO.setMberId(mberId); // 디비 테이블에 저장하기 //mberManageService.insertCertInfoLog(certKmcVO); //세션 이슈로 인한 세션 삭제, 로그는 본인인증 시 insert되며 로그 테이블 idx를 가져와 회원가입 시 로그 데이터의 mberId 업데이트 처리 mberManageService.updateCertInfoLogMberId(mberManageVO); // 문자 인증 세션 삭제 // session.removeAttribute("AuthKmcCertVO"); } if (resultUsr > 0) { redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); model.addAttribute("resultSts", "success"); // CS관리자 이메일 & SMS 알림전송 if("p".equals(mberManageVO.getDept())){ //개인회원 }else{ //기업회원 // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO2 = new JoinSettingVO(); joinSettingVO2 = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 // 이메일 체크 if (joinSettingVO2 != null && joinSettingVO2.getEmailNoti().equals("Y")) { String emailTitle = "회원관리 > 기업회원 가입승인 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle); } // SMS 체크 if (joinSettingVO2 != null && joinSettingVO2.getSmsNoti().equals("Y")) { String smsTitle = "기업회원 가입승인 요청"; // CS관리자 SMS 알림전송 mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle); } // SLACK 체크 if (joinSettingVO2 != null && joinSettingVO2.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 기업회원 가입승인 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")"; mjonCommon.sendSimpleSlackMsg(msg); } } //회원가입 안내 문자 발송 MjonMsgVO mjonMsgVO = new MjonMsgVO(); String contents = ""; if("p".equals(mberManageVO.getDept())){ //개인회원 contents = "[문자온] "+mberManageVO.getMberNm()+"님의 회원가입을 진심으로 환영합니다."+System.lineSeparator()+"o 사이트 주소 : www.munjaon.co.kr"+System.lineSeparator()+"o 가입아이디 : "+mberManageVO.getMberId()+System.lineSeparator()+"인증전화번호 : "+mberManageVO.getMoblphonNo()+System.lineSeparator()+"※ 본인이 직접 가입하지 않은 경우 문자온 고객센터(1551-8011)로 즉시 연락주시기 바랍니다."+System.lineSeparator()+System.lineSeparator()+"감사합니다."; }else{ //기업회원 contents = "[문자온] "+mberManageVO.getMberNm()+"님의 회원가입을 진심으로 환영합니다."+System.lineSeparator()+"o 사이트 주소 : www.munjaon.co.kr"+System.lineSeparator()+"o 가입아이디 : "+mberManageVO.getMberId()+System.lineSeparator()+"인증전화번호 : "+mberManageVO.getMoblphonNo()+System.lineSeparator()+"※ 본인이 직접 가입하지 않은 경우 문자온 고객센터(1551-8011)로 즉시 연락주시기 바랍니다."+System.lineSeparator()+"※ 기업회원은 필수 제출서류 관리자 확인 후 최종 승인됩니다."+System.lineSeparator()+"감사합니다."; } // 문자타입별 대표전송사 정보 mjonMsgVO.setMsgDiv("L"); // 장문 MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 // 전송금액 mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 mjonMsgVO.setSmsTxt(contents); //문자 내용 mjonMsgVO.setReserveYn("N");//에약문자 N mjonMsgVO.setCallFrom("15518011");//발신번호 mjonMsgVO.setUserId("system"); //ID mjonMsgVO.setMsgType("6"); //MMS - 장문 mjonMsgVO.setBefCash("0.0"); //관리자가 발송하는 것이라서 0원으로 입력 //수신번호 배열 변환 작업 //mjonMsgVO.setCallTo(mberManageVO.getMoblphonNo()); String[] phone = new String[1]; phone[0] = mberManageVO.getMoblphonNo(); mjonMsgVO.setCallToList(phone); //문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅 mjonMsgVO.setMsgKind("S"); mjonMsgVO.setFileCnt("0");//첨부이미지 갯수 if(mjonMsgVO.getAgentCode().equals("03")) { //아이엠오 전송사 문자 타입 설정해 주기 // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 mjonMsgVO.setNeoType("2"); }else{ // 그림포함 문자인경우 mjonMsgVO.setNeoType("4"); } } //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 String userMoney = "0.0"; String userPoint = "0.0"; mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 mjonMsgVO.setBefCash("0.0"); //관리자가 발송하는 것이라서 0원으로 입력 MjonMsgReturnVO returnVO = mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO); //실제 전송 /*MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); //실제 전송*/ /*// 시스템 발송 로그 - insertAdmToMberMsgDataInfo에서 처리 SendLogVO sendLogVO = new SendLogVO(); // SendType 1:문자로 발송 2:이메일로 발송 sendLogVO.setSendId(returnVO.getMsgGroupId()); sendLogVO.setSendType("1"); sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); sendLogVO.setReceive(mjonMsgVO.getCallTo()); sendLogVO.setContents(contents); mjonMsgDataService.insertSysMsgLog(sendLogVO); */ } else { System.out.println("#############################################################"); System.out.println("회원가입 => 디비입력 내역없음"); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert")); model.addAttribute("resultSts", "fail"); } } catch (Exception e) { System.out.println("#############################################################"); if (null != mberManageVO && null != mberManageVO.getMberId()) { System.out.println("회원가입 아이디 : " + mberManageVO.getMberId()); } System.out.println("회원가입 오류 : " + e.getMessage()); redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert")); } // RedirectUrlMaker redirectUrlMaker = new // RedirectUrlMaker("/web/user/login/usrInsertCompl.do"); // return redirectUrlMaker.getRedirectUrl(); // return "web/login/usrInserCompl"; return modelAndView; } // 회원가입 - 중복ID 체크 Ajax @RequestMapping(value = "/web/user/login/usrIdCheckAjax.do") public ModelAndView selectUsrIdCheckAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, @RequestParam Map commandMap) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String mberId = (String) commandMap.get("mberId"); //소문자로 변환 mberId = mberId.toLowerCase(); List checkId = new ArrayList(); //회원가입시 특정 아이디 사용 못하도록 제한 - 시스템에서 사용하는 단어 입력 금지시킴 20220603 우영두 추가 if(mberId.contains("system") || mberId.contains("test") || mberId.contains("admin") || mberId.contains("user")) { checkId.add("1"); }else { checkId = mberManageService.selectIdCheck(mberId); } modelAndView.addObject("checkIdCnt", checkId.size()); return modelAndView; } // 회원가입 - 모바일인증 중복 체크 Ajax, 만 18세 체크 @RequestMapping(value = "/web/user/login/mblDnCheckAjax.do") public ModelAndView selectMblDnCheckAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, @RequestParam Map commandMap) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try{ //중복체크 String mblDn = (String) commandMap.get("mblDn"); List checkMblDn = new ArrayList(); checkMblDn = mberManageService.selectMblDnCheck(mblDn); modelAndView.addObject("checkMblDnCnt", checkMblDn.size()); //만 나이 String birthDay = (String) commandMap.get("birthDay"); LocalDate now = LocalDate.now(); LocalDate parsedBirthDate = LocalDate.parse(birthDay, DateTimeFormatter.ofPattern("yyyyMMdd")); int age = now.minusYears(parsedBirthDate.getYear()).getYear(); // (1) if (parsedBirthDate.plusYears(age).isAfter(now)) { age = age -1; } modelAndView.addObject("age", age); }catch(Exception ex){ ex.printStackTrace(); } return modelAndView; } // 회원가입 - 가입 완료 후 화면 @RequestMapping(value = "/web/user/login/usrJoinComplete.do") public String selectUserComplete(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, ModelMap model, HttpSession session) throws Exception { LoginVO loginVo = (LoginVO) session.getAttribute("LoginVO"); model.addAttribute("mberManageVO", loginVo); return "web/login/usrInserCompl"; } // 회원가입 - 가입 완료 후 화면 (기업회원) @RequestMapping(value = "/web/user/login/usrJoinMemShipComplete.do") public String selectUserMemberShipComplete(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, ModelMap model, HttpSession session) throws Exception { /*LoginVO loginVo = (LoginVO) session.getAttribute("LoginVO"); model.addAttribute("mberManageVO", loginVo);*/ return "web/login/usrInserMemShipCompl"; } /* *//** * (관리자)로그인 화면으로 들어간다 * * @param vo * - 로그인후 이동할 URL이 담긴 LoginVO * @return 로그인 페이지 * @exception Exception *//* * @RequestMapping(value = "/uat/uia/egovLoginUsr.do") public String * loginUsrView(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest * request, HttpServletResponse response, ModelMap model) throws Exception { * return "uat/uia/EgovLoginUsr"; } */ /** * (관리자) 로그인 화면. * * @return String * @exception Exception */ @RequestMapping(value = "/uat/uia/EgovLoginUsr.do") public String adminLogin(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/cmm/main/mainPage.do"; initRsa(request); return "uat/uia/EgovLoginUsr"; } /** * (사용자) 로그인 화면. * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/login/login.do") public String userLogin(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map commandMap, HttpSession session) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/"; // 로그인필요 URL 호출하여 온경우 String beforeUrl = (String) commandMap.get("beforeUrl"); String message = (String) commandMap.get("message"); String goEventPay = (String) commandMap.get("goEventPay"); // sns 회원가입 key 값 설정 String naverClientId = itnNaverClientId; String naverClientSecret = itnNaverClientSecret; String kakaoRestApiKey = itnKakaoRestApiKey; String kakaoReturnUrl = itnKakaoReturnUrl; // config 정보 가져오기 MberManageConfigVO mberConfigVO = new MberManageConfigVO(); List mberManageCnfVO = mberManageService.selectMberCnf(mberConfigVO); /*for (int i = 0; i < mberManageCnfVO.size(); i++) { if (mberManageCnfVO.get(i).getIsSns().equals("Y")) { if (mberManageCnfVO.get(i).getUseYn().equals("Y")) { if (mberManageCnfVO.get(i).getConfigId().equals("snsNaver")) { String redirectURI = URLEncoder.encode(itnNaverReturnUrl, "UTF-8"); SecureRandom random = new SecureRandom(); BigInteger state = new BigInteger(130, random); String naver_url = "https://nid.naver.com/oauth2.0/authorize?response_type=code"; naver_url += "&client_id=" + itnNaverClientId; naver_url += "&redirect_url=" + redirectURI; naver_url += "&state=" + state; mberManageCnfVO.get(i).setSiteUrl(naver_url); mberManageCnfVO.get(i).setSiteIcon("/img/login_naver_icon.png"); } else if (mberManageCnfVO.get(i).getConfigId().equals("snsKakao")) { String kakao_url = "https://kauth.kakao.com/oauth/authorize?response_type=code"; kakao_url += "&client_id=" + kakaoRestApiKey; kakao_url += "&redirect_uri=" + kakaoReturnUrl; mberManageCnfVO.get(i).setSiteUrl(kakao_url); mberManageCnfVO.get(i).setSiteIcon("/img/login_kakao_icon.png"); } else if (mberManageCnfVO.get(i).getConfigId().equals("snsGoogle")) { } } } }*/ model.addAttribute("mberManageCnfVO", mberManageCnfVO); model.addAttribute("beforeUrl", beforeUrl); model.addAttribute("message", message); initRsa(request); // 공인 IP 구하기 String userIp = EgovClntInfo.getClntIP(request); System.out.println("userIp :: "+userIp); // java.util.Scanner s = new java.util.Scanner(new // java.net.URL("https://api.ipify.org").openStream(), // "UTF-8").useDelimiter("\\A"); // userIp = s.next(); model.addAttribute("userIp", userIp); model.addAttribute("goEventPay", goEventPay); return "web/login/EgovLoginGnrlUsr"; } /** * (관리자) 일반(스프링 시큐리티) 로그인을 처리한다(관리자) * * @param vo * - 아이디, 비밀번호가 담긴 LoginVO * @param request * - 세션처리를 위한 HttpServletRequest * @return result - 로그인결과(세션정보) * @exception Exception */ @RequestMapping(value = "/uat/uia/actionSecurityLogin.do") public String selectActionSecurityLogin(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session) throws Exception { // Locale.setDefault(new Locale("en", "GB")); Locale.setDefault(new Locale("ko", "Kr")); // 로그인 정보 check if (loginVO.getId() == null || loginVO.getPassword() == null) { // 로그인 최초 화면 로딩 // RSA 키 생성 initRsa(request); return "uat/uia/EgovLoginUsr"; } /* * 미허용IP일 떄, 문자 인증을 하기위한 변수 * */ String authSelfId = loginVO.getId(); String authSelfPw = loginVO.getPassword2(); PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); if (privateKey == null) { initRsa(request); return "uat/uia/EgovLoginUsr"; } // 복호화 String id = ""; try { id = decryptRsa(privateKey, loginVO.getId()); } catch (Exception e) { initRsa(request); return "uat/uia/EgovLoginUsr"; } String password = decryptRsa(privateKey, loginVO.getPassword()); loginVO.setId(id); loginVO.setPassword(password); // 사용자일 경우 로그인 안되게 LoginVO loginInfo = loginService.getUserAuth(loginVO); String s_loginInfo_getAuthority = ""; try { s_loginInfo_getAuthority = loginInfo.getAuthority(); }catch(Exception ex) { System.out.println(ex.getMessage()); //ex.printStackTrace(); //System.out.println(ex.prin.printStackTrace()); } if (null == loginInfo) { // 아이디 없음. initRsa(request); model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); return "uat/uia/EgovLoginUsr"; } else { if ("ROLE_GNRL_USER".equals(loginInfo.getAuthority())) { // 일반사용자 로그인 initRsa(request); model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); return "uat/uia/EgovLoginUsr"; } } /* if (null == loginService.getUserAuth(loginVO)) { // 아이디 없음. initRsa(request); model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); return "uat/uia/EgovLoginUsr"; } else { if ("ROLE_GNRL_USER".equals(loginService.getUserAuth(loginVO).getAuthority())) { // 일반사용자 로그인 initRsa(request); model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); return "uat/uia/EgovLoginUsr"; } } */ // 1. 로그인 처리 LoginVO resultVO = loginService.actionLogin(loginVO); /* * 미허용 IP 인증번호 비교 flag * false : 인증번호 비교 결과 맞음 * true : 인증번호 비교 결과 틀림 * */ Boolean smsCertFlag = false; if(StringUtil.isNotEmpty(loginVO.getCheckNo()) && "Y".equals(resultVO.getOuterCertYn())) { //수신자 String callTo = resultVO.getMoblphonNo(); String checkNo = loginVO.getCheckNo(); String mberId = resultVO.getId(); /* * 인증번호 비교 * return * empty = "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요." * success = "5분이내 발송 내역 비교, 인증번호 비교 시 일치" * smsCertFlag = true * checkNoFail = "인증번호를 확인해 주세요" * timeOut = "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다." * Exception = "에러가 발생하였습니다. 다시 시도해 주세요. \\n 에러가 지속될 시 최고관리자에게 문의하세요."; * final = "exception"; * * 실패 시 passMiss 숫자++ update * loginService.updatePassMissPlus(loginVO); * * */ String result = mjonSmsCertSendUtil.mjonSmsCertCheck(callTo, checkNo, mberId); if(result.equals("empty")) { loginService.updatePassMissPlus(loginVO); model.addAttribute("message", "인증번호 발송 내역이 없습니다. 최고관리자에게 문의하세요."); initRsa(request); return "uat/uia/EgovLoginUsr"; } else if(result.equals("success")) { smsCertFlag = true; } else if(result.equals("checkNoFail")) { loginService.updatePassMissPlus(loginVO); model.addAttribute("message", "인증번호를 확인해 주세요"); model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요."); model.addAttribute("mode", "본인인증"); model.addAttribute("id", resultVO.getId()); model.addAttribute("password", authSelfPw); //인증문자 발송 mjonSmsCertSendUtil.mjonSmsCertSend(callTo); initRsa(request); return "uat/uia/EgovLoginUsr"; } else if(result.equals("timeOut")) { model.addAttribute("message", "인증번호 시간이 초과되었습니다. \\n 인증번호를 다시 발송합니다."); model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요."); model.addAttribute("mode", "본인인증"); model.addAttribute("id", resultVO.getId()); model.addAttribute("password", authSelfPw); //인증문자 발송 mjonSmsCertSendUtil.mjonSmsCertSend(callTo); initRsa(request); return "uat/uia/EgovLoginUsr"; } else if(result.equals("Exception")) { model.addAttribute("message", "에러가 발생하였습니다. 다시 시도해 주세요. \\\\n 에러가 지속될 시 최고관리자에게 문의하세요."); model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요."); model.addAttribute("mode", "본인인증"); model.addAttribute("id", resultVO.getId()); model.addAttribute("password", authSelfPw); //인증문자 발송 mjonSmsCertSendUtil.mjonSmsCertSend(callTo); initRsa(request); return "uat/uia/EgovLoginUsr"; } } if (null == resultVO.getId()) { // 로그인 실패 loginService.updatePassMissPlus(loginVO); model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); initRsa(request); return "uat/uia/EgovLoginUsr"; } else { if (resultVO.getPassMiss() > 5) { model.addAttribute("message", "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다."); initRsa(request); return "uat/uia/EgovLoginUsr"; } else { // 초기화 loginService.updatePassMissReset(loginVO); } } // 2. 허용IP조회 boolean loginPolicyYn = false; // String userIp = EgovClntInfo.getClntIP(request); // 방화벽 아이피 조회 HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest(); String userIp = req.getHeader("X-Forwarded-For") == null ? req.getHeader("X-Forwarded-For") : req.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim(); if (userIp == null) { userIp = req.getRemoteAddr(); } //TODO: 관리자 미허용 IP 테스트 구간입니다. // { // userIp = "211.211.211.211"; // System.out.println("--------userIp-------" + userIp + "-----------------"); // } boolean ipCheck = false; List loginPolicyGroupList = new ArrayList(); loginPolicyGroupList = egovLoginPolicyService.selectLoginGroupPolicyAll(); if (loginPolicyGroupList != null) { for (LoginPolicyVO tempPolicyVO : loginPolicyGroupList) { if (userIp.contains(tempPolicyVO.getIpInfo().trim())) { ipCheck = true; break; } } } // 관리자 SMS 인증번호가 틀렸을경우 or 인증번호 페이지에 가지 못햇을 경우 if(!smsCertFlag && "Y".equals(resultVO.getOuterCertYn())) { // 관리자 허용 IP에 없을 경우 if (!ipCheck) { // 관리자 아이디에 휴대폰 번호가 없을경우 if(StringUtil.isEmpty(resultVO.getMoblphonNo())){ model.addAttribute("message", "핸드폰 번호가 없습니다. 최고관리자에게 문의하세요."); } // 문자인증 입력 노출 else{ model.addAttribute("mode", "본인인증"); model.addAttribute("message_auth", "미허용 IP에서 접속하셨습니다. \\n등록 된 휴대폰 번호로 발송된 인증번호를 입력해주세요."); model.addAttribute("id", resultVO.getId()); model.addAttribute("password", authSelfPw); //수신자 String callTo = resultVO.getMoblphonNo(); //인증문자 발송 mjonSmsCertSendUtil.mjonSmsCertSend(callTo); } initRsa(request); return "uat/uia/EgovLoginUsr"; } } // resultVO.siteId 의 각 로그인 ip를 조회함 // if (resultVO != null && resultVO.getId() != null && // !resultVO.getId().equals("") && loginPolicyYn) { if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("")) { // 세션에다 ip 등록 resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils .getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act .getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher( request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); { // 관리자 로그인 log 저장 String uniqId = ""; String ip = ""; /* Authenticated */ LoginLog loginLog = new LoginLog(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated.booleanValue()) { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); uniqId = user.getUniqId(); ip = EgovClntInfo.getClntIP(request); loginLog.setSiteId(user.getSiteId()); HttpSession httpSession = request.getSession(true); { List siteManageList = new ArrayList(); SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setFirstIndex(0); siteManagerVO.setRecordCountPerPage(100); siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); httpSession.setAttribute("siteManageList", siteManageList); httpSession.setAttribute("adminId", user.getId()); httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 httpSession.setAttribute("esntlId", user.getPassword()); // 최근검색어 조회 후 세션에 넣어줌 /* * UserManageVO tempUserManageVO = new UserManageVO(); * tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO = * userManageService.selectRecentSearchWord(tempUserManageVO); * * List lisRecentSearch = new ArrayList(); if(null != * tempUserManageVO){ //ArrayList 로 세션 저장 * Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split("," * )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ; */ // 로그인 성공시 MJ_MEMBER_ADD 정보 세션에 넣음. resultVO.setPassword(""); // 패스워드 null로 세팅 resultVO.setUniqId(""); httpSession.setAttribute("UserInfo", resultVO); } } /* * loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip); * loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N"); * loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("A"); * loginLog.setDeviceType("P"); loginLog.setProgrmFileNm("adminLogin"); * loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog); */ } return "forward:/uat/uia/actionMain.do"; // 성공 시 페이지.. (redirect 불가) // 개인키 삭제 // session.removeAttribute(EgovLoginController.RSA_WEB_KEY); // return "blank"; // 성공 시 페이지.. (redirect 불가) } else { model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); initRsa(request); return "uat/uia/EgovLoginUsr"; } } /** * (사용자) 일반(스프링 시큐리티) 로그인을 처리한다 * * @param vo * - 아이디, 비밀번호가 담긴 LoginVO * @param request * - 세션처리를 위한 HttpServletRequest * @return result - 로그인결과(세션정보) * @exception Exception */ @RequestMapping(value = "/web/user/login/actionSecurityLogin_bak_00.do") public String selectActionSecurityLoginWeb_bak(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { String userIp = EgovClntInfo.getClntIP(request); HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setAccessIp(userIp); hackIpVO.setBlockYn("Y"); if (null != hackIpService.selectHackIpVO(hackIpVO)) { String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } /*ScriptEngineManager engine = new ScriptEngineManager();*/ loginVO.setUserSe("USR"); // 로그인 정보 check if (loginVO.getId() == null || loginVO.getPassword() == null) { // 회원가입 시 로그인 처리 LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); if (pLoginVO == null) { // RSA 키 생성 initRsa(request); /* return "redirect:/web/user/login/login.do"; */ return "redirect:/"; } else { loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword()); loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); loginVO.setMessage(pLoginVO.getMessage()); } } // 1. 일반 로그인 처리 PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); if (privateKey == null) { initRsa(request); /*return "web/site/login/EgovLoginGnrlUsr";*/ String message = "아이디와 비밀번호를 확인해주세요."; redirectAttributes.addFlashAttribute("message", message); System.out.println("======================================================"); System.out.println("= RSA privateKey is null ="); System.out.println("======================================================"); return "redirect:/web/main/mainPage.do"; } LoginVO resultVO; // 복호화 String id = ""; try { //아이디 복호화 후 소문자 변환 id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); } catch (Exception e) { initRsa(request); // return "redirect:/web/user/login/login.do"; if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return "redirect:/"; } String password = decryptRsa(privateKey, loginVO.getPassword()); loginVO.setId(id); loginVO.setIp(EgovClntInfo.getClntIP(request)); loginVO.setPassword(password); loginVO.setUserSe("GNR"); loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 //암호화 2번 방지를 위한 LoginVO 생성 LoginVO loginCmpChkVO = new LoginVO(); loginCmpChkVO.setId(id); loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); loginCmpChkVO.setPassword(password); loginCmpChkVO.setUserSe("GNR"); loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); if(null != cmpHstResultVO.getId()) { //기업회원 정보 마지막 내역 조회 MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); if(null != cmpChangeManageVO) { if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); //addFlashAttribute 일회성으로 인하여 membershipAttachDocBefore.do 이동 후 //membershipAttachDoc.do로 바로 submit하여 새로고침 시 정보 유지되게 끔 처리 return "redirect:/web/user/login/membershipAttachDocBefore.do"; } } } } //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 LoginVO loginSmiChkVO = new LoginVO(); loginSmiChkVO.setId(id); loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); loginSmiChkVO.setPassword(password); loginSmiChkVO.setUserSe("GNR"); loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); if(null != smiResultVO.getId()) { MberManageVO spamMberManageVO = new MberManageVO(); spamMberManageVO.setMberId(loginVO.getId()); MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); if(null != spamMemberInfoVO) { redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); return "redirect:/web/user/login/loginRestrictionUseBefore.do"; } } resultVO = loginService.actionLogin(loginVO); LoginVO passMissVO = loginService.selectPassMiss(loginVO); String alertMessage = ""; if (!"admin".equals(loginVO.getId())) { //아이디가 존재 if(passMissVO != null) { // 로그인 실패 ( if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { loginService.updatePassMissPlus(loginVO); alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } else { if (passMissVO.getPassMiss() >= 5) { alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; return goUserPassMissPage(redirectAttributes, loginVO, request, model, alertMessage); } /* * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); }else * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); } */ loginService.updatePassMissReset(loginVO); } } //아이디 미존재 else { alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } } /* 일시 : 2023.07.26 * 내용 : 로그인시 휴먼고객 redirect 기능 추가 * 작업자 : 원영현 과장 */ if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { return "redirect:/web/user/humanPage.do"; } boolean loginPolicyYn = true; // 접속IP // userIp = EgovClntInfo.getClntIP(request); // resultVO.siteId 의 각 로그인 ip를 조회함 if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { // 세션에다 ip 등록 resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); { // 관리자 로그인 log 저장 String uniqId = ""; String ip = ""; /* Authenticated */ LoginLog loginLog = new LoginLog(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated.booleanValue()) { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); uniqId = user.getUniqId(); ip = EgovClntInfo.getClntIP(request); HttpSession httpSession = request.getSession(true); { List siteManageList = new ArrayList(); SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setFirstIndex(0); siteManagerVO.setRecordCountPerPage(100); siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); httpSession.setAttribute("siteManageList", siteManageList); httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 httpSession.setAttribute("esntlId", user.getPassword()); // 최근검색어 조회 후 세션에 넣어줌 /* * UserManageVO tempUserManageVO = new UserManageVO(); * tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO = * userManageService.selectRecentSearchWord(tempUserManageVO); * * List lisRecentSearch = new ArrayList(); if(null != * tempUserManageVO){ //ArrayList 로 세션 저장 * Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split("," * )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ; */ } } /* * loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip); * loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N"); * loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("U"); //사용자 * loginLog.setDeviceType("P"); //PC loginLog.setProgrmFileNm("adminLogin"); * loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog); */ loginVO.getId(); loginVO.getIp(); loginVO.setMessage("로그인 성공되었습니다."); loginVO.setLoginYn("Y"); loginService.insertActionLoginLog(loginVO); } // 등급제 Start // 회원별 등급 적용 MberGrdVO mberGrdVO = new MberGrdVO(); mberGrdVO.setMberId(loginVO.getId()); mberGrdVO.setAmt("0"); mberGrdVO.setMoid(""); mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO); // End // 이벤트 결제 바로가기 로직 체크 Start String goEventPay = (String) commandMap.get("goEventPay"); System.out.println("goEventPay : " + goEventPay); if (null != goEventPay && goEventPay.equals("Y")) { // 이벤트 결제 바로가기 if (goEventPay(loginVO) == true) { loginVO.setBeforeUrl("/web/event/member/pay/PayView.do"); } } // End String beforeUrl = (String) commandMap.get("beforeUrl"); // 로그인 전 URL 호출 시 if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) { request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl()); // 회원가입 시 메세지 처리 if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) { request.getSession().setAttribute("registMessage", loginVO.getMessage()); } } // 개인키 삭제 // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. request.getSession().setAttribute("pageType", "web"); return "blank"; // 성공 시 페이지.. (redirect 불가) // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. // return "forward:/web/main/mainPage.do"; } else { String message = egovMessageSource.getMessage("fail.common.login"); redirectAttributes.addFlashAttribute("beforeUrl", loginVO.getBeforeUrl()); redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } } /** * @Method Name : selectUserSttusAjax * @작성일 : 2024. 3. 27. * @작성자 : WYH * @변경이력 : * @Method 설명 : 회원상태 조회 (Y:일반회원, B:이용정지 회원, N:탈퇴회원) */ /* @RequestMapping(value = { "/web/user/login/actionSecurityLoginAjax.do" }) public ModelAndView actionSecurityLoginAjax(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String p_id = ""; String p_pwd = ""; try { //id, pwd 로그인 하고 결과와 hp 번호를 돌려주면 됨 p_id = request.getParameter("id"); p_pwd = request.getParameter("password"); String userId = mjonMsgVO.getUserId(); String userSttus = userManageService.selectUserStatusInfoCheck(userId); modelAndView.addObject("status", "success"); modelAndView.addObject("userSttus", userSttus); } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증에 실패하였습니다."); } return modelAndView; } */ @RequestMapping(value = "/web/user/login/actionSecurityLoginBeforeHpAjax.do") public ModelAndView selectActionSecurityLoginWebBeforeHp(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String userIp = EgovClntInfo.getClntIP(request); HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setAccessIp(userIp); hackIpVO.setBlockYn("Y"); if (null != hackIpService.selectHackIpVO(hackIpVO)) { String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } /*ScriptEngineManager engine = new ScriptEngineManager();*/ loginVO.setUserSe("USR"); // 로그인 정보 check if (loginVO.getId() == null || loginVO.getPassword() == null) { // 회원가입 시 로그인 처리 LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); if (pLoginVO == null) { // RSA 키 생성 initRsa(request); /* return "redirect:/web/user/login/login.do"; */ //return "redirect:/"; String message = "로그인 실패했습니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } else { loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword()); loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); loginVO.setMessage(pLoginVO.getMessage()); } } // 1. 일반 로그인 처리 PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); if (privateKey == null) { initRsa(request); /*return "web/site/login/EgovLoginGnrlUsr";*/ String message = "아이디와 비밀번호를 확인해주세요."; redirectAttributes.addFlashAttribute("message", message); System.out.println("======================================================"); System.out.println("= RSA privateKey is null ="); System.out.println("======================================================"); modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } LoginVO resultVO; // 복호화 String id = ""; try { //아이디 복호화 후 소문자 변환 id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); } catch (Exception e) { initRsa(request); String message = "로그인 실패했습니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } String password = decryptRsa(privateKey, loginVO.getPassword()); loginVO.setId(id); loginVO.setIp(EgovClntInfo.getClntIP(request)); loginVO.setPassword(password); loginVO.setUserSe("GNR"); loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 //암호화 2번 방지를 위한 LoginVO 생성 LoginVO loginCmpChkVO = new LoginVO(); loginCmpChkVO.setId(id); loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); loginCmpChkVO.setPassword(password); loginCmpChkVO.setUserSe("GNR"); loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); if(null != cmpHstResultVO.getId()) { //기업회원 정보 마지막 내역 조회 MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); if(null != cmpChangeManageVO) { if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 String message = "기업회원 신청 또는 반려상태입니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } } } } //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 LoginVO loginSmiChkVO = new LoginVO(); loginSmiChkVO.setId(id); loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); loginSmiChkVO.setPassword(password); loginSmiChkVO.setUserSe("GNR"); loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); if(null != smiResultVO.getId()) { MberManageVO spamMberManageVO = new MberManageVO(); spamMberManageVO.setMberId(loginVO.getId()); MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); if(null != spamMemberInfoVO) { String message = "신청대기중인 상태입니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } } resultVO = loginService.actionLogin(loginVO); LoginVO passMissVO = loginService.selectPassMiss(loginVO); String alertMessage = ""; if (!"admin".equals(loginVO.getId())) { //아이디가 존재 if(passMissVO != null) { // 로그인 실패 ( if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { loginService.updatePassMissPlus(loginVO); alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { String message = "로그인 실패했습니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } String message = "로그인 실패했습니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } else { if (passMissVO.getPassMiss() >= 5) { //alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; String message = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } /* * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); }else * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); } */ loginService.updatePassMissReset(loginVO); } } //아이디 미존재 else { alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { String message = "로그인 실패했습니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } String message = "로그인 실패했습니다."; modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } } /* 일시 : 2023.07.26 * 내용 : 로그인시 휴먼고객 redirect 기능 추가 * 작업자 : 원영현 과장 */ if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { String message = "휴면계정입니다."; modelAndView.addObject("dormantYn", "Y"); modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", message); return modelAndView; } String message = "로그인 성공했습니다."; /* 일시 : 2024.11.18 * 내용 : 다중 인증번호 조회 * 작업자 : 이호영 */ List mberCertPhoneList = certPhoneService.selectMberCertPhoneList(resultVO.getId()); modelAndView.addObject("status", "success"); modelAndView.addObject("msg", message); modelAndView.addObject("data", resultVO); modelAndView.addObject("mberCertPhoneList", mberCertPhoneList); /* 일시 : 2024.11.21 * 내용 : 패스 인증 조회 * 작업자 : 이호영 */ String userId = loginVO.getId(); // lettngnrlmber TB에 secuLoginFlag 값이 Y면 인증 해야함 String secuLoginFlag = mberManageService.getSecuLoginFlag(userId); String passFlag = "Y"; if("Y".equals(secuLoginFlag)) { // lettngnrlmber TB에 secuLoginFlag 값이 Y면 // IP가 등록 되어 있는지 확인 // 있으면 2차인증 안함 // 없으면 2차인증 진행 MberCertIpVO mberCertIpVO = new MberCertIpVO(); mberCertIpVO.setCertIp(userIp); mberCertIpVO.setMberId(userId); // ip가 있으면 true if(!certIpService.checkCertIp(mberCertIpVO)) { passFlag = "N"; } } modelAndView.addObject("passFlag", passFlag); return modelAndView; } @RequestMapping(value = "/web/user/login/actionSecurityLogin_ori_00.do") public String selectActionSecurityLoginWeb(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { String userIp = EgovClntInfo.getClntIP(request); HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setAccessIp(userIp); hackIpVO.setBlockYn("Y"); if (null != hackIpService.selectHackIpVO(hackIpVO)) { String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } /*ScriptEngineManager engine = new ScriptEngineManager();*/ loginVO.setUserSe("USR"); // 로그인 정보 check if (loginVO.getId() == null || loginVO.getPassword() == null) { // 회원가입 시 로그인 처리 LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); if (pLoginVO == null) { // RSA 키 생성 initRsa(request); /* return "redirect:/web/user/login/login.do"; */ return "redirect:/"; } else { loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword()); loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); loginVO.setMessage(pLoginVO.getMessage()); } } // 1. 일반 로그인 처리 PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); if (privateKey == null) { initRsa(request); /*return "web/site/login/EgovLoginGnrlUsr";*/ String message = "아이디와 비밀번호를 확인해주세요."; redirectAttributes.addFlashAttribute("message", message); System.out.println("======================================================"); System.out.println("= RSA privateKey is null ="); System.out.println("======================================================"); return "redirect:/web/main/mainPage.do"; } LoginVO resultVO; // 복호화 String id = ""; try { //아이디 복호화 후 소문자 변환 id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); } catch (Exception e) { initRsa(request); // return "redirect:/web/user/login/login.do"; if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return "redirect:/"; } String password = decryptRsa(privateKey, loginVO.getPassword()); loginVO.setId(id); loginVO.setIp(EgovClntInfo.getClntIP(request)); loginVO.setPassword(password); loginVO.setUserSe("GNR"); loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 //암호화 2번 방지를 위한 LoginVO 생성 LoginVO loginCmpChkVO = new LoginVO(); loginCmpChkVO.setId(id); loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); loginCmpChkVO.setPassword(password); loginCmpChkVO.setUserSe("GNR"); loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); if(null != cmpHstResultVO.getId()) { //기업회원 정보 마지막 내역 조회 MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); if(null != cmpChangeManageVO) { if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); //addFlashAttribute 일회성으로 인하여 membershipAttachDocBefore.do 이동 후 //membershipAttachDoc.do로 바로 submit하여 새로고침 시 정보 유지되게 끔 처리 return "redirect:/web/user/login/membershipAttachDocBefore.do"; } } } } //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 LoginVO loginSmiChkVO = new LoginVO(); loginSmiChkVO.setId(id); loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); loginSmiChkVO.setPassword(password); loginSmiChkVO.setUserSe("GNR"); loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); if(null != smiResultVO.getId()) { MberManageVO spamMberManageVO = new MberManageVO(); spamMberManageVO.setMberId(loginVO.getId()); MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); if(null != spamMemberInfoVO) { redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); return "redirect:/web/user/login/loginRestrictionUseBefore.do"; } } resultVO = loginService.actionLogin(loginVO); LoginVO passMissVO = loginService.selectPassMiss(loginVO); String alertMessage = ""; if (!"admin".equals(loginVO.getId())) { //아이디가 존재 if(passMissVO != null) { // 로그인 실패 ( if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { loginService.updatePassMissPlus(loginVO); alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } else { if (passMissVO.getPassMiss() >= 5) { alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; return goUserPassMissPage(redirectAttributes, loginVO, request, model, alertMessage); } /* * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); }else * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); } */ loginService.updatePassMissReset(loginVO); } } //아이디 미존재 else { alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } } /* 일시 : 2023.07.26 * 내용 : 로그인시 휴먼고객 redirect 기능 추가 * 작업자 : 원영현 과장 */ if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { return "redirect:/web/user/humanPage.do"; } boolean loginPolicyYn = true; // 접속IP // userIp = EgovClntInfo.getClntIP(request); // resultVO.siteId 의 각 로그인 ip를 조회함 if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { // 세션에다 ip 등록 resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); { // 관리자 로그인 log 저장 String uniqId = ""; String ip = ""; /* Authenticated */ LoginLog loginLog = new LoginLog(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated.booleanValue()) { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); uniqId = user.getUniqId(); ip = EgovClntInfo.getClntIP(request); HttpSession httpSession = request.getSession(true); { List siteManageList = new ArrayList(); SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setFirstIndex(0); siteManagerVO.setRecordCountPerPage(100); siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); httpSession.setAttribute("siteManageList", siteManageList); httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 httpSession.setAttribute("esntlId", user.getPassword()); // 최근검색어 조회 후 세션에 넣어줌 /* * UserManageVO tempUserManageVO = new UserManageVO(); * tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO = * userManageService.selectRecentSearchWord(tempUserManageVO); * * List lisRecentSearch = new ArrayList(); if(null != * tempUserManageVO){ //ArrayList 로 세션 저장 * Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split("," * )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ; */ } } /* * loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip); * loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N"); * loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("U"); //사용자 * loginLog.setDeviceType("P"); //PC loginLog.setProgrmFileNm("adminLogin"); * loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog); */ loginVO.getId(); loginVO.getIp(); loginVO.setMessage("로그인 성공되었습니다."); loginVO.setLoginYn("Y"); loginService.insertActionLoginLog(loginVO); } // 등급제 Start // 회원별 등급 적용 MberGrdVO mberGrdVO = new MberGrdVO(); mberGrdVO.setMberId(loginVO.getId()); mberGrdVO.setAmt("0"); mberGrdVO.setMoid(""); mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO); // End // 이벤트 결제 바로가기 로직 체크 Start String goEventPay = (String) commandMap.get("goEventPay"); System.out.println("goEventPay : " + goEventPay); if (null != goEventPay && goEventPay.equals("Y")) { // 이벤트 결제 바로가기 if (goEventPay(loginVO) == true) { loginVO.setBeforeUrl("/web/event/member/pay/PayView.do"); } } // End String beforeUrl = (String) commandMap.get("beforeUrl"); // 로그인 전 URL 호출 시 if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) { request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl()); // 회원가입 시 메세지 처리 if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) { request.getSession().setAttribute("registMessage", loginVO.getMessage()); } } // 개인키 삭제 // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. request.getSession().setAttribute("pageType", "web"); return "blank"; // 성공 시 페이지.. (redirect 불가) // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. // return "forward:/web/main/mainPage.do"; } else { String message = egovMessageSource.getMessage("fail.common.login"); redirectAttributes.addFlashAttribute("beforeUrl", loginVO.getBeforeUrl()); redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } } @RequestMapping(value = "/web/user/login/actionSecurityLoginAfterHp.do") public String selectActionSecurityLoginWebAfterHp(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { String userIp = EgovClntInfo.getClntIP(request); HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setAccessIp(userIp); hackIpVO.setBlockYn("Y"); if (null != hackIpService.selectHackIpVO(hackIpVO)) { String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } /*ScriptEngineManager engine = new ScriptEngineManager();*/ loginVO.setUserSe("USR"); // 로그인 정보 check if (loginVO.getId() == null || loginVO.getPassword() == null) { // 회원가입 시 로그인 처리 LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); if (pLoginVO == null) { // RSA 키 생성 initRsa(request); /* return "redirect:/web/user/login/login.do"; */ return "redirect:/"; } else { loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword()); loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); loginVO.setMessage(pLoginVO.getMessage()); } } // 1. 일반 로그인 처리 PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovLoginController.RSA_WEB_KEY); if (privateKey == null) { initRsa(request); /*return "web/site/login/EgovLoginGnrlUsr";*/ String message = "아이디와 비밀번호를 확인해주세요."; redirectAttributes.addFlashAttribute("message", message); System.out.println("======================================================"); System.out.println("= RSA privateKey is null ="); System.out.println("======================================================"); return "redirect:/web/main/mainPage.do"; } LoginVO resultVO; // 복호화 String id = ""; try { //아이디 복호화 후 소문자 변환 id = decryptRsa(privateKey, loginVO.getId()).toLowerCase(); } catch (Exception e) { initRsa(request); // return "redirect:/web/user/login/login.do"; if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return "redirect:/"; } //핸드폰 인증번호 확인 String s_hp = request.getParameter("hp"); String s_num = request.getParameter("num"); System.out.println(s_hp); System.out.println(s_num); System.out.println("s_num=============="); SendLogVO sendLogVO = new SendLogVO(); sendLogVO.setSendId(id); sendLogVO.setReceive(s_hp); sendLogVO.setCheckNo(s_num); String passFlag = request.getParameter("passFlag"); System.out.println("passFlag : "+ passFlag); System.out.println("passFlag : "+ passFlag); System.out.println("passFlag : "+ passFlag); System.out.println("passFlag : "+ passFlag); System.out.println("passFlag : "+ passFlag); System.out.println("passFlag : "+ passFlag); if("Y".equals(passFlag)) { sendLogVO = mjonMsgDataService.selectSysMsgLogCheck(sendLogVO); if (sendLogVO==null) { redirectAttributes.addFlashAttribute("fail2", true); return "redirect:/web/user/login/login.do"; } } String password = decryptRsa(privateKey, loginVO.getPassword()); loginVO.setId(id); loginVO.setIp(EgovClntInfo.getClntIP(request)); loginVO.setPassword(password); loginVO.setUserSe("GNR"); loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 //기업회원 가입중인지 체크 - 기존 로그인 select는 MBER_STTUS = 'Y'가 하드코딩이라 로그인 전 기업회원 가입중인지 선 체크 //암호화 2번 방지를 위한 LoginVO 생성 LoginVO loginCmpChkVO = new LoginVO(); loginCmpChkVO.setId(id); loginCmpChkVO.setIp(EgovClntInfo.getClntIP(request)); loginCmpChkVO.setPassword(password); loginCmpChkVO.setUserSe("GNR"); loginCmpChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginCmpChkVO.setEmplyrSttusCode("A"); // 신청대기중인 사용자까지 조회 LoginVO cmpHstResultVO = loginService.actionLoginCmpChk(loginCmpChkVO); if(null != cmpHstResultVO.getId()) { //기업회원 정보 마지막 내역 조회 MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); if(null != cmpChangeManageVO) { if("01".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원 가입일 시 if("01".equals(cmpChangeManageVO.getHstSttus()) || "03".equals(cmpChangeManageVO.getHstSttus()) ) { //가장 마지막 기업회원 가입이 신청 또는 반려 상태일 시 redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); //addFlashAttribute 일회성으로 인하여 membershipAttachDocBefore.do 이동 후 //membershipAttachDoc.do로 바로 submit하여 새로고침 시 정보 유지되게 끔 처리 return "redirect:/web/user/login/membershipAttachDocBefore.do"; } } } } //스팸처리 회원인지 mj_spam_member_info 해당 ID의 최근 1개 데이터 조회 LoginVO loginSmiChkVO = new LoginVO(); loginSmiChkVO.setId(id); loginSmiChkVO.setIp(EgovClntInfo.getClntIP(request)); loginSmiChkVO.setPassword(password); loginSmiChkVO.setUserSe("GNR"); loginSmiChkVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 loginSmiChkVO.setEmplyrSttusCode("B"); // 신청대기중인 사용자까지 조회 LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO); if(null != smiResultVO.getId()) { MberManageVO spamMberManageVO = new MberManageVO(); spamMberManageVO.setMberId(loginVO.getId()); MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(spamMberManageVO); if(null != spamMemberInfoVO) { redirectAttributes.addFlashAttribute("mberId", loginVO.getId()); return "redirect:/web/user/login/loginRestrictionUseBefore.do"; } } resultVO = loginService.actionLogin(loginVO); LoginVO passMissVO = loginService.selectPassMiss(loginVO); String alertMessage = ""; if (!"admin".equals(loginVO.getId())) { //아이디가 존재 if(passMissVO != null) { // 로그인 실패 ( if (null == resultVO.getId() && passMissVO.getPassMiss() < 5 ) { loginService.updatePassMissPlus(loginVO); alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디는 있지만 비밀번호가 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp( EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } else { if (passMissVO.getPassMiss() >= 5) { alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 비밀번호를 재설정해주세요."; return goUserPassMissPage(redirectAttributes, loginVO, request, model, alertMessage); } /* * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); }else * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); } */ loginService.updatePassMissReset(loginVO); } } //아이디 미존재 else { alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록_아이디없고 비밀번호도 틀린상황 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } } /* 일시 : 2023.07.26 * 내용 : 로그인시 휴먼고객 redirect 기능 추가 * 작업자 : 원영현 과장 */ if(resultVO.getDormantYn().equals("Y") || resultVO.getDormantYn() == "Y") { return "redirect:/web/user/humanPage.do"; } boolean loginPolicyYn = true; // 접속IP // userIp = EgovClntInfo.getClntIP(request); // resultVO.siteId 의 각 로그인 ip를 조회함 if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { // 세션에다 ip 등록 resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); { // 관리자 로그인 log 저장 String uniqId = ""; String ip = ""; /* Authenticated */ LoginLog loginLog = new LoginLog(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated.booleanValue()) { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); uniqId = user.getUniqId(); ip = EgovClntInfo.getClntIP(request); HttpSession httpSession = request.getSession(true); { List siteManageList = new ArrayList(); SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setFirstIndex(0); siteManagerVO.setRecordCountPerPage(100); siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); httpSession.setAttribute("siteManageList", siteManageList); httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 httpSession.setAttribute("esntlId", user.getPassword()); // 최근검색어 조회 후 세션에 넣어줌 /* * UserManageVO tempUserManageVO = new UserManageVO(); * tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO = * userManageService.selectRecentSearchWord(tempUserManageVO); * * List lisRecentSearch = new ArrayList(); if(null != * tempUserManageVO){ //ArrayList 로 세션 저장 * Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split("," * )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ; */ } } /* * loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip); * loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N"); * loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("U"); //사용자 * loginLog.setDeviceType("P"); //PC loginLog.setProgrmFileNm("adminLogin"); * loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog); */ loginVO.getId(); loginVO.getIp(); loginVO.setMessage("로그인 성공되었습니다."); loginVO.setLoginYn("Y"); loginService.insertActionLoginLog(loginVO); // 인증 로그인 이력을 위한 insert MberCertLoginLogVO mberCertLoginLogVO = new MberCertLoginLogVO(); mberCertLoginLogVO.setLoginId(loginVO.getId()); mberCertLoginLogVO.setLoginIp(loginVO.getIp()); certLoginLogService.insertCertLoginLog(mberCertLoginLogVO, request); } // 등급제 Start // 회원별 등급 적용 MberGrdVO mberGrdVO = new MberGrdVO(); mberGrdVO.setMberId(loginVO.getId()); mberGrdVO.setAmt("0"); mberGrdVO.setMoid(""); mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO); // End // 이벤트 결제 바로가기 로직 체크 Start String goEventPay = (String) commandMap.get("goEventPay"); System.out.println("goEventPay : " + goEventPay); if (null != goEventPay && goEventPay.equals("Y")) { // 이벤트 결제 바로가기 if (goEventPay(loginVO) == true) { loginVO.setBeforeUrl("/web/event/member/pay/PayView.do"); } } // End String beforeUrl = (String) commandMap.get("beforeUrl"); // 로그인 전 URL 호출 시 if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) { request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl()); // 회원가입 시 메세지 처리 if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) { request.getSession().setAttribute("registMessage", loginVO.getMessage()); } } // 개인키 삭제 // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. request.getSession().setAttribute("pageType", "web"); return "blank"; // 성공 시 페이지.. (redirect 불가) // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. // return "forward:/web/main/mainPage.do"; } else { String message = egovMessageSource.getMessage("fail.common.login"); redirectAttributes.addFlashAttribute("beforeUrl", loginVO.getBeforeUrl()); redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } } // 이벤트 결제 바로가기 public boolean goEventPay(LoginVO loginVO) throws Exception { boolean goEventPay = false; MjonEventVO mjonEventVO = new MjonEventVO(); // 이벤트 컨텐츠 정보 불러오기 String bbsId = "BBSMSTR_000000000731"; //이벤트 게시판 번호 String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; BoardVO resultEvent = selectEventBoardInfo(bbsId, nttSj); if(resultEvent != null) {//이벤트 게시판의 이벤트 게시글 번호 셋팅 mjonEventVO.setEventNttId(Float.toString(resultEvent.getNttId())); // 회원 이름 조회 MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(loginVO.getId()); String mberNm = mberManageService.selectMberNmByMberId(mberManageVO); if (mberNm != null) { loginVO.setName(mberNm); } // Step 0. B선 전송사 이용고객 => 이벤트대상 제외처리 mberManageVO.setMberId(loginVO.getId()); String blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO); if (blineCode != null && blineCode.equals("N")) { // Step 1. 결제여부 체크(미결제 일때 이벤트 대상) int payCnt = mjonPayService.selectMemerPayCount(loginVO.getId()); if (payCnt == 0) { // Step 2. 이벤트 회원 정보 조회 MjonEventVO eventMberInfo = selectEventMsgMberDefaultInfo(mjonEventVO, resultEvent.getNttId(), bbsId, loginVO.getId(), loginVO.getName()); if(eventMberInfo == null) {//등록된 회원정보가 없으면 정보 입력 mjonEventVO.setEventStatus("N"); int resultCnt = mjonEventService.insertEventMsgMberDefaultInfo(mjonEventVO); if (resultCnt > 0) { goEventPay = true; } }else { //등록된 회원정보가 있으면 화면 이동 및 메세지 처리 String status = eventMberInfo.getEventStatus(); if(status.equals("Y")) { //이벤트가 진행중인 경우 } else if(status.equals("E")) { //이벤트가 종료된 경우 }else { //이벤트 미진행인 경우 성공으로 결제페이지로 이동되도록 한다. goEventPay = true; } } } } } return goEventPay; } //이벤트 게시글 정보 불러오기 함수 public BoardVO selectEventBoardInfo(String bbsId, String nttSj) throws Exception{ BoardVO boardVO = new BoardVO(); boardVO.setBbsId(bbsId); boardVO.setNttSj(nttSj); BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(boardVO); return resultEvent; } //이벤트 회원 정보 불러오기 함수 public MjonEventVO selectEventMsgMberDefaultInfo(MjonEventVO mjonEventVO, float nttId, String bbsId, String mberId, String mberNm) throws Exception{ mjonEventVO.setEventNttId(Float.toString(nttId)); mjonEventVO.setEventBbsId(bbsId); mjonEventVO.setMberId(mberId); mjonEventVO.setMberNm(mberNm); mjonEventVO.setEventShortPrice("7.5"); mjonEventVO.setEventLongPrice("32"); mjonEventVO.setEventPicturePrice("59"); mjonEventVO.setEventPicture2Price("67"); mjonEventVO.setEventPicture3Price("70"); //이벤트 회원정보 존재여부 확인 및 회원 정보 불러오기 MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); return eventMberInfo; } /** * 회원가입 후 (사용자) 일반(스프링 시큐리티) 로그인을 처리한다 * * @param vo * - 아이디, 비밀번호가 담긴 LoginVO * @param request * - 세션처리를 위한 HttpServletRequest * @return result - 로그인결과(세션정보) * @exception Exception */ @RequestMapping(value = "/web/user/login/actionSecurityJoinLogin.do") public String selectActionSecurityJoinLoginWeb(@ModelAttribute("loginVO") LoginVO loginVO, @ModelAttribute("mberManageVO") MberManageVO mberManageVO, HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, HttpSession session, RedirectAttributes redirectAttributes) throws Exception { //아이디 소문자 변경 loginVO.setId(loginVO.getId().toLowerCase()); // 해킹 의심 IP 차단상태의 경우 로그인 불가 String userIp = EgovClntInfo.getClntIP(request); HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setAccessIp(userIp); hackIpVO.setBlockYn("Y"); if (null != hackIpService.selectHackIpVO(hackIpVO)) { String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } /* * ScriptEngineManager engine = new ScriptEngineManager(); if * (loginVO.getSnsSite() != null) { int snsIdCnt = * loginService.selectSnsIdCount(loginVO); LoginVO snsInfo = * loginService.selectSnsId(loginVO); if (snsIdCnt == 0) { LoginVO snsLoginVO = * new LoginVO(); snsLoginVO.setSnsSite(loginVO.getSnsSite()); * snsLoginVO.setSnsId(loginVO.getSnsId()); * snsLoginVO.setName(loginVO.getName()); * snsLoginVO.setSnsEmail(loginVO.getSnsEmail()); * * if (null != snsInfo) { snsLoginVO.setId(snsInfo.getId()); * redirectAttributes.addFlashAttribute("loginVO", snsLoginVO); return * "redirect:/web/user/join/snsLink.do"; } else { * * redirectAttributes.addFlashAttribute("loginVO", snsLoginVO); return * "redirect:/web/user/join/usrJoinIntro.do"; } } else { * loginVO.setId(snsInfo.getId()); loginVO.setPassword(snsInfo.getPassword()); } * * } */ loginVO.setUserSe("USR"); // 로그인 정보 check /* * if (loginVO.getId() == null || loginVO.getPassword() == null) { // 회원가입 시 로그인 * 처리 LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); if * (pLoginVO == null) { // RSA 키 생성 initRsa(request); return * "redirect:/web/user/login/login.do"; return "redirect:/"; } else { * loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword()); * loginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); * loginVO.setMessage(pLoginVO.getMessage()); } } */ /* * // 1. 일반 로그인 처리 PrivateKey privateKey = (PrivateKey) * session.getAttribute(EgovLoginController.RSA_WEB_KEY); if (privateKey == * null) { initRsa(request); return "web/site/login/EgovLoginGnrlUsr"; } */ LoginVO resultVO; if (loginVO.getSnsSite() == null) { // 복호화 String id = ""; /* * try { id = decryptRsa(privateKey, loginVO.getId()); } catch (Exception e) { * initRsa(request); //return "redirect:/web/user/login/login.do"; * if(loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { * redirectAttributes.addFlashAttribute("fail", true); return * "redirect:/web/user/login/login.do"; } return "redirect:/"; * * } */ // String password = decryptRsa(privateKey, loginVO.getPassword()); loginVO.setId(loginVO.getId()); loginVO.setIp(EgovClntInfo.getClntIP(request)); loginVO.setPassword(loginVO.getPassword()); loginVO.setUserSe("GNR"); loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 resultVO = loginService.actionLogin(loginVO); resultVO.setMberNm(loginVO.getMberNm()); // 이름 넣어주기. 개인회원 - 이름 / 기업회원 - 기업명 표시를 위해 String alertMessage = ""; if (!"admin".equals(loginVO.getId())) { if (null == resultVO.getId()) { // 로그인 실패 /* loginService.updatePassMissPlus(loginVO); */ alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록 /// HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setHackUserId(loginVO.getId()); hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); hackIpService.insertHackIp(hackIpVO); if (loginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } else { if (resultVO.getPassMiss() > 5) { alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다."; return goUserLoginPage(redirectAttributes, loginVO, request, model, alertMessage); } /* * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); }else * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); } */ loginService.updatePassMissReset(loginVO); } } } else { resultVO = loginService.actionSnsLogin(loginVO); } boolean loginPolicyYn = true; // 접속IP // userIp = EgovClntInfo.getClntIP(request); // resultVO.siteId 의 각 로그인 ip를 조회함 if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { // 세션에다 ip 등록 resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils .getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act .getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher( request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); { // 관리자 로그인 log 저장 String uniqId = ""; String ip = ""; /* Authenticated */ LoginLog loginLog = new LoginLog(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated.booleanValue()) { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); uniqId = user.getUniqId(); ip = EgovClntInfo.getClntIP(request); HttpSession httpSession = request.getSession(true); { List siteManageList = new ArrayList(); SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setFirstIndex(0); siteManagerVO.setRecordCountPerPage(100); siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); httpSession.setAttribute("siteManageList", siteManageList); httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 httpSession.setAttribute("esntlId", user.getPassword()); } } loginVO.getId(); loginVO.getIp(); loginVO.setMessage("로그인 성공되었습니다."); loginVO.setLoginYn("Y"); loginService.insertActionLoginLog(loginVO); } String beforeUrl = (String) commandMap.get("beforeUrl"); // 로그인 전 URL 호출 시 if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) { request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl()); // 회원가입 시 메세지 처리 if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) { request.getSession().setAttribute("registMessage", loginVO.getMessage()); } } // 개인키 삭제 // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. request.getSession().setAttribute("pageType", "web"); // redirect 처리를 위한 임시 세션. context-security의 logoutSuccessUrl에서 // /uat/uia/actionMain.do를 호출 해 joinComplete 확인 후 회원가입 성공 화면으로 이동 request.getSession().setAttribute("joinComplete", "Y"); return "blank"; // 성공 시 페이지.. (redirect 불가) // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. // return "forward:/web/main/mainPage.do"; } else { String message = egovMessageSource.getMessage("fail.common.login"); redirectAttributes.addFlashAttribute("beforeUrl", loginVO.getBeforeUrl()); redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } } /** * 로그인 후 메인화면으로 들어간다 * * @param * @return 로그인 페이지 * @exception Exception */ @RequestMapping(value = "/uat/uia/actionMain.do") public String actionMain(HttpServletResponse response, HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes, HttpSession session) throws Exception { /* * 1.로그인 성공시 메소드 호출(사용자/관리자 모두) 2.권한없는 페이지 호출시 메소드 호출됨 3.사용자 화면에서 권한 없어도 무조건 * 이쪽으로 redirect됨(여기서 분기처리요망) */ // initial target url. 첫 호출 URL SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); // 사용자 최종 클릭 화면 if (savedRequest != null) { // 권한업는 페이지 호출시 호출한 페이지 분기를 위해 if (savedRequest.getRedirectUrl().contains("web")) { // 사용자페이지에서 옴 session.setAttribute("pageType", "web"); } else { session.setAttribute("pageType", "admin"); } } // 1. Spring Security 사용자권한 처리 Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (!isAuthenticated) { // 로그인이 안되었을경우 if (session.getAttribute("pageType") != null) { // 사용자 로그인 추가 if ("web".equals((String) session.getAttribute("pageType"))) { if (savedRequest != null) { session.setAttribute("beforeUrl", savedRequest.getRedirectUrl()); return "redirect:/web/user/login/login.do"; } } else { return "redirect:/uat/uia/EgovLoginUsr.do"; } } return "forward:/uat/uia/EgovLoginUsr.do"; // 로그아웃 경우(사용자는 uat/uia/actionMain.do 사용안함) } // 현재 로그인 시간에서 20분 후 시간 받아오기(로그아웃될 시간) // MJUtil mjUtil = new MJUtil(); // String timer = mjUtil.getAfterTimerDate(20); // 세션에 로그아웃될 시간 저장해 주기 // session.setAttribute("timer", timer); // 사용자 로그린 경우 if (session.getAttribute("pageType") != null) { if ("web".equals((String) session.getAttribute("pageType"))) { // 사용자 if (session.getAttribute("beforeUrl") != null) { // 사용자 메인 String tempSessionUrl = (String) session.getAttribute("beforeUrl"); session.setAttribute("pageType", null); return "redirect:" + tempSessionUrl; } else if (session.getAttribute("usrBeforeUrl") != null) { String tempSessionUrl = (String) session.getAttribute("usrBeforeUrl"); if (tempSessionUrl.contains("/web/user/login/usrJoinComplete.do")) { tempSessionUrl = "/"; } session.setAttribute("pageType", null); return "redirect:" + tempSessionUrl; } else if (session.getAttribute("joinComplete") != null) { if ("Y".equals(session.getAttribute("joinComplete"))) { return "redirect:/web/user/login/usrJoinComplete.do"; } } else { session.setAttribute("pageType", null); // return "redirect:/web/main/mainPage.do"; return "redirect:/"; } } } return "redirect:/cmm/main/mainPage.do"; } /** * (관리자) 특정 사용자 아이디로 로그인을 처리한다 * * @param vo * - 아이디, 비밀번호가 담긴 LoginVO * @param request * - 세션처리를 위한 HttpServletRequest * @return result - 로그인결과(세션정보) * @exception Exception */ @RequestMapping(value = "/web/user/login/actionAdmToUsrLogin.do") public String actionAdmToUsrSecurityLogin(HttpServletResponse response, HttpServletRequest request, @RequestParam Map commandMap, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { /* * // 해킹 의심 IP 차단상태의 경우 로그인 불가 String userIp = EgovClntInfo.getClntIP(request); * HackIpVO hackIpVO = new HackIpVO(); hackIpVO.setAccessIp(userIp); * hackIpVO.setBlockYn("Y"); if (null != hackIpService.selectHackIpVO(hackIpVO)) * { String message = "차단된 아이피입니다. 관리자에게 문의해 주십시요."; * redirectAttributes.addFlashAttribute("message", message); return * "redirect:/"; } * * ScriptEngineManager engine = new ScriptEngineManager(); if * (loginVO.getSnsSite() != null) { int snsIdCnt = * loginService.selectSnsIdCount(loginVO); LoginVO snsInfo = * loginService.selectSnsId(loginVO); if (snsIdCnt == 0) { LoginVO snsLoginVO = * new LoginVO(); snsLoginVO.setSnsSite(loginVO.getSnsSite()); * snsLoginVO.setSnsId(loginVO.getSnsId()); * snsLoginVO.setName(loginVO.getName()); * snsLoginVO.setSnsEmail(loginVO.getSnsEmail()); * * if (null != snsInfo) { snsLoginVO.setId(snsInfo.getId()); * redirectAttributes.addFlashAttribute("loginVO", snsLoginVO); return * "redirect:/web/user/join/snsLink.do"; } else { * * redirectAttributes.addFlashAttribute("loginVO", snsLoginVO); return * "redirect:/web/user/join/usrJoinIntro.do"; } } else { * loginVO.setId(snsInfo.getId()); loginVO.setPassword(snsInfo.getPassword()); } * * } */ String adminId = request.getParameter("adminId"); String mberId = request.getParameter("mberId"); MberManageVO mberManageVO = mberManageService.selectMber(mberId); LoginVO usrLoginVO = new LoginVO(); usrLoginVO.setId(mberManageVO.getMberId()); usrLoginVO.setPassword(mberManageVO.getPassword()); usrLoginVO.setUserSe("USR"); // 로그인 정보 check if (usrLoginVO.getId() == null || usrLoginVO.getPassword() == null) { // 회원가입 시 로그인 처리 LoginVO pLoginVO = (LoginVO) request.getAttribute("pLoginVO"); if (pLoginVO == null) { // RSA 키 생성 initRsa(request); /* return "redirect:/web/user/login/login.do"; */ return "redirect:/"; } else { usrLoginVO.setId(pLoginVO.getId()); usrLoginVO.setPassword(pLoginVO.getPassword()); usrLoginVO.setBeforeUrl(pLoginVO.getBeforeUrl()); usrLoginVO.setMessage(pLoginVO.getMessage()); } } // 1. 일반 로그인 처리 LoginVO resultVO; if (usrLoginVO.getSnsSite() == null) { usrLoginVO.setIp(EgovClntInfo.getClntIP(request)); usrLoginVO.setUserSe("GNR"); usrLoginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회 resultVO = loginService.actionLoginAdmToUsr(usrLoginVO); String alertMessage = ""; if (!"admin".equals(usrLoginVO.getId())) { if (null == resultVO.getId()) { // 로그인 실패 /* loginService.updatePassMissPlus(loginVO); */ alertMessage = egovMessageSource.getMessage("fail.common.login"); // 로그인 실패시 해킹의심 IP 테이블에 등록 /// HackIpVO hackIpVO = new HackIpVO(); /* * hackIpVO.setHackUserId(loginVO.getId()); * hackIpVO.setAccessIp(EgovClntInfo.getClntIP(request)); * hackIpService.insertHackIp(hackIpVO); */ if (usrLoginVO.getBeforeUrl().toString().contains("/web/user/login/login.do")) { redirectAttributes.addFlashAttribute("fail", true); return "redirect:/web/user/login/login.do"; } return goUserLoginPage(redirectAttributes, usrLoginVO, request, model, alertMessage); } else { if (resultVO.getPassMiss() > 5) { alertMessage = "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다."; return goUserLoginPage(redirectAttributes, usrLoginVO, request, model, alertMessage); } /* * else if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "신청하신 아이디가 현제 승인대기 상" + "태입니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); }else * if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage = * "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes, * request, model, alertMessage); } */ loginService.updatePassMissReset(usrLoginVO); } } } else { resultVO = loginService.actionSnsLogin(usrLoginVO); } boolean loginPolicyYn = true; // 접속IP // userIp = EgovClntInfo.getClntIP(request); // resultVO.siteId 의 각 로그인 ip를 조회함 if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) { // 세션에다 ip 등록 // resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils .getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act .getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher( request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } //로그인 필터를 태우는 부분으로 필터를 호출해줌 //현재 기능에서는 불필요한 기능이라서 주석처리함 springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); { // 관리자 로그인 log 저장 String uniqId = ""; String ip = ""; /* Authenticated */ LoginLog loginLog = new LoginLog(); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated.booleanValue()) { LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); uniqId = user.getUniqId(); ip = EgovClntInfo.getClntIP(request); HttpSession httpSession = request.getSession(true); { List siteManageList = new ArrayList(); SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setFirstIndex(0); siteManagerVO.setRecordCountPerPage(100); siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); httpSession.setAttribute("siteManageList", siteManageList); httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해 httpSession.setAttribute("esntlId", user.getPassword()); } } usrLoginVO.setAdminId(adminId); usrLoginVO.getId(); usrLoginVO.getIp(); usrLoginVO.setMessage("로그인 성공되었습니다."); usrLoginVO.setLoginYn("Y"); loginService.insertActionLoginLog(usrLoginVO); } //이전 접속 주소를 메인화면 주소로 입력해 준디ㅏ. String beforeUrl = "/web/main/mainPage.do";//(String) commandMap.get("beforeUrl"); usrLoginVO.setBeforeUrl(beforeUrl); // 로그인 전 URL 호출 시 if (usrLoginVO.getBeforeUrl() != null && !("").equals(usrLoginVO.getBeforeUrl())) { request.getSession().setAttribute("usrBeforeUrl", usrLoginVO.getBeforeUrl()); // 회원가입 시 메세지 처리 if (usrLoginVO.getMessage() != null && !("").equals(usrLoginVO.getMessage())) { request.getSession().setAttribute("registMessage", usrLoginVO.getMessage()); } } // 개인키 삭제 // 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다. request.getSession().setAttribute("pageType", "web"); return "blank"; // 성공 시 페이지.. (redirect 불가) // uat/uia/actionMain.do 실제 성공시 무조건 좌측 메소드로 감. // return "forward:/web/main/mainPage.do"; } else { String message = egovMessageSource.getMessage("fail.common.login"); redirectAttributes.addFlashAttribute("beforeUrl", usrLoginVO.getBeforeUrl()); redirectAttributes.addFlashAttribute("message", message); return "redirect:/"; } } /** * (관리자)로그아웃한다. * * @return String * @exception Exception */ @RequestMapping(value = "/uat/uia/actionLogout.do") public String selectActionLogout(HttpServletRequest request, ModelMap model) throws Exception { request.getSession().invalidate(); return "redirect:/uat/uia/EgovLoginUsr.do"; } /** * (사용자)로그아웃한다. * * @return String * @exception Exception */ @RequestMapping(value = "/web/uat/uia/actionLogout.do") public String selectActionLogoutWeb(HttpServletRequest request, ModelMap model) throws Exception { request.getSession().invalidate(); /* return "redirect:/web/main/mainPage.do"; */ // 기존 로그아웃 시 이동 페이지 return "redirect:/"; } /* 캡차 테스트 */ @RequestMapping(value = "/captcha/captchaTest.do") public String captchaTest(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) throws Exception { return "cmm/chptcha/captchaTest"; } /* 캡차 이미지 */ @RequestMapping(value = "/captcha/captchaImg.do") public String captchaImg1(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { return "cmm/chptcha/captchaImg"; } /* 캡차 오디오 */ @RequestMapping(value = "/captcha/captchaAudio.do") public String captchaAudio1(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { return "cmm/chptcha/captchaAudio"; } /* 캡차 submit */ @RequestMapping(value = "/captcha/captchaSubmit.do") public ModelAndView captchaSubmit(@RequestParam Map commandMap, HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String answer = (String) commandMap.get("answer"); String captcha = (String) request.getSession().getAttribute("captcha"); String message = "캡차 입력값이 일치하지 않습니다."; if (answer != null && !"".equals(answer)) { if (answer.equals(captcha)) { message = "캡차 입력값이 일치합니다."; } } modelAndView.addObject("message", message); return modelAndView; } /* 캡차 이미지 */ @RequestMapping(value = "captchaImg.do") public void cpatchaImg(HttpServletRequest request, HttpServletResponse response) throws Exception { new CaptchaUtil().captchaImg(request, response); } @RequestMapping(value = "captchaAudio.do") public void cpatchaAudio(HttpServletRequest request, HttpServletResponse response) throws Exception { new CaptchaUtil().captchaAudio(request, response); } /** * 로그인 후 메인화면으로 들어간다 * * @param * @return 로그인 페이지 * @exception Exception */ @RequestMapping(value = "/{siteId}/web/actionLoign.do") public String siteActionMain(@PathVariable("siteId") String siteId, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session) throws Exception { // initial target url. 첫 호출 URL SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); String initialTargetUrl = ""; if (savedRequest != null) { initialTargetUrl = savedRequest.getRedirectUrl(); } model.addAttribute("siteId", siteId); String siteFolder = "site/" + siteId; // 1. Spring Security 사용자권한 처리 Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (!isAuthenticated) { // model.addAttribute("message", // egovMessageSource.getMessage("fail.common.login")); if ("linc".equals(siteId) || "klc".equals(siteId)) { return "web/" + siteFolder + "/main/MemberLogin"; } else { SiteManagerVO siteManagerVO = new SiteManagerVO(); siteManagerVO.setSiteId(siteId); setSiteinfo(siteManagerVO, model, request); // return // "web/site/theme_"+siteManagerVO.getTheme()+"/"+siteManagerVO.getIsMobile()+"/main/MemberLogin"; return "web/site/" + siteId + "/" + siteManagerVO.getIsMobile() + "/main/MemberLogin"; } } LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); if (null != loginVO && !"super".equals(loginVO.getSiteId())) { // 리스트, 수정, 입력 if (siteId.equals(loginVO.getSiteId())) { // 사이트 아이디가 다르면 session.setAttribute("pageType", "web"); return "web/" + siteFolder + "/main/MemberLogin"; } } // 2. 메인 페이지 이동 return "forward:/" + siteId + "/web/main/mainPage.do"; } /** * 일반사용자 (스프링 시큐리티) 로그인을 처리한다 * * @param vo * - 아이디, 비밀번호가 담긴 LoginVO * @param request * - 세션처리를 위한 HttpServletRequest * @return result - 로그인결과(세션정보) * @exception Exception */ @RequestMapping(value = "/{siteId}/web/actionSecurityLogin.do") public String selectActionSiteSecurityLogin(@PathVariable("siteId") String siteId, @ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model) throws Exception { // 로그인 정보 check model.addAttribute("siteId", siteId); String siteFolder = "site/" + siteId; if (loginVO.getId() == null || loginVO.getPassword() == null) { return "web/" + siteFolder + "/main/MemberLogin"; } // 1. 일반 로그인 처리(사이트) LoginVO resultVO = loginService.siteActionLogin(loginVO); // 접속IP String userIp = EgovClntInfo.getClntIP(request); if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("")) { // 세션에다 ip 등록 resultVO.setIp(userIp); // 2. spring security 연동 request.getSession().setAttribute("LoginVO", resultVO); request.getSession().setAttribute("pageType", "web"); UsernamePasswordAuthenticationFilter springSecurity = null; ApplicationContext act = WebApplicationContextUtils .getRequiredWebApplicationContext(request.getSession().getServletContext()); Map beans = act .getBeansOfType(UsernamePasswordAuthenticationFilter.class); if (beans.size() > 0) { springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; springSecurity.setUsernameParameter("egov_security_username"); springSecurity.setPasswordParameter("egov_security_password"); springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher( request.getServletContext().getContextPath() + "/egov_security_login", "POST")); } else { throw new IllegalStateException("No AuthenticationProcessingFilter"); } springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null); return "blank"; // action.do 에서 일반사용자 분기처리 } else { model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); return "web/" + siteFolder + "/main/MemberLogin"; } } /** * (사용자) 아이디 찾기 본인인증. * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/findUserId.do") public String findUserId(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 유저는 튕기기 if (isAuthenticated) { return "redirect:/"; } String radioType = request.getParameter("radioType"); model.addAttribute("radioType", radioType); return "web/login/findUserId"; } /** * (사용자) 비밀번호 재설정. * * @return String * @exception Exception */ @RequestMapping(value = { "/web/user/rePassword.do" }) public String rePassword(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 유저는 튕기기 if (isAuthenticated) { return "redirect:/"; } model.addAttribute("types", "2"); return "web/login/findUserId"; } /** * @Method Name : selectUserSttusAjax * @작성일 : 2024. 3. 27. * @작성자 : WYH * @변경이력 : * @Method 설명 : 회원상태 조회 (Y:일반회원, B:이용정지 회원, N:탈퇴회원) */ @RequestMapping(value = { "/web/user/selectUserSttusAjax.do" }) public ModelAndView selectUserSttusAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO , RedirectAttributes redirectAttributes , ModelMap model) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { String userId = mjonMsgVO.getUserId(); String userSttus = userManageService.selectUserStatusInfoCheck(userId); modelAndView.addObject("status", "success"); modelAndView.addObject("userSttus", userSttus); } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증에 실패하였습니다."); } return modelAndView; } /** * 아이디 비밀번호 찾기 시스템 문자발송 * * @param searchVO * @param model * @return "" * @throws Exception */ @RequestMapping(value = { "/web/user/sendSysMsgDataAjax.do" }) public ModelAndView sendSysMsgDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String resultSts = "0"; String resultBlockSts = "0"; // 문자 수신 번호 jsp에서 받아와야함! /* mjonMsgVO.setCallTo(callTo); */ // System.out.println("mjonMsgVO.toString()"); // System.out.println(mjonMsgVO.toString()); // System.out.println("mjonMsgVO.toString()"); // 사용자 유효성 검사 // id, hp, nm try { List mberCertPhoneList = certPhoneService.selectMberCertPhoneList(mjonMsgVO.getUserId()); boolean TorF = mberCertPhoneList.size() > 0 ? true : false; if (!TorF) { modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호에 맞는 회원 정보가 없습니다."); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); return modelAndView; } UserManageVO userManageVO = new UserManageVO(); userManageVO.setEmplyrId(mjonMsgVO.getUserId()); userManageVO.setEmplyrNm(mjonMsgVO.getSearchNm()); userManageVO.setMoblphonNo(mjonMsgVO.getCallTo()); List usedNmList = userManageService.selectUserIdAjax2(userManageVO); if(!usedNmList.get(0).getMberSttus().equals("Y")) { String mberSttus = usedNmList.get(0).getMberSttus(); String message = ""; if(mberSttus.equals("B")) { message = "문자온 이용이 정지 된 회원 정보입니다."; }else { message = "문자온에서 탈퇴한 회원 정보입니다."; } modelAndView.addObject("message", message); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); return modelAndView; } } catch (Exception e) { logger.error(e.getMessage(), e); // modelAndView.addObject("result", "fail"); // modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); } try { MjonMsgReturnVO returnVO = mjonMsgDataService.sendSysMsgData(mjonMsgVO); resultSts = returnVO.getSendMsgCnt(); resultBlockSts = returnVO.getSendMsgBlockCnt(); } catch (Exception e) { logger.error(e.getMessage(), e); modelAndView.addObject("result", "fail"); modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); } if (!resultSts.equals("0")) { modelAndView.addObject("message", "문자 전송이 완료되었습니다."); modelAndView.addObject("result", "success"); modelAndView.addObject("resultSts", resultSts); modelAndView.addObject("resultBlockSts", resultBlockSts); } else { modelAndView.addObject("message", "문자 전송에 오류가 발생하였습니다."); modelAndView.addObject("result", "fail"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); } return modelAndView; } /** * 이용정치 회원 주소록 다운로드 본인인증 시스템 문자발송 * * @param searchVO * @param model * @return "" * @throws Exception */ @RequestMapping(value = { "/web/user/sendAddrRequestMsgDataAjax.do" }) public ModelAndView sendAddrRequestMsgDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, RedirectAttributes redirectAttributes, ModelMap model) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String resultSts = "0"; String resultBlockSts = "0"; // 비밀번호 찾기 문자내용 String contents = "주소록 요청 인증번호입니다. 인증번호는 : %code% 입니다."; String code = ""; long seed = System.currentTimeMillis(); Random random = new Random(seed); // code = Integer.toString(random.nextInt(4)); StringBuffer randomCode = new StringBuffer(); for (int i = 0; i < 5; i++) { code = randomCode.append(Integer.toString(random.nextInt(10))).toString(); } contents = contents.replace("%code%", code); mjonMsgVO.setSmsTxt(contents); mjonMsgVO.setReserveYn("N"); // 시스템 문자발송 번호 mjonMsgVO.setCallFrom("15518011"); try { mjonMsgVO.setUserId("system"); String msgType = "4"; // 전송사 전송 배분 MjonMsgVO pramVO = new MjonMsgVO(); List sendRateList = mjonMsgService.selectTodayAgentSendCntList(pramVO); // 전송사 전송 배분률 및 현재 전송건수 // 조회 for (MjonMsgVO tmpVO : sendRateList) { float cnt = Float.parseFloat(tmpVO.getMsgGroupCnt()); float totCnt = tmpVO.getTotCnt(); tmpVO.setSendRateInfo(Float.parseFloat(tmpVO.getSendRate()) - (cnt / totCnt * 100)); // 배분률 - 현재전송 비율 } String sendAgent = sendRateList.get(0).getAgentCode(); float maxRate = sendRateList.get(0).getSendRateInfo(); for (MjonMsgVO tmpVO : sendRateList) { // 배분률 대비 현재전송 비율이 가장 적은거 찾기 if (maxRate < tmpVO.getSendRateInfo()) { maxRate = tmpVO.getSendRateInfo(); sendAgent = tmpVO.getAgentCode(); } } mjonMsgVO.setMsgType("4"); mjonMsgVO.setMsgDiv("S"); // 단문 // 문자타입별 대표전송사 정보 MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 // 전송금액 mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); resultSts = returnVO.getSendMsgCnt(); resultBlockSts = returnVO.getSendMsgBlockCnt(); // 시스템 발송 로그 SendLogVO sendLogVO = new SendLogVO(); // SendType 1:문자로 발송 2:이메일로 발송 sendLogVO.setSendId(returnVO.getMsgGroupId()); sendLogVO.setSendType("1"); sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); sendLogVO.setReceive(mjonMsgVO.getCallTo()); sendLogVO.setCheckNo(code); sendLogVO.setContents(contents); mjonMsgDataService.insertSysMsgLog(sendLogVO); } catch (Exception e) { logger.error(e.getMessage(), e); modelAndView.addObject("result", "fail"); modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); } if (!resultSts.equals("0")) { modelAndView.addObject("message", "휴대폰으로 전송된 인증번호 5자리를 입력해주시기 바랍니다."); modelAndView.addObject("certCode", code); modelAndView.addObject("result", "success"); modelAndView.addObject("resultSts", resultSts); modelAndView.addObject("resultBlockSts", resultBlockSts); } else { modelAndView.addObject("message", "문자 전송에 오류가 발생하였습니다."); modelAndView.addObject("result", "fail"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); } return modelAndView; } // 아이디 비밀번호 찾기 시스템 인증번호발송 조회 @RequestMapping(value = "/web/user/sendSysMsgSelectAjax.do") public ModelAndView sendSysMsgSelectAjax(@ModelAttribute("SendLogVO") SendLogVO sendLogVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO); if (sendLogVO == null) { modelAndView.addObject("compare", true); } else { // 시간 비교 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date nowdate = new Date(); Date compareDate = format.parse(sendLogVO.getFrstSendPnttm()); Calendar cal = Calendar.getInstance(); cal.setTime(compareDate); // 1분 추가 cal.add(Calendar.MINUTE, +1); compareDate = cal.getTime(); if (compareDate.compareTo(nowdate) < 0) { modelAndView.addObject("compare", true); } else if (compareDate.compareTo(nowdate) > 0) { modelAndView.addObject("compare", false); } } modelAndView.addObject("status", "success"); } catch (Exception e) { modelAndView.addObject("status", "fail"); } return modelAndView; } // 아이디 비밀번호 찾기 kmc본인인증 @RequestMapping(value = "/web/user/login/kmcPopupIdPwPramAjax.do") public ModelAndView kmcPopupIdPwPramAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, HttpServletRequest request) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); System.out.println("mberManageVO.toString()"); System.out.println(mberManageVO.toString()); System.out.println("mberManageVO.toString()"); // 사용자 유효성 검사 // id, hp, nm try { UserManageVO userManageVO = new UserManageVO(); userManageVO.setEmplyrId(mberManageVO.getMberId()); userManageVO.setEmplyrNm(mberManageVO.getMberNm()); userManageVO.setMoblphonNo(mberManageVO.getMoblphonNo()); boolean TorF = true; if("USR".equals(mberManageVO.getUserSe())) { TorF = userManageService.selectAdminIdAjax(userManageVO) > 0 ? true : false; mberManageVO.setMberNm(""); // 관리자 로그인 본인인증은 name이 null이여야함 } else { /* * 일 시 : 2023.07.25 * 담당자 : 원영현 과장 수정 * 내 용 : Dn 으로 회원정보 조회가 가능하도록 기능 수정 * 변경된 핸드폰 번호로 조회시 정보조회가 안되기 때문에 이름과 ID를 이용하여 조건 수정 * */ userManageVO.setMoblphonNo(""); List usedNmList = new ArrayList<>(); usedNmList = userManageService.selectUserIdAjax2(userManageVO); TorF = usedNmList.size() > 0 ? true : false; } System.out.println("Out if TorF :: "+TorF); if (!TorF) { System.out.println(" In if TorF :: "+TorF); modelAndView.addObject("message", "입력하신 아이디/이름에 맞는 회원이 없습니다."); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); return modelAndView; } } catch (Exception e) { logger.error(e.getMessage(), e); // modelAndView.addObject("result", "fail"); // modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); } // modelAndView.addObject("status", "fail"); try { KmcCertChecker kmcCertCheck = new KmcCertChecker(); // mberId null일경우 ""로 mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); // kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if (request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://119.193.215.98:8095"; } else { serverNm = request.getScheme() + "://www.munjaon.co.kr"; } String authRUrl = serverNm + mberManageVO.getAuthRUrl(); AuthCertVO certVO = kmcCertCheck.authCertCheckThree(authRUrl, mberManageVO); modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); modelAndView.addObject("tr_add", certVO.getTr_add()); modelAndView.addObject("result", "success"); } catch (Exception e) { modelAndView.addObject("result", "fail"); modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); } return modelAndView; } /** * 아이디 비밀번호 찾기 kmc 본인인증(PG사 전송화면) * * @param * @return * @throws Exception */ @RequestMapping("/web/cop/kmc/authRequestFindIdPwAjax.do") public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model, @RequestParam Map commandMap, @ModelAttribute("searchVO") KmcVO kmcVO, RedirectAttributes redirectAttributes) throws Exception { KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO); String msg = ""; if (!findIdKmcCheck(kmcRVO.getDI(), kmcRVO.getName(), kmcRVO.getPhoneNo())) { msg = "일치하는 정보가 없습니다."; redirectAttributes.addFlashAttribute("message", msg); return "redirect:/web/user/findUserId.do"; } kmcRVO.setCertType("KMC_아이디패스워드찾기"); // 디비 테이블에 저장하기 mberManageService.insertCertInfoLogBn(kmcRVO); model.addAttribute("kmcVO", kmcVO); return "web/login/findUserIdKmcReqPage"; } /** * @param request * @param model * @param commandMap * @param kmcVO * @param redirectAttributes * @return * @throws Exception * @discription 관리자 로그인 DN 값 최초 등록 */ @RequestMapping("/web/cop/kmc/authRequestSelfLoginAjax.do") public String authRequestSelfLoginAjax(HttpServletRequest request, ModelMap model, @RequestParam Map commandMap, @ModelAttribute("searchVO") KmcVO kmcVO, RedirectAttributes redirectAttributes, HttpSession session) throws Exception { UserManageVO userManageVO = new UserManageVO(); KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO); userManageVO.setCrtfcDnValue(kmcRVO.getDI()); userManageVO.setEmplyrNm(kmcRVO.getName()); userManageVO.setEmplyrId(kmcRVO.getPlusInfo().split(",,,")[0]); userManageVO.setPassword(kmcRVO.getPlusInfo().split(",,,")[1]); userManageService.updateCrtfcDnValue(userManageVO); try { String msg = ""; if (!findIdKmcAdmCheck(userManageVO)) { msg = "일치하는 정보가 없습니다."; redirectAttributes.addFlashAttribute("message", msg); return "redirect:/uat/uia/EgovLoginUsr.do"; } } catch (Exception e) { System.out.println("???????????????????????"); e.printStackTrace(); // TODO: handle exception } kmcRVO.setCertType("KMC_관리자미인증IP접속인증"); // 디비 테이블에 저장하기 try { mberManageService.insertCertInfoLogBn(kmcRVO); } catch (Exception e) { System.out.println("!!!!!!!!!!!!!!!!!"); e.printStackTrace(); // TODO: handle exception } model.addAttribute("kmcVO", kmcRVO); System.out.println("======================================"); model.addAttribute("userManageVO", userManageVO); return "web/login/EgovLoginUsrKmcReqPage"; } // 파라미터 유효성 검증 -------------------------------------------- public Boolean paramChk(String patn, String param) { Pattern pattern = Pattern.compile(patn); Matcher matcher = pattern.matcher(param); boolean b = matcher.matches(); return b; } // 파라미터 유효성 검증 -------------------------------------------- public String returnPage(ModelMap model, String errMessage, KmcVO kmcVO) { kmcVO.setErrMessage(errMessage); model.addAttribute("kmcVO", kmcVO); return "web/cop/nicepay/payRequestAjax"; } // kmc 본인인증 DI 값으로 회원이 있는지 검사 public Boolean findIdKmcCheck(String DI, String Name, String PhoneNo) throws Exception { UserManageVO userManageVO = new UserManageVO(); /* * 일 시 : 2023.07.25 * 담당자 : 원영현 과장 수정 * 내 용 : Dn 으로 회원정보 조회가 가능하도록 기능 수정 * 쿼리 조회시 번호를 제외한 이름과 Dn으로 조회 * */ userManageVO.setEmplyrNm(Name); // 이름 // userManageVO.setMoblphonNo(PhoneNo); userManageVO.setMblDn(DI); // Dn List usedNmList = userManageService.selectUserIdAjax(userManageVO); boolean TorF = usedNmList.size() > 0 ? true : false; return TorF; } // kmc 본인인증 DI 값으로 회원이 있는지 검사 public Boolean findIdKmcAdmCheck(UserManageVO userManageVO) throws Exception { return userManageService.selectAdminDiChk(userManageVO) > 0 ? true : false; } /** * (사용자) 아이디 찾기 결과 화면. * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/findUserIdResult.do") public String findUserIdResult(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 유저는 튕기기 if (isAuthenticated) { return "redirect:/"; } /* * 일 시 : 2023.07.25 * 담당자 : 원영현 과장 수정 * 내 용 : Dn 으로 회원정보 조회가 가능하도록 기능 수정 * 쿼리 조회시 번호를 제외한 이름과 Dn으로 조회 * */ UserManageVO userInfoVO = new UserManageVO(); userInfoVO.setEmplyrNm(userManageVO.getEmplyrNm()); // 이름 if (StringUtils.isEmpty(userManageVO.getMblDn())) { userInfoVO.setMoblphonNo(userManageVO.getMoblphonNo()); // 휴대폰번호 } userInfoVO.setEmailAdres(userManageVO.getEmailAdres()); // 이메일주소 userInfoVO.setMblDn(userManageVO.getMblDn()); // Dn String isFullUserid = "Y"; List usedNmList = userManageService.selectUserIdAjax(userInfoVO); try { if (!"kmc".equals(userManageVO.getFindType())) { for (UserManageVO tmpVO : usedNmList) { String emplyrId = ""; emplyrId = tmpVO.getEmplyrId(); tmpVO.setEmplyrIdDec(emplyrId); emplyrId = emplyrId.substring(0, emplyrId.length() - 3) + "***"; tmpVO.setEmplyrId(emplyrId); } isFullUserid = "N"; } model.addAttribute("isFullUserid", isFullUserid); model.addAttribute("usedNmList", usedNmList); } catch (Exception e) { return "/"; } return "web/login/findUserIdResult"; } /** * (사용자) 비밀번호 재설정 결과 화면. * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/findUserPwResult.do") public String findUserPwResult(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("userManageVO") UserManageVO userManageVO, RedirectAttributes redirectAttributes) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 유저는 튕기기 if (isAuthenticated) { redirectAttributes.addFlashAttribute("message", "로그인한 회원은 접근할수 없습니다."); return "redirect:/"; } try { UserManageVO checkUser = userManageService.selectUserPw2Ajax(userManageVO); if (checkUser != null) { model.addAttribute("userManageVO", userManageVO); return "/web/login/findUserPwResult"; } else { redirectAttributes.addFlashAttribute("message", "입력한 정보를 다시 확인해 주세요."); return "redirect:/web/user/findUserId.do"; } } catch (Exception e) { redirectAttributes.addFlashAttribute("message", "입력한 정보를 다시 확인해 주세요."); return "redirect:/web/user/findUserId.do"; } } /** * (사용자) 비밀번호 재설정 update ajax * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/updateUserPwAjax.do") public ModelAndView updateUserPwAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { //비밀번호 규칙성 검증 추가 - 취약점 조치 userManageVO.setPassword(userManageVO.getPassword().trim()); String passWord = userManageVO.getPassword(); Pattern digitPattern = Pattern.compile("[0-9]"); Matcher digitMatcher = digitPattern.matcher(passWord); boolean hasDigit = digitMatcher.find(); Pattern letterPattern = Pattern.compile("[a-zA-Z]"); Matcher letterMatcher = letterPattern.matcher(passWord); boolean hasLetter = letterMatcher.find(); Pattern specialPattern = Pattern.compile("[`~!@@#$%^&*|\\\\'\";:/?]"); Matcher specialMatcher = specialPattern.matcher(passWord); boolean hasSpecialCharacter = specialMatcher.find(); if(hasDigit == false || hasLetter == false || hasSpecialCharacter == false || passWord.length() < 8 || passWord.length() > 20) { modelAndView.addObject("pwRuleCheck", false); return modelAndView; }else { modelAndView.addObject("pwRuleCheck", true); } // 해당 정보의 등록 페스워드 조회 int pwCheck = mberManageService.selectMberPWOverlapCheck(userManageVO); if (pwCheck != 0) { modelAndView.addObject("pwCheck", false); } else { modelAndView.addObject("pwCheck", true); // 해당 정보의 유저가 있으면 UserManageVO checkUser = userManageService.selectUserPw2Ajax(userManageVO); if (checkUser != null) { // 비밀번호 업데이트 userManageService.updateUserPWAjax(userManageVO); modelAndView.addObject("used", true); } else { modelAndView.addObject("used", false); } } } catch (Exception e) { modelAndView.addObject("status", "fail"); } return modelAndView; } /** * (사용자) 비밀번호 재설정 gmail SMTP 전송 하기 * * @param commandMap * 파라메터전달용 commandMap * @param model * 화면모델 * @return /web/member/mypage/updateMemberInfo.do * @throws Exception */ @RequestMapping(value = "/web/user/sendSysEmailAjax.do") public ModelAndView sendSysEmailAjax(@ModelAttribute("SendLogVO") SendLogVO sendLogVO, HttpServletRequest request) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); // 사용자 유효성 검사 // id, hp, nm try { UserManageVO userManageVO = new UserManageVO(); userManageVO.setEmplyrId(sendLogVO.getSendId()); userManageVO.setEmplyrNm(sendLogVO.getSendType()); userManageVO.setEmailAdres(sendLogVO.getReceive()); List usedNmList = userManageService.selectUserIdAjax2(userManageVO); boolean TorF = usedNmList.size() > 0 ? true : false; if (!TorF) { modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호에 맞는 회원 정보가 없습니다."); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); return modelAndView; } if(!usedNmList.get(0).getMberSttus().equals("Y")) { String mberSttus = usedNmList.get(0).getMberSttus(); String message = ""; if(mberSttus.equals("B")) { message = "문자온 이용이 정지 된 회원 정보입니다."; }else { message = "문자온에서 탈퇴한 회원 정보입니다."; } modelAndView.addObject("message", message); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); return modelAndView; } } catch (Exception e) { logger.error(e.getMessage(), e); // modelAndView.addObject("result", "fail"); // modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); } try { // 비밀번호 찾기 내용 /* String contents = "비밀번호 변경 인증번호입니다.
인증번호는 :
%code%
입니다."; */ String contents = ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "비밀번호 재발급 인증 메일 입니다."; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "
"; contents += "
"; contents += "
"; contents += "

"; contents += "비밀번호 재발급 인증 메일입니다.

\"\""; contents += "
"; /*contents += "
"; contents += ""; contents += "
";*/ contents += "
"; contents += "

"; contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.
비밀번호 재설정을 위해 인증번호를 입력해주세요.

"; contents += "

%code%

"; contents += "

본 인증번호는 5분간 유효합니다.
비밀번호 재설정 신청 시각 : %date%

"; contents += "

문자온 서비스를 이용해 주셔서 감사합니다.

"; contents += "
"; contents += "

본 메일은 발신전용이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 고객센터를 통해 문의하여 주시기 바랍니다.

"; contents += "

주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)
사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : 제 2021-다산-0422
문의전화 : 1551-8011 | E-mail : help@iten.co.kr

"; contents += "

Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.

"; contents += "
"; contents += "
"; contents += "
"; contents += "
"; contents += ""; contents += ""; contents += ""; String repContents = contents; String code = ""; long seed = System.currentTimeMillis(); Random random = new Random(seed); // code = Integer.toString(random.nextInt(4)); StringBuffer randomCode = new StringBuffer(); for (int i = 0; i < 5; i++) { code = randomCode.append(Integer.toString(random.nextInt(10))).toString(); } repContents = repContents.replace("%code%", code); SimpleDateFormat format = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분"); Date nowdate = new Date(); String date = format.format(nowdate); repContents = repContents.replace("%date%", date); // 임시비밀번호 이메일로 보내기 SendMail sMail = new SendMail(); EmailVO mailSender = new EmailVO(); // 사용자 이메일 주소 mailSender.setSend_from("noreply@munjaon.co.kr"); // 발송자 이메일 주소 mailSender.setSend_to(sendLogVO.getReceive()); // 메일 제목 mailSender.setTitle("문자온 비밀번호 재설정 인증번호입니다."); // 메일 내용 mailSender.setContents(repContents); // 메일 발송하기 /*sMail.sendMail(mailSender);*/ sMail.sendMail2(mailSender); // 발송 이력 저장 SendType 1:문자로 발송 2:이메일로 발송 sendLogVO.setSendType("2"); sendLogVO.setFrstSendInfo("noreply@munjaon.co.kr"); sendLogVO.setCheckNo(code); sendLogVO.setContents(repContents); mjonMsgDataService.insertSysMsgLog(sendLogVO); modelAndView.addObject("result", "success"); modelAndView.addObject("message", "인증번호가 이메일주소로 발송되었습니다."); } catch (Exception e) { modelAndView.addObject("result", "fail"); modelAndView.addObject("message", "이메일 발송 중에 오류가 발생하였습니다.\n(F5)새로고침 후 다시 진행 부탁드립니다."); } return modelAndView; } /** * (사용자) 비밀번호 찾기. * * @return String * @exception Exception */ @RequestMapping(value = "/{siteId}/web/user/findPassword.do") public String findPassword(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/{siteId}/web/main/mainPage.do"; return "web/site/itn/login/findPassword"; } /** * (사용자) 아이디 비밀번호 안내. * * @return String * @exception Exception */ @RequestMapping(value = "/{siteId}/web/user/findView.do") public String findView(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/cmm/main/mainPage.do"; return "web/site/itn/login/findView"; } /** * (사용자) 비밀번호 변경 화면. * * @return String * @exception Exception */ @RequestMapping(value = "/{siteId}/web/user/changePassword.do") public String changePassword(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/cmm/main/mainPage.do"; return "web/site/itn/login/changePassword"; } @RequestMapping(value = "/{siteId}/web/user/join/snsLink.do") public String snsLink(@ModelAttribute("loginVO") LoginVO loginVO, ModelMap model, HttpSession session) { String siteId = (String) session.getAttribute("siteId"); model.addAttribute("loginVO", loginVO); return "web/site/" + siteId + "/login/snsLinkPage"; } @RequestMapping(value = "/{siteId}/web/user/join/snsLinkUpdate.do") public String snsLinkUpdate(@ModelAttribute("loginVO") LoginVO loginVO, ModelMap model, HttpSession session) throws Exception { String siteId = (String) session.getAttribute("siteId"); String siteFolder = "site/" + siteId; loginService.updateSnsLink(loginVO); return "web/" + siteFolder + "/login/usrJoinComplete"; } // (사용자) 회원가입 동의 화면 @RequestMapping(value = "/{siteId}/web/user/join/usrJoinIntro.do") public String usrJoinIntro(@PathVariable("siteId") String siteId, @RequestParam Map commandMap, HttpServletRequest request, @ModelAttribute("loginVO") LoginVO loginVO, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/{siteId}/web/main/mainPage.do"; model.addAttribute("siteId", siteId); String siteFolder = "site/" + siteId; model.addAttribute("site_path", "/" + siteFolder); MberManageConfigVO mberConfigVO = new MberManageConfigVO(); // 회원가입 환경설정 mberConfigVO.setUseYn("Y"); // 사용하는것만 mberConfigVO.setIsSns("N"); mberConfigVO.setSiteId(siteId); List mberManageCnfList = mberManageService.selectMberCnf(mberConfigVO); model.addAttribute("mberManageCnfList", mberManageCnfList); model.addAttribute("loginVO", loginVO); // 약관가져오기 SiteManagerVO termsVO = new SiteManagerVO(); termsVO.setSiteId(siteId); termsVO = egovSiteManagerService.selectSiteManagerVO(termsVO); if (null != termsVO) { if (!"N".equals(termsVO.getTermsYn())) { model.addAttribute("termsVO", termsVO); } } return "web/" + siteFolder + "/login/usrJoinIntro"; } // (사용자) 회원가입 화면 @RequestMapping(value = "/{siteId}/web/user/join/usrJoinRegist.do") public String usrJoinView(@PathVariable("siteId") String siteId, @RequestParam Map commandMap, HttpServletRequest request, @ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/{siteId}/web/main/mainPage.do"; model.addAttribute("siteId", siteId); String siteFolder = "site/" + siteId; model.addAttribute("site_path", "/" + siteFolder); return "web/" + siteFolder + "/login/usrJoinRegist"; } /** * (사용자) 회원가입 처리 * * @return String * @exception Exception */ @RequestMapping(value = "/{siteId}/web/user/join/usrJoinInsert.do") public String usrJoinInsert(@PathVariable("siteId") String siteId, @ModelAttribute("userManageVO") UserGuestVO userManageVO, HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map commandMap, RedirectAttributes redirectAttributes) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); if (isAuthenticated) return "redirect:/{siteId}/web/main/mainPage.do"; model.addAttribute("siteId", siteId); String siteFolder = "site/" + siteId; model.addAttribute("site_path", "/" + siteFolder); // UserVO userVO = (UserVO) request.getSession().getAttribute("selfauthUserVO"); // // 본인인증 정보가 없거나, 인증정보와 번호가 다를때 // if (userVO == null || // !userManageVO.getMoblphonNo().equals(userVO.getMblNum())) { // model.addAttribute("message", "비 정상적인 접근입니다. 본인인증을 해주세요."); // return "web/login/usrJoinRegist"; // } // request.getSession().setAttribute("selfauthUserVO", null); // 본인인증 데이터 // userManageVO.setEmplyrNm(userVO.getName()); // userManageVO.setBrth(userVO.getBirYMD()); // userManageVO.setMblDn(userVO.getMblDn()); // userManageVO.setMoblphonNo(userVO.getMblNum()); // 기 가입된 휴대폰번호인지 확인 // LoginVO vo = new LoginVO(); // vo.setMblDn(userVO.getMblDn()); // vo = loginService.searchIdByMblDn(vo); // // if (vo != null && vo.getId() != null) { // } if (1 == 2) { model.addAttribute("message", "이미 가입된 휴대폰 번호입니다."); return "web/" + siteFolder + "/login/usrJoinRegist"; } userManageVO.setAuthorCode("ROLE_GNRL_USER"); userManageVO.setJoinType("2"); // 직접가입:2 userManageVO.setCondition("1"); // 정상:1, 휴면:2, 탈퇴:3 userManageVO.setUseYn("0"); // 사용:0 userManageService.insertUser(userManageVO); return "web/" + siteFolder + "/login/usrJoinComplete"; } /** * (사용자) 아이디 중복 확인 * * @return model * @throws Exception */ @RequestMapping(value = "{siteId}/web/user/join/usrIdDplctCnfirmAjax.do") public ModelAndView usrIdDplctCnfirmAjax(@PathVariable("siteId") String siteId, @RequestParam Map commandMap) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String checkId = (String) commandMap.get("checkId"); // checkId = new String(checkId.getBytes("ISO-8859-1"), "UTF-8"); int usedCnt = userManageService.checkIdDplct(checkId); modelAndView.addObject("usedCnt", usedCnt); modelAndView.addObject("checkId", checkId); return modelAndView; } /** * (사용자) 아이디 찾기 Ajax * * @return model * @throws Exception */ @RequestMapping(value = "/web/user/join/selectUserIdAjax.do") public ModelAndView selectUserIdAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { List usedNmList = userManageService.selectUserIdAjax(userManageVO); /* modelAndView.addObject("usedNmList", usedNmList); */ if (usedNmList.size() > 0) { modelAndView.addObject("status", "success"); } else { modelAndView.addObject("status", "fail"); } } catch (Exception e) { modelAndView.addObject("status", "fail"); } return modelAndView; } /** * (사용자) 비밀번호 변경 Ajax * * @return model * @throws Exception */ @RequestMapping(value = "/web/user/join/selectUserPwAjax.do") public ModelAndView selectUserPwAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { userManageVO.setEmplyrId(userManageVO.getEmplyrId().toLowerCase()); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { SendLogVO sendLogVO = new SendLogVO(); if (!"".equals(userManageVO.getMoblphonNo()) && userManageVO.getMoblphonNo() != null) { sendLogVO.setReceive(userManageVO.getMoblphonNo()); } else if (!"".equals(userManageVO.getEmailAdres()) && userManageVO.getEmailAdres() != null) { sendLogVO.setReceive(userManageVO.getEmailAdres()); } sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO); if (sendLogVO == null) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증번호 받기 버튼을 누르고 인증번호를 입력해주세요."); } else { // 시간 비교 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date nowdate = new Date(); Date compareDate = format.parse(sendLogVO.getFrstSendPnttm()); Calendar cal = Calendar.getInstance(); cal.setTime(compareDate); // 5분 추가 cal.add(Calendar.MINUTE, +5); compareDate = cal.getTime(); // 인증번호을 발송한지 5분 이내일때 if (compareDate.after(nowdate)) { UserManageVO checkUser = userManageService.selectUserPw2Ajax(userManageVO); if (checkUser != null) { modelAndView.addObject("status", "success"); } else { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증번호를 확인해 주세요."); } } else{ modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증번호 시간이 초과되었습니다."); } } } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "새로고침 후 다시 진행해 주세요"); } return modelAndView; } /** * (사용자) 주소록 요청 인증번호 확인 Ajax * * @return model * @throws Exception */ @RequestMapping(value = "/web/user/selectAddrRequestMsgChkAjax.do") public ModelAndView selectAddrRequestMsgChkAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { SendLogVO sendLogVO = new SendLogVO(); sendLogVO.setReceive(userManageVO.getMoblphonNo()); sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO); if (sendLogVO == null) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증번호 받기 버튼을 누르고 인증번호를 입력해주세요."); } else { // 시간 비교 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date nowdate = new Date(); Date compareDate = format.parse(sendLogVO.getFrstSendPnttm()); Calendar cal = Calendar.getInstance(); cal.setTime(compareDate); // 5분 추가 cal.add(Calendar.MINUTE, -5); compareDate = cal.getTime(); // 인증번호을 발송한지 5분 이내일때 if (compareDate.compareTo(nowdate) < 0) { UserManageVO checkUser = userManageService.selectAddrRequestMsgAjax(userManageVO); if (checkUser != null) { modelAndView.addObject("status", "success"); } else { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "입력한 정보를 확인해 주세요."); } } else if (compareDate.compareTo(nowdate) > 0) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "인증번호 시간이 초과되었습니다."); } } } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("msg", "새로고침 후 다시 진행해 주세요"); } return modelAndView; } /** * (사용자) password 찾기 * * @return model * @throws Exception */ /* * @RequestMapping(value = "{siteId}/web/user/join/selectUserPWAjax.do") public * ModelAndView selectPasswordAjax(@PathVariable("siteId") String siteId, * * @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { * ModelAndView modelAndView = new ModelAndView(); * modelAndView.setViewName("jsonView"); int usedCnt = * userManageService.selectUserPWAjax(userManageVO); * * if (usedCnt > 0) { String id = userManageVO.getEmplyrId() + "!!"; * userManageVO.setPassword(id); * userManageService.updateUserPWAjax(userManageVO); } * modelAndView.addObject("usedCnt", usedCnt); return modelAndView; } */ private void setSiteinfo(SiteManagerVO siteManagerVO, ModelMap model, HttpServletRequest request) throws Exception { SiteManagerVO tempSiteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO); if (tempSiteManagerVO != null) { siteManagerVO.setIsMobile("pc"); siteManagerVO.setTheme(tempSiteManagerVO.getTheme()); } else { siteManagerVO.setTheme("01"); } WebUtil util = new WebUtil(); if (util.isMobile(request)) { siteManagerVO.setIsMobile("mobile"); } model.addAttribute("siteId", siteManagerVO.getSiteId()); // model.addAttribute("site_path" , // "/site/theme_"+siteManagerVO.getTheme()+"/"+siteManagerVO.getIsMobile()); model.addAttribute("site_path", "/site/" + siteManagerVO.getSiteId() + "/" + siteManagerVO.getIsMobile()); } /** * 복호화 * * @param privateKey * @param securedValue * @return * @throws Exception */ private String decryptRsa(PrivateKey privateKey, String securedValue) throws Exception { Cipher cipher = Cipher.getInstance(EgovLoginController.RSA_INSTANCE); byte[] encryptedBytes = hexToByteArray(securedValue); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); String decryptedValue = new String(decryptedBytes, "utf-8"); // 문자 인코딩 주의. return decryptedValue; } /** * 16진 문자열을 byte 배열로 변환한다. * * @param hex * @return */ public static byte[] hexToByteArray(String hex) { if (hex == null || hex.length() % 2 != 0) { return new byte[] {}; } byte[] bytes = new byte[hex.length() / 2]; for (int i = 0; i < hex.length(); i += 2) { byte value = (byte) Integer.parseInt(hex.substring(i, i + 2), 16); bytes[(int) Math.floor(i / 2)] = value; } return bytes; } /** * rsa 공개키, 개인키 생성 * * @param request */ public void initRsa(HttpServletRequest request) { HttpSession session = request.getSession(); KeyPairGenerator generator; try { generator = KeyPairGenerator.getInstance(EgovLoginController.RSA_INSTANCE); generator.initialize(1024); KeyPair keyPair = generator.genKeyPair(); KeyFactory keyFactory = KeyFactory.getInstance(EgovLoginController.RSA_INSTANCE); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); session.setAttribute(EgovLoginController.RSA_WEB_KEY, privateKey); // session에 RSA 개인키를 세션에 저장 RSAPublicKeySpec publicSpec = (RSAPublicKeySpec) keyFactory.getKeySpec(publicKey, RSAPublicKeySpec.class); String publicKeyModulus = publicSpec.getModulus().toString(16); String publicKeyExponent = publicSpec.getPublicExponent().toString(16); request.setAttribute("RSAModulus", publicKeyModulus); // rsa modulus 를 request 에 추가 request.setAttribute("RSAExponent", publicKeyExponent); // rsa exponent 를 request 에 추가 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("======================================================"); System.out.println("= RSA generator is fail ="); System.out.println("= EgovLoginController ="); System.out.println("======================================================"); } } // 사용자 에러페이지 표시후 로그인 페이지로 private String goUserLoginPage(RedirectAttributes redirectAttributes, LoginVO loginVO, HttpServletRequest request, ModelMap model, String alertMessage) throws Exception { loginVO.setLoginYn("N"); loginVO.setMessage(alertMessage); loginService.insertActionLoginLog(loginVO); redirectAttributes.addFlashAttribute("message", alertMessage); if (!"".equals(loginVO.getBeforeUrl())) { return "redirect:" + loginVO.getBeforeUrl(); } /* return "redirect:/web/user/login/login.do"; */ return "redirect:/"; } // 사용자 에러페이지 표시후 비밀번호 실패 횟수 초과 페이지로 private String goUserPassMissPage(RedirectAttributes redirectAttributes, LoginVO loginVO, HttpServletRequest request, ModelMap model, String alertMessage) throws Exception { loginVO.setLoginYn("N"); loginVO.setMessage(alertMessage); loginService.insertActionLoginLog(loginVO); redirectAttributes.addFlashAttribute("message", alertMessage); return "redirect:/web/user/loginLimitedFailed.do"; } /* SNS 추가 내역 */ @RequestMapping(value = "/snsLogin/naverOauth.do", produces = "application/json", method = { RequestMethod.GET, RequestMethod.POST }) public String naverRedirect(Model model, @RequestParam("code") String code, @RequestParam String state, HttpSession session, HttpServletRequest req, RedirectAttributes redirectAttributes) { String siteId = (String) session.getAttribute("siteId"); JsonNode node = getAccessToken("naver", code, state); // 결과값 출력 System.out.println("node : " + node); // 노드 안에 있는 access_token값을 꺼내 문자열로 변환 String token = node.get("access_token").toString(); // 세션에 담아준다. session.setAttribute("token", token); JsonNode userInfo = getUserInfo("naver", node.get("access_token")); JsonNode response = userInfo.path("response"); String id = response.path("id").asText(); String name = response.path("name").asText(); String snsEmail = response.path("email").asText(); LoginVO loginVO = new LoginVO(); loginVO.setSnsId(id); loginVO.setName(name); loginVO.setSnsEmail(snsEmail); loginVO.setSnsSite("naver"); model.addAttribute("loginVO", loginVO); return "web/login/EgovUserSNSLogin"; } @RequestMapping(value = "/snsLogin/kakaoOauth.do", produces = "application/json", method = { RequestMethod.GET, RequestMethod.POST }) public String kakaoRedirect(Model model, @RequestParam("code") String code, HttpSession session, HttpServletRequest req, RedirectAttributes redirectAttributes) { JsonNode node = getAccessToken("kakao", code, ""); // 노드 안에 있는 access_token값을 꺼내 문자열로 변환 String token = node.get("access_token").toString(); // 세션에 담아준다. session.setAttribute("token", token); JsonNode userInfo = getUserInfo("kakao", node.get("access_token")); String id = userInfo.path("id").asText(); String name = userInfo.path("name").asText(); String snsEmail = userInfo.path("email").asText(); // 유저정보 카카오에서 가져오기 Get properties JsonNode properties = userInfo.path("properties"); JsonNode kakao_account = userInfo.path("kakao_account"); id = userInfo.path("id").asText(); name = null; snsEmail = null; name = properties.path("nickname").asText(); snsEmail = kakao_account.path("email").asText(); LoginVO loginVO = new LoginVO(); loginVO.setSnsId(id); loginVO.setName(name); loginVO.setSnsEmail(snsEmail); loginVO.setSnsSite("kakao"); model.addAttribute("loginVO", loginVO); // return // "forward:/"+siteId+"/web/user/login/actionSecurityLogin.do?snsnsId="+id+"&name="+name+"&email="+email+"&snsSite=kakao"; return "web/login/EgovUserSNSLogin"; } public JsonNode getAccessToken(String site, String code, String state) { String RequestUrl = ""; List postParams = new ArrayList(); if (site.equals("kakao")) { RequestUrl = "https://kauth.kakao.com/oauth/token"; postParams.add(new BasicNameValuePair("grant_type", "authorization_code")); postParams.add(new BasicNameValuePair("client_id", itnKakaoRestApiKey)); postParams.add(new BasicNameValuePair("code", code)); } else if (site.equals("naver")) { RequestUrl = "https://nid.naver.com/oauth2.0/token"; postParams.add(new BasicNameValuePair("grant_type", "authorization_code")); postParams.add(new BasicNameValuePair("client_id", itnNaverClientId)); postParams.add(new BasicNameValuePair("client_secret", itnNaverClientSecret)); postParams.add(new BasicNameValuePair("code", code)); postParams.add(new BasicNameValuePair("state", state)); } else if (site.equals("google")) { } final HttpClient client = HttpClientBuilder.create().build(); final HttpPost post = new HttpPost(RequestUrl); JsonNode returnNode = null; try { post.setEntity(new UrlEncodedFormEntity(postParams)); final HttpResponse response = client.execute(post); final int responseCode = response.getStatusLine().getStatusCode(); // JSON 형태 반환값 처리 ObjectMapper mapper = new ObjectMapper(); returnNode = mapper.readTree(response.getEntity().getContent()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } return returnNode; } public JsonNode getUserInfo(String site, JsonNode accessToken) { // String CLIENT_ID = K_CLIENT_ID; // REST API KEY // String REDIRECT_URI = K_REDIRECT_URI; // 리다이렉트 URI // String code = autorize_code; // 로그인 과정중 얻은 토큰 값 String RequestUrl = ""; if (site.equals("kakao")) { RequestUrl = "https://kapi.kakao.com/v2/user/me"; } else if (site.equals("naver")) { RequestUrl = "https://openapi.naver.com/v1/nid/me"; } else if (site.equals("google")) { } final HttpClient client = HttpClientBuilder.create().build(); final HttpPost post = new HttpPost(RequestUrl); // add header post.addHeader("Authorization", "Bearer " + accessToken); JsonNode returnNode = null; try { final HttpResponse response = client.execute(post); final int responseCode = response.getStatusLine().getStatusCode(); // JSON 형태 반환값 처리 ObjectMapper mapper = new ObjectMapper(); returnNode = mapper.readTree(response.getEntity().getContent()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // clear resources } return returnNode; } /* nice체크 오프너로 이용 */ @RequestMapping("/web/user/login/niceCheckAjax.do") public String niceCheckWeb(HttpServletRequest request, @RequestParam Map commandMap, @ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("mberManageVO") MberManageVO mberManageVO, ModelMap model, HttpSession session) throws Exception { String niceMessage = niceCheck(request, session, mberManageVO).getNiceMessage(); System.out.println("niceMessage --- " + niceMessage); if ("".equals(niceMessage)) { // 정상의 경우 세션 생성 후 오프너 close /* * UserVO tempVO = new UserVO(); // * tempVO.setMblDn(damoEnc(userSearchVO.getMblDn(), request)); //DI암호화 //테스트라 주석 * tempVO.setName(userSearchVO.getNiceNm()); */ MberManageVO tempVO = new MberManageVO(); tempVO.setNiceNm(mberManageVO.getNiceNm()); tempVO.setBirthDay(mberManageVO.getBirthDay()); tempVO.setMoblphonNo(mberManageVO.getMoblphonNo()); tempVO.setSexdstnCode(mberManageVO.getSexdstnCode()); tempVO.setMblDn(mberManageVO.getMblDn()); // DI암호화 request.getSession().setAttribute("userSearchVO", tempVO); } return "web/cop/selfauth/niceCheckAjax"; } public MberManageVO niceCheck(HttpServletRequest request, HttpSession session, MberManageVO mberManageVO) { CPClient niceCheck = new CPClient(); String sEncodeData = requestReplace(request.getParameter("EncodeData"), "encodeData"); String sSiteCode = "BS933"; // NICE로부터 부여받은 사이트 코드 String sSitePassword = "2CU5kY9wpppk"; // NICE로부터 부여받은 사이트 패스워드 String sCipherTime = ""; // 복호화한 시간 String sRequestNumber = ""; // 요청 번호 String sResponseNumber = ""; // 인증 고유번호 String sAuthType = ""; // 인증 수단 String sName = ""; // 성명 String sDupInfo = ""; // 중복가입 확인값 (DI_64 byte) String sConnInfo = ""; // 연계정보 확인값 (CI_88 byte) String sBirthDate = ""; // 생년월일(YYYYMMDD) String sGender = ""; // 성별 String sNationalInfo = ""; // 내/외국인정보 (개발가이드 참조) String sMobileNo = ""; // 휴대폰번호 String sMobileCo = ""; // 통신사 String sMessage = ""; String sPlainData = ""; int iReturn = niceCheck.fnDecode(sSiteCode, sSitePassword, sEncodeData); if (iReturn == 0) { sPlainData = niceCheck.getPlainData(); sCipherTime = niceCheck.getCipherDateTime(); // 데이타를 추출합니다. java.util.HashMap mapresult = niceCheck.fnParse(sPlainData); sRequestNumber = (String) mapresult.get("REQ_SEQ"); sResponseNumber = (String) mapresult.get("RES_SEQ"); sAuthType = (String) mapresult.get("AUTH_TYPE"); sName = (String) mapresult.get("NAME"); // sName = (String)mapresult.get("UTF8_NAME"); //charset utf8 사용시 주석 해제 후 사용 sBirthDate = (String) mapresult.get("BIRTHDATE"); sGender = (String) mapresult.get("GENDER"); sNationalInfo = (String) mapresult.get("NATIONALINFO"); sDupInfo = (String) mapresult.get("DI"); sConnInfo = (String) mapresult.get("CI"); sMobileNo = (String) mapresult.get("MOBILE_NO"); sMobileCo = (String) mapresult.get("MOBILE_CO"); String session_sRequestNumber = (String) session.getAttribute("REQ_SEQ"); if (!sRequestNumber.equals(session_sRequestNumber)) { sMessage = "세션값 불일치 오류입니다."; sResponseNumber = ""; sAuthType = ""; } } else if (iReturn == -1) { sMessage = "복호화 시스템 오류입니다."; } else if (iReturn == -4) { sMessage = "복호화 처리 오류입니다."; } else if (iReturn == -5) { sMessage = "복호화 해쉬 오류입니다."; } else if (iReturn == -6) { sMessage = "복호화 데이터 오류입니다."; } else if (iReturn == -9) { sMessage = "입력 데이터 오류입니다."; } else if (iReturn == -12) { sMessage = "사이트 패스워드 오류입니다."; } else { sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; } try { mberManageVO.setNiceMessage(sMessage); mberManageVO.setNiceNm(sName); mberManageVO.setMblDn(sDupInfo); mberManageVO.setSexdstnCode(sGender); mberManageVO.setMoblphonNo(sMobileNo); mberManageVO.setBirthDay(sBirthDate); } catch (Exception e) { e.printStackTrace(); } return mberManageVO; } // 나이스 인증 public String requestReplace(String paramValue, String gubun) { String result = ""; if (paramValue != null) { paramValue = paramValue.replaceAll("<", "<").replaceAll(">", ">"); paramValue = paramValue.replaceAll("\\*", ""); paramValue = paramValue.replaceAll("\\?", ""); paramValue = paramValue.replaceAll("\\[", ""); paramValue = paramValue.replaceAll("\\{", ""); paramValue = paramValue.replaceAll("\\(", ""); paramValue = paramValue.replaceAll("\\)", ""); paramValue = paramValue.replaceAll("\\^", ""); paramValue = paramValue.replaceAll("\\$", ""); paramValue = paramValue.replaceAll("'", ""); paramValue = paramValue.replaceAll("@", ""); paramValue = paramValue.replaceAll("%", ""); paramValue = paramValue.replaceAll(";", ""); paramValue = paramValue.replaceAll(":", ""); paramValue = paramValue.replaceAll("-", ""); paramValue = paramValue.replaceAll("#", ""); paramValue = paramValue.replaceAll("--", ""); paramValue = paramValue.replaceAll("-", ""); paramValue = paramValue.replaceAll(",", ""); if (gubun != "encodeData") { paramValue = paramValue.replaceAll("\\+", ""); paramValue = paramValue.replaceAll("/", ""); paramValue = paramValue.replaceAll("=", ""); } result = paramValue; } return result; } // 회원타입(개인,기업) 세션에 저장 @RequestMapping("/web/user/login/joinInsertAjax.do") public ModelAndView testmapajax(HttpServletRequest request, HttpSession session, ModelMap model, @ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); // HttpSession session = request.getSession(); // 기존 mberSession 세션 삭제 session.removeAttribute("mberSession"); // 선택약관(이벤트 및 혜택 문자, 카카오, 메일 수신)세션에 저장 // request.getSession().setAttribute("mberSession", mberManageVO); session.setAttribute("mberSession", mberManageVO); /* * HttpSession session = request.getSession(); * session.setAttribute("mberSession", mberManageVO); */ return modelAndView; } /** * 첨부파일 개수, 사이즈, 확장자 체크 * * @param fileList * 파일리스트 * @param boardMasterVO * 게시판마스터 * @param atchFileCnt * 업로드된 파일 수 * @return boolean * @return 체크 오류 메세지 model 'flashMessage' 에 set * @throws Exception */ private boolean isPosblAtchFile(List fileList, MberManageVO mberManageVO, ModelMap model, int atchFileCnt) throws Exception { int fileCnt = 0; long posblAtchFileSize = Long.parseLong(mberManageVO.getPosblAtchFileSize()) * 1024 * 1024; String flashMessage = ""; boolean posblAtchFileFlag = true; boolean posblAtchFileSizeFlag = true; boolean posblAtchFileExtFlag = true; Iterator iter = fileList.iterator(); while (iter.hasNext()) { FileVO vo = (FileVO) iter.next(); long fileMg = Long.parseLong(vo.getFileMg()); String fileExt = vo.getFileExtsn(); if (fileMg > posblAtchFileSize) posblAtchFileSizeFlag = false; String[] imgExts = { "gif", "jpg", "bmp", "jpeg", "png" }; if (ArrayUtils.indexOf(imgExts, fileExt.toLowerCase()) == -1) posblAtchFileExtFlag = false; fileCnt++; } if (!posblAtchFileExtFlag) { flashMessage += "이미지 형식의 확장자만 업로드 가능합니다."; posblAtchFileFlag = false; } if (!posblAtchFileSizeFlag) { flashMessage += "파일사이즈가 초과되었습니다. 최대크기 " + posblAtchFileSize + "mb"; posblAtchFileFlag = false; } if (!posblAtchFileFlag) model.addAttribute("message", flashMessage); return posblAtchFileFlag; } @RequestMapping(value = "/web/user/login/selectIPCntAjax.do") public ModelAndView selectIPCntAjax(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest request) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { LoginVO resultVO = loginService.actionLogin(loginVO); if (null == resultVO.getId()) { // 로그인 실패 modelAndView.addObject("result", "loginFail"); modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.login")); return modelAndView; } // 일반회원 IP 테이블 조회 후 현재 IP가 등록 되어있나 체크 int IPCheck = loginService.selectIPCnt(loginVO); // 개발편의를 위해 localhost일 경우 bypass if (request.getServerName().contains("localhost")) { IPCheck = 1; } // 팝업에 넣을 이름과 핸드폰번호 조회 LoginVO KMCInfoVO = loginService.selectKMCInfo(loginVO); // KMC 팝업 오픈 준비 KmcCertChecker kmcCertCheck = new KmcCertChecker(); String mberNm = KMCInfoVO.getMberNm(); if ("c".equals(KMCInfoVO.getDept())) { mberNm = KMCInfoVO.getManagerNm(); } String birth = KMCInfoVO.getBirth(); String moblphonNo = KMCInfoVO.getMoblphonNo(); String sexdstnCode = KMCInfoVO.getSexdstnCode(); String nationality = KMCInfoVO.getNationality(); String id = loginVO.getId(); // kmc 본인인증 실/개발 서버 구분 String serverNm = ""; if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { serverNm = request.getScheme() + "://219.240.88.15:8095"; } else { serverNm = request.getScheme() + "://www.munjaon.co.kr"; } AuthCertVO certVO = kmcCertCheck.authCertCheckFour(serverNm + "/web/cop/kmc/insertIPAjax.do", mberNm, moblphonNo, sexdstnCode, nationality, birth, id); modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); modelAndView.addObject("tr_add", certVO.getTr_add()); modelAndView.addObject("IPCheck", IPCheck); modelAndView.addObject("status", "success"); } catch (Exception e) { modelAndView.addObject("status", "fail"); } return modelAndView; } /* * 로그인시 접속 아이피 체크 본인인증 정상처리 후 아이피를 변경하는 로직 * */ @RequestMapping("/web/cop/kmc/insertIPAjax.do") public String insertIPAjax(HttpServletRequest request, ModelMap model, @RequestParam Map commandMap, @ModelAttribute("searchVO") KmcVO kmcVO) throws Exception { String errMessage = ""; // 에러메세지 String rec_cert = ""; // 결과값(암호화) String certNum = ""; // certNum rec_cert = request.getParameter("rec_cert").trim(); certNum = request.getParameter("certNum").trim(); kmcVO.setRecCert(rec_cert); kmcVO.setCertNum(certNum); // 파라미터 유효성 검증 if (rec_cert.length() == 0 || certNum.length() == 0) { errMessage = "비정상"; return returnPage(model, errMessage, kmcVO); } // 변수선언 // -------------------------------------------------------------------------------------------------------- String k_certNum = ""; // 파라미터로 수신한 요청번호 k_certNum = certNum; String date = ""; // 요청일시 String CI = ""; // 연계정보(CI) String DI = ""; // 중복가입확인정보(DI) String phoneNo = ""; // 휴대폰번호 String phoneCorp = ""; // 이동통신사 String birthDay = ""; // 생년월일 String gender = ""; // 성별 String nation = ""; // 내국인 String name = ""; // 성명 String M_name = ""; // 미성년자 성명 String M_birthDay = ""; // 미성년자 생년월일 String M_Gender = ""; // 미성년자 성별 String M_nation = ""; // 미성년자 내외국인 String result = ""; // 결과값 String certMet = ""; // 인증방법 String ip = ""; // ip주소 String plusInfo = ""; String encPara = ""; String encMsg1 = ""; String encMsg2 = ""; String msgChk = ""; com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager(); // 02. 1차 복호화 // 수신된 certNum를 이용하여 복호화 rec_cert = seed.getDec(rec_cert, k_certNum); // 03. 1차 파싱 int inf1 = rec_cert.indexOf("/", 0); int inf2 = rec_cert.indexOf("/", inf1 + 1); encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터 encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값 // 04. 위변조 검증 encMsg2 = seed.getMsg(encPara); kmcVO.setEncMsg2(encMsg2); if (encMsg2.equals(encMsg1)) { msgChk = "Y"; } if (!"Y".equals(msgChk)) { errMessage = "비정상접근입니다."; return returnPage(model, errMessage, kmcVO); } // 05. 2차 복호화 rec_cert = seed.getDec(encPara, k_certNum); kmcVO.setRecCert(rec_cert); // 06. 2차 파싱 int info1 = rec_cert.indexOf("/", 0); int info2 = rec_cert.indexOf("/", info1 + 1); int info3 = rec_cert.indexOf("/", info2 + 1); int info4 = rec_cert.indexOf("/", info3 + 1); int info5 = rec_cert.indexOf("/", info4 + 1); int info6 = rec_cert.indexOf("/", info5 + 1); int info7 = rec_cert.indexOf("/", info6 + 1); int info8 = rec_cert.indexOf("/", info7 + 1); int info9 = rec_cert.indexOf("/", info8 + 1); int info10 = rec_cert.indexOf("/", info9 + 1); int info11 = rec_cert.indexOf("/", info10 + 1); int info12 = rec_cert.indexOf("/", info11 + 1); int info13 = rec_cert.indexOf("/", info12 + 1); int info14 = rec_cert.indexOf("/", info13 + 1); int info15 = rec_cert.indexOf("/", info14 + 1); int info16 = rec_cert.indexOf("/", info15 + 1); int info17 = rec_cert.indexOf("/", info16 + 1); int info18 = rec_cert.indexOf("/", info17 + 1); certNum = rec_cert.substring(0, info1); kmcVO.setCertNum(certNum); date = rec_cert.substring(info1 + 1, info2); kmcVO.setDate(date); CI = rec_cert.substring(info2 + 1, info3); kmcVO.setCI(CI); phoneNo = rec_cert.substring(info3 + 1, info4); kmcVO.setPhoneNo(phoneNo); phoneCorp = rec_cert.substring(info4 + 1, info5); kmcVO.setPhoneCorp(phoneCorp); birthDay = rec_cert.substring(info5 + 1, info6); kmcVO.setBirthDay(birthDay); gender = rec_cert.substring(info6 + 1, info7); kmcVO.setGender(gender); nation = rec_cert.substring(info7 + 1, info8); kmcVO.setNation(nation); name = rec_cert.substring(info8 + 1, info9); kmcVO.setName(name); result = rec_cert.substring(info9 + 1, info10); kmcVO.setResult(result); certMet = rec_cert.substring(info10 + 1, info11); kmcVO.setCertMet(certMet); ip = rec_cert.substring(info11 + 1, info12); kmcVO.setIp(ip); M_name = rec_cert.substring(info12 + 1, info13); kmcVO.setMName(M_name); M_birthDay = rec_cert.substring(info13 + 1, info14); kmcVO.setMBirthDay(M_birthDay); M_Gender = rec_cert.substring(info14 + 1, info15); kmcVO.setMGender(M_Gender); M_nation = rec_cert.substring(info15 + 1, info16); kmcVO.setMNation(M_nation); plusInfo = rec_cert.substring(info16 + 1, info17); kmcVO.setPlusInfo(plusInfo); DI = rec_cert.substring(info17 + 1, info18); kmcVO.setDI(DI); // 07. CI, DI 복호화 CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); if ("Y".equals(result)) { } // -------------------------------------------------------------- String regex = ""; if (certNum.length() == 0 || certNum.length() > 40) { errMessage = "요청번호 비정상."; return returnPage(model, errMessage, kmcVO); } regex = "[0-9]*"; if (date.length() != 14 || !paramChk(regex, date)) { errMessage = "요청일시"; return returnPage(model, errMessage, kmcVO); } regex = "[A-Z]*"; if (certMet.length() != 1 || !paramChk(regex, certMet)) { errMessage = "본인인증방법 비정상" + certMet; return returnPage(model, errMessage, kmcVO); } regex = "[0-9]*"; if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) { errMessage = "휴대폰번호 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[A-Z]*"; if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) { errMessage = "이동통신사 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[0-9]*"; if (birthDay.length() != 8 || !paramChk(regex, birthDay)) { errMessage = "생년월일 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[0-9]*"; if (gender.length() != 1 || !paramChk(regex, gender)) { errMessage = "성별 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[0-9]*"; if (nation.length() != 1 || !paramChk(regex, nation)) { errMessage = "내/외국인 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[\\sA-Za-z가-�R.,-]*"; if (name.length() > 60 || !paramChk(regex, name)) { errMessage = "성명 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[A-Z]*"; if (result.length() != 1 || !paramChk(regex, result)) { errMessage = "결과값 비정상"; return returnPage(model, errMessage, kmcVO); } regex = "[\\sA-Za-z가-?.,-]*"; if (M_name.length() != 0) { if (M_name.length() > 60 || !paramChk(regex, M_name)) { errMessage = "미성년자 성명 비정상"; return returnPage(model, errMessage, kmcVO); } } regex = "[0-9]*"; if (M_birthDay.length() != 0) { if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) { errMessage = "미성년자 생년월일 비정상"; return returnPage(model, errMessage, kmcVO); } } regex = "[0-9]*"; if (M_Gender.length() != 0) { if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) { errMessage = "미성년자 성별 비정상"; return returnPage(model, errMessage, kmcVO); } } regex = "[0-9]*"; if (M_nation.length() != 0) { if (M_nation.length() != 1 || !paramChk(regex, M_nation)) { errMessage = "미성년자 내/외국인 비정상"; return returnPage(model, errMessage, kmcVO); } } LoginVO loginVO = new LoginVO(); loginVO.setId(plusInfo); loginVO = loginService.selectKMCInfo(loginVO); String userIp = EgovClntInfo.getClntIP(request); loginVO.setIp(ip); loginService.insertMberIp(loginVO); model.addAttribute("kmcVO", kmcVO); return "web/cop/kmc/loginIpCheckAjax"; } /* * // 파라미터 유효성 검증 -------------------------------------------- public Boolean * paramChk(String patn, String param){ Pattern pattern = Pattern.compile(patn); * Matcher matcher = pattern.matcher(param); boolean b = matcher.matches(); * return b; } * * // 파라미터 유효성 검증 -------------------------------------------- public String * returnPage(ModelMap model , String errMessage , KmcVO kmcVO){ * kmcVO.setErrMessage(errMessage); model.addAttribute("kmcVO", kmcVO); return * "web/cop/nicepay/payRequestAjax"; } */ // 기업회원 서류심사 사전페이지 @RequestMapping(value = "/web/user/login/membershipAttachDocBefore.do") public String membershipAttachDocBefore(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("mberId") String mberId) throws Exception { MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(mberId); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); model.addAttribute("cmpChangeManageVO", cmpChangeManageVO); return "web/login/membershipAttachDocBefore"; } // 기업회원 서류심사 사전페이지 @RequestMapping(value = "/web/user/login/membershipAttachDoc.do") public String membershipAttachDoc2(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("mberId") String mberId) throws Exception { MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(mberId); MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO); model.addAttribute("cmpChangeManageVO", cmpChangeManageVO); return "web/login/membershipAttachDoc"; } /** * 기업회원 전환 변경 */ @RequestMapping(value="/web/user/login/usrJoinReInsertAjax.do") public ModelAndView usrJoinReInsertAjax(@ModelAttribute MberManageVO mberManageVO , HttpServletRequest request , HttpServletResponse response , final MultipartHttpServletRequest multiRequest) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); if("Y".equals(mberManageVO.getAtchFileSttus())) { //사업자등록증 문제 없을 시 - 재직증명서만 새로 제출하며 사업자등록증은 기존에 첨부파일 ID를 사용 mberManageVO.setAtchFileId(mberManageVO.getBeforeAtchFileId()); } if("Y".equals(mberManageVO.getWorkAtchFileSttus())) { //재직증명서 문제 없을 시 - 사업자등록증 새로 제출하며 재직증명서는 기존에 첨부파일 ID를 사용 mberManageVO.setWorkAtchFileId(mberManageVO.getBeforeWorkAtchFileId()); } try { String wAtchFileId = mberManageVO.getAtchFileId(); String cAtchFileId = mberManageVO.getWorkAtchFileId(); final Map files = multiRequest.getFileMap(); Map fileC = new LinkedHashMap<>(); //사업자등록증 Map fileW = new LinkedHashMap<>(); //재직증명서 if (!files.isEmpty()){ Iterator> it = files.entrySet().iterator(); int cIndex = 0; int wIndex = 0; while(it.hasNext()) { Map.Entry entry = it.next(); MultipartFile mFile = entry.getValue(); if(entry.getKey().equals("file")) { //사업자등록증 - jsp에서 넘겨준 input type="file"의 name fileC.put("fileC" + cIndex, mFile); cIndex++; } if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name fileW.put("fileW" + wIndex, mFile); wIndex++; } } if(fileC.size() > 0) { // 사업자등록증 List resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", ""); wAtchFileId = fileMngService.insertFileInfs(resultC); mberManageVO.setAtchFileId(wAtchFileId); } if(fileW.size() > 0) { // 재직증명서 첨부파일 List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", ""); cAtchFileId = fileMngService.insertFileInfs(resultW); mberManageVO.setWorkAtchFileId(cAtchFileId); } } mberManageVO.setHstType("01"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드) mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드) mberManageService.insertCmpUsrHst(mberManageVO); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { // CS관리자 알림 String emailTitle = "회원관리 > 기업회원 재승인 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { String smsTitle = "기업회원 재승인 요청"; // CS관리자 SMS 알림전송 mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 기업회원 재승인 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")"; mjonCommon.sendSimpleSlackMsg(msg); } modelAndView.addObject("result", "success"); }catch (Exception e) { modelAndView.addObject("message", "다시 시도 부탁드립니다."); modelAndView.addObject("result", "fail"); } return modelAndView; } /** * 제한횟수 이상 로그인 페이지 * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/loginLimitedFailed.do") public String loginLimitedFailed(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 유저는 튕기기 if (isAuthenticated) { return "redirect:/"; } return "web/login/loginLimitedFailed"; } /** * 비밀번호 재설정 시 비밀번호 실패 횟수 초기화 * * @return String * @exception Exception */ @RequestMapping(value = "/web/user/updatePassMissResetAjax.do") public ModelAndView updatePassMissReset(HttpServletRequest request, HttpServletResponse response, ModelMap model, LoginVO loginVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 유저는 튕기기 if (isAuthenticated) { modelAndView.addObject("result", "loginUser"); return modelAndView; } try { loginService.updatePassMissReset(loginVO); modelAndView.addObject("result", "success"); } catch (Exception e) { modelAndView.addObject("result", "fail"); } return modelAndView; } /** * (사용자) SMTP 테스트 * * @param commandMap * 파라메터전달용 commandMap * @param model * 화면모델 * @return /web/member/mypage/updateMemberInfo.do * @throws Exception */ @RequestMapping(value = "/web/user/sendSysEmailTest.do") public String sendSysEmailAjaxTest(HttpServletRequest request) throws Exception { try { // 비밀번호 찾기 내용 /* String contents = "비밀번호 변경 인증번호입니다.
인증번호는 :
%code%
입니다."; */ String contents = ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "비밀번호 재발급 인증 메일 입니다."; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "
"; contents += "
"; /*contents += "
"; contents += "

"; contents += "비밀번호 재발급 인증 메일 입니다.

\"\"";*/ contents += "
"; contents += ""; contents += "
"; contents += "
"; contents += "

"; contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.
비밀번호 재설정을 위해 인증번호를 입력해주세요.

"; contents += "

%code%

"; contents += "

본 인증번호는 5분간 유효합니다.
비밀번호 재설정 신청 시각 : %date%

"; contents += "

문자온 서비스를 이용해 주셔서 감사합니다.

"; contents += "
"; contents += "

본 메일은 발신전용이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 고객센터를 통해 문의하여 주시기 바랍니다.

"; contents += "

주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)
사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : 제 2021-다산-0422
문의전화 : 070-4786-0008 | E-mail : help@iten.co.kr

"; contents += "

Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.

"; contents += "
"; contents += "
"; contents += "
"; contents += "
"; contents += ""; contents += ""; contents += ""; String repContents = contents; String code = ""; long seed = System.currentTimeMillis(); Random random = new Random(seed); // code = Integer.toString(random.nextInt(4)); StringBuffer randomCode = new StringBuffer(); for (int i = 0; i < 5; i++) { code = randomCode.append(Integer.toString(random.nextInt(10))).toString(); } repContents = repContents.replace("%code%", code); SimpleDateFormat format = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분"); Date nowdate = new Date(); String date = format.format(nowdate); repContents = repContents.replace("%date%", date); // 임시비밀번호 이메일로 보내기 SendMail sMail = new SendMail(); EmailVO mailSender = new EmailVO(); // 사용자 이메일 주소 mailSender.setSend_from("noreply@munjaon.co.kr"); // 발송자 이메일 주소 mailSender.setSend_to("tolag3@gmail.com"); // 메일 제목 mailSender.setTitle("문자온 비밀번호 재설정 인증번호입니다."); // 메일 내용 mailSender.setContents(repContents); // 메일 발송하기 /*sMail.sendMail(mailSender);*/ sMail.sendMail2(mailSender); }catch (Exception e) { System.out.println(e.getMessage()); } return "/"; } /** * 스팸문자이용제한페이지 * * @return String * @exception Exception */ // 스팸문자이용제한페이지 사전페이지 @RequestMapping(value = "/web/user/login/loginRestrictionUseBefore.do") public String loginRestrictionUseBefore(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("mberId") String mberId) throws Exception { MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(mberId); MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(mberManageVO); model.addAttribute("spamMemberInfoVO", spamMemberInfoVO); return "web/login/loginRestrictionUseBefore"; } // 스팸문자이용제한페이지 실제 페이지 @RequestMapping(value = "/web/user/login/loginRestrictionUse.do") public String loginRestrictionUse(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("mberId") String mberId) throws Exception { MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(mberId); MberManageVO spamMemberInfoVO = mberManageService.selectSpamMemberInfo(mberManageVO); model.addAttribute("spamMemberInfoVO", spamMemberInfoVO); if(spamMemberInfoVO.getFileCnt() != "0" && spamMemberInfoVO.getFileCnt() != null) { if(spamMemberInfoVO.getFilePath1() != null) { String filePathId1 = spamMemberInfoVO.getFilePath1().substring(spamMemberInfoVO.getFilePath1().lastIndexOf("/")+1); int idx = filePathId1.lastIndexOf("."); String fileId = filePathId1.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId1", info.getAtchFileId()); model.addAttribute("fileSn1", info.getFileSn()); } if(spamMemberInfoVO.getFilePath2() != null) { String filePathId2 = spamMemberInfoVO.getFilePath2().substring(spamMemberInfoVO.getFilePath2().lastIndexOf("/")+1); int idx = filePathId2.lastIndexOf("."); String fileId = filePathId2.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId2", info.getAtchFileId()); model.addAttribute("fileSn2", info.getFileSn()); } if(spamMemberInfoVO.getFilePath3() != null) { String filePathId3 = spamMemberInfoVO.getFilePath3().substring(spamMemberInfoVO.getFilePath3().lastIndexOf("/")+1); int idx = filePathId3.lastIndexOf("."); String fileId = filePathId3.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId3", info.getAtchFileId()); model.addAttribute("fileSn3", info.getFileSn()); } } return "web/login/loginRestrictionUse"; } // 스팸문자이용제한페이지 주소록 다운 요청 @RequestMapping(value = "/web/user/login/updateReqeustAddrAjax.do") public ModelAndView updateReqeustAddrAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model, @ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); try { mberManageVO.setSendSttus("N"); //주소록 전송 전 상태 'N' mberManageService.updateReqeustAddr(mberManageVO); // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // 이메일 체크 if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { String emailTitle = "회원관리 > 이용정지회원 주소록 요청"; // CS관리자 이메일 알림전송 mjonNoticeSendUtil.csAdminEmailNoticeSend("", mberManageVO.getMberId(), emailTitle); } // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { String smsTitle = "이용정지회원 주소록 요청"; // CS관리자 SMS 알림전송 mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 이용정지회원 주소록 요청 - " + mberManageVO.getMberId(); mjonCommon.sendSimpleSlackMsg(msg); } }catch(Exception e) { modelAndView.addObject("message", "주소록 요청에 실패했습니다."); modelAndView.addObject("result", "fail"); } modelAndView.addObject("message", "주소록 요청을 완료했습니다."); modelAndView.addObject("result", "success"); return modelAndView; } // 관리자 모바일환경 비번 저장여부 @RequestMapping(value = "/web/user/admMobilePwSaveCheckAjax.do") public ModelAndView admMobilePwSaveCheckAjax(@ModelAttribute("UserManageVO") UserManageVO userManageVO) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); boolean isSuccess = true; String mobilePwsaveYn = "N"; String msg = ""; try { userManageVO = userManageService.selectAdminMobilePwSaveCheck(userManageVO); if (userManageVO.getMobilePwsaveYn().equals("Y")) { mobilePwsaveYn = userManageVO.getMobilePwsaveYn(); } } catch(Exception e) { isSuccess = false; msg = e.getMessage(); } modelAndView.addObject("isSuccess", isSuccess); modelAndView.addObject("mobilePwsaveYn", mobilePwsaveYn); modelAndView.addObject("msg", msg); return modelAndView; } } class RequestWrapperForSecurity extends HttpServletRequestWrapper { private String username = null; private String password = null; public RequestWrapperForSecurity(HttpServletRequest request, String username, String password) { super(request); this.username = username; this.password = password; } @Override public String getServletPath() { return ((HttpServletRequest) super.getRequest()).getContextPath() + "/egov_security_login"; } @Override public String getRequestURI() { return ((HttpServletRequest) super.getRequest()).getContextPath() + "/egov_security_login"; } @Override public String getParameter(String name) { if (name.equals("egov_security_username")) { return username; } if (name.equals("egov_security_password")) { return password; } return super.getParameter(name); } }