File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-11-22
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
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.06 박지욱 최초 생성
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
* </pre>
*/
@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<TermsVO> termsList = new ArrayList<TermsVO>();
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<String, Object> 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<String, Object> 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<FileVO> result = null;
String wAtchFileId = ""; //사업자등록증 첨부파일 ID
String cAtchFileId = ""; //재직증명서 첨부파일 ID
final Map<String, MultipartFile> files = multiRequest.getFileMap();
//다중 업로드 처리
Map<String, MultipartFile> fileC = new LinkedHashMap<>(); //사업자등록증
Map<String, MultipartFile> fileW = new LinkedHashMap<>(); //재직증명서
if (!files.isEmpty()) {
Iterator<Map.Entry<String, MultipartFile>> it = files.entrySet().iterator();
int cIndex = 0;
int wIndex = 0;
while(it.hasNext()) {
Map.Entry<String, MultipartFile> 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<FileVO> resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", "");
wAtchFileId = fileMngService.insertFileInfs(resultC);
mberManageVO.setAtchFileId(wAtchFileId);
}
if(fileW != null) { // 재직증명서 첨부파일
List<FileVO> 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<String, Object> commandMap) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
String mberId = (String) commandMap.get("mberId");
//소문자로 변환
mberId = mberId.toLowerCase();
List<String> checkId = new ArrayList<String>();
//회원가입시 특정 아이디 사용 못하도록 제한 - 시스템에서 사용하는 단어 입력 금지시킴 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<String, Object> commandMap) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try{
//중복체크
String mblDn = (String) commandMap.get("mblDn");
List<String> checkMblDn = new ArrayList<String>();
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<String, Object> 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<MberManageConfigVO> 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<LoginPolicyVO> loginPolicyGroupList = new ArrayList<LoginPolicyVO>();
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<String, UsernamePasswordAuthenticationFilter> 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<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
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<String> lisRecentSearch = new ArrayList<String>(); 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<String, Object> 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<String, UsernamePasswordAuthenticationFilter> 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<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
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<String> lisRecentSearch = new ArrayList<String>(); 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<String, Object> 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<String, Object> 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("returnType", "B");
modelAndView.addObject("mberId", loginVO.getId());
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"); // 회원상태 B : 회원 탈퇴정보
LoginVO smiResultVO = loginService.actionLoginCmpChk(loginSmiChkVO);
if(null != smiResultVO.getId()) {
modelAndView.addObject("returnType", "C");
modelAndView.addObject("mberId", loginVO.getId());
modelAndView.addObject("status", "fail");
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("returnType", "A");
modelAndView.addObject("status", "fail");
modelAndView.addObject("msg", message);
return modelAndView;
}
String message = "로그인 성공했습니다.";
/* 일시 : 2024.11.18
* 내용 : 다중 인증번호 조회
* 작업자 : 이호영
*/
List<MberCertPhoneVO> 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<String, Object> 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<String, UsernamePasswordAuthenticationFilter> 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<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
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<String> lisRecentSearch = new ArrayList<String>(); 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<String, Object> 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.toString());
System.out.println("StringUtils.isNotEmpty(passFlag) : "+ StringUtils.isNotEmpty(passFlag));
if(!"Y".equals(passFlag)) {
sendLogVO = mjonMsgDataService.selectSysMsgLogCheck(sendLogVO);
if (sendLogVO==null) {
redirectAttributes.addFlashAttribute("fail2", true);
return "redirect:/web/user/login/login.do";
}
}
System.out.println("========================= : "+ passFlag);
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<String, UsernamePasswordAuthenticationFilter> 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<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
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<String> lisRecentSearch = new ArrayList<String>(); 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<String, Object> 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<String, UsernamePasswordAuthenticationFilter> 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<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
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<String, Object> 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<String, UsernamePasswordAuthenticationFilter> 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<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
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<String, Object> 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<String, UsernamePasswordAuthenticationFilter> 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, HttpServletRequest request) 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<MberCertPhoneVO> 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<UserManageVO> 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, request);
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<MjonMsgVO> 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<UserManageVO> 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<String, Object> 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<String, Object> 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<UserManageVO> 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<UserManageVO> 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<UserManageVO> 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 = "비밀번호 변경 인증번호입니다. <br> 인증번호는 : <br> %code% <br> 입니다."; */
String contents = "";
contents += "<!DOCTYPE html>";
contents += "<html lang=\"ko\">";
contents += "<head>";
contents += "<meta charset=\"UTF-8\">";
contents += "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">";
contents += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">";
contents += "<title>비밀번호 재발급 인증 메일 입니다.</title>";
contents += "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">";
contents += "<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>";
contents += "<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap\" rel=\"stylesheet\">";
contents += "</head>";
contents += "";
contents += "<body>";
contents += "<div class=\"wrap\" style=\"width: 100%; height: 100%; background-color: #e3e8f0; padding: 70px 0;\">";
contents += "<div class=\"box\" style=\"max-width: 700px; width: 98%; background-color: #fff; box-shadow: 0 0 5px rgba(0,0,0,0.2); border-radius: 20px; overflow: hidden; margin: 0 auto;\">";
contents += "<div class=\"area_top\" style=\"background-color: #2e5ac8; width: 100%; height: 80px; padding: 0 40px; box-sizing: border-box;\">";
contents += "<p style=\"display:inline-block; color: #fff; font-size: 24px; margin: 0; font-family: 'Noto Sans KR', sans-serif; line-height: 80px;\">";
contents += "<span style=\"font-weight: 600;\">비밀번호 재발급 인증</span> 메일입니다.</p> <a href=\"http://www.munjaon.co.kr\" target='_blank' style='text-decoration:none'><img src=\"http://www.munjaon.co.kr/publish/images/emailForm/top_logo.png\" alt=\"\" style=\"width: 94px; height: 53px; float: right; margin-top: 12px; vertical-align:top;\"></a>";
contents += "</div>";
/*contents += "<div class=\"area_top\" style=\"width: 100%; box-sizing: border-box; text-align:center; margin: 0;\">";
contents += "<img src=\"http://www.munjaon.co.kr/publish/images/emailForm/mail_top.png\" style=\"width: 100%; margin-top: -1px;\">";
contents += "</div>";*/
contents += "<div class=\"area_content\" style=\"padding: 6%;\">";
contents += "<p style=\"font-size: 18px; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0; font-weight: 400; font-family: 'Noto Sans KR', sans-serif;\">";
contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.<br>비밀번호 재설정을 위해 인증번호를 입력해주세요.</p>";
contents += "<p class=\"area_num\" style=\"background-color: #f3f4f5; width: 100%; font-family: 'Noto Sans KR', sans-serif; font-size: 36px; font-weight: 600; box-sizing: border-box; border-radius: 5px; letter-spacing: 3px; padding: 8px 30px; margin: 20px 0;\">%code%</p>";
contents += "<p style=\"font-size: 18px; font-family: 'Noto Sans KR', sans-serif; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0;\">본 인증번호는 5분간 유효합니다. <br>비밀번호 재설정 신청 시각 : <span style=\"margin: 0; color: #002c9a; font-weight: 500; vertical-align: top;\">%date%</span></p>";
contents += "<p style=\"padding-top: 40px; font-size: 18px; font-family: 'Noto Sans KR', sans-serif; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0;\">문자온 서비스를 이용해 주셔서 감사합니다.</p>";
contents += "<div class=\"info_mail\" style=\"width: 100%; border-top: 1px solid #d5d5d5; margin-top: 20px;\">";
contents += "<p style=\"font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">본 메일은 <span style=\"font-weight: 500;\">발신전용</span>이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 <span style=\"font-weight: 500;\">고객센터</span>를 통해 문의하여 주시기 바랍니다.</p>";
contents += "<p style=\"margin-top: 20px; font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스) <br> 사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : 제 2021-다산-0422 <br> 문의전화 : 1551-8011 | E-mail : help@iten.co.kr</p>";
contents += "<p style=\"margin-top: 20px; font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.</p>";
contents += "</div>";
contents += "</div>";
contents += "</div>";
contents += "</div>";
contents += "</body>";
contents += "";
contents += "</html>";
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<String, Object> 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<MberManageConfigVO> 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<String, Object> 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<String, Object> 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<String, Object> 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<UserManageVO> 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<NameValuePair> postParams = new ArrayList<NameValuePair>();
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<String, Object> 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<FileVO> 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<String, Object> 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<String, MultipartFile> files = multiRequest.getFileMap();
Map<String, MultipartFile> fileC = new LinkedHashMap<>(); //사업자등록증
Map<String, MultipartFile> fileW = new LinkedHashMap<>(); //재직증명서
if (!files.isEmpty()){
Iterator<Map.Entry<String, MultipartFile>> it = files.entrySet().iterator();
int cIndex = 0;
int wIndex = 0;
while(it.hasNext()) {
Map.Entry<String, MultipartFile> 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<FileVO> resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", "");
wAtchFileId = fileMngService.insertFileInfs(resultC);
mberManageVO.setAtchFileId(wAtchFileId);
}
if(fileW.size() > 0) { // 재직증명서 첨부파일
List<FileVO> 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 = "비밀번호 변경 인증번호입니다. <br> 인증번호는 : <br> %code% <br> 입니다."; */
String contents = "";
contents += "<!DOCTYPE html>";
contents += "<html lang=\"ko\">";
contents += "<head>";
contents += "<meta charset=\"UTF-8\">";
contents += "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">";
contents += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">";
contents += "<title>비밀번호 재발급 인증 메일 입니다.</title>";
contents += "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">";
contents += "<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>";
contents += "<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap\" rel=\"stylesheet\">";
contents += "</head>";
contents += "";
contents += "<body>";
contents += "<div class=\"wrap\" style=\"width: 100%; height: 100%; background-color: #e3e8f0; padding: 70px 0;\">";
contents += "<div class=\"box\" style=\"max-width: 700px; width: 98%; background-color: #fff; box-shadow: 0 0 5px rgba(0,0,0,0.2); border-radius: 20px; overflow: hidden; margin: 0 auto;\">";
/*contents += "<div class=\"area_top\" style=\"background: #333 url(www.munjaon.co.kr/publish/images/emailForm/top_bg.png) no-repeat; width: 100%; height: 80px; display: flex; padding: 0 40px; box-sizing: border-box; align-items: center; justify-content: space-between;\">";
contents += "<p style=\"color: #fff; font-size: 24px; margin: 0; font-family: 'Noto Sans KR', sans-serif; line-height: 80px;\">";
contents += "<span style=\"font-weight: 600;\">비밀번호 재발급 인증</span> 메일 입니다.</p> <img src=\"www.munjaon.co.kr/publish/images/emailForm/top_logo.png\" alt=\"\" style=\"width: auto;\">";*/
contents += "<div class=\"area_top\" style=\"width: 100%; box-sizing: border-box; text-align:center; margin: 0;\">";
contents += "<img src=\"www.munjaon.co.kr/publish/images/emailForm/mail_top.png\" style=\"width: 100%; margin-top: -1px;\">";
contents += "</div>";
contents += "<div class=\"area_content\" style=\"padding: 6%;\">";
contents += "<p style=\"font-size: 18px; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0; font-weight: 400; font-family: 'Noto Sans KR', sans-serif;\">";
contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.<br>비밀번호 재설정을 위해 인증번호를 입력해주세요.</p>";
contents += "<p class=\"area_num\" style=\"background-color: #f3f4f5; width: 100%; font-family: 'Noto Sans KR', sans-serif; font-size: 36px; font-weight: 600; box-sizing: border-box; border-radius: 5px; letter-spacing: 3px; padding: 8px 30px; margin: 20px 0;\">%code%</p>";
contents += "<p style=\"font-size: 18px; font-family: 'Noto Sans KR', sans-serif; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0;\">본 인증번호는 5분간 유효합니다. <br>비밀번호 재설정 신청 시각 : <span style=\"margin: 0; color: #002c9a; font-weight: 500; vertical-align: top;\">%date%</span></p>";
contents += "<p style=\"padding-top: 40px; font-size: 18px; font-family: 'Noto Sans KR', sans-serif; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0;\">문자온 서비스를 이용해 주셔서 감사합니다.</p>";
contents += "<div class=\"info_mail\" style=\"width: 100%; border-top: 1px solid #d5d5d5; margin-top: 20px;\">";
contents += "<p style=\"font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">본 메일은 <span style=\"font-weight: 500;\">발신전용</span>이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 <span style=\"font-weight: 500;\">고객센터</span>를 통해 문의하여 주시기 바랍니다.</p>";
contents += "<p style=\"margin-top: 20px; font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스) <br> 사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : 제 2021-다산-0422 <br> 문의전화 : 070-4786-0008 | E-mail : help@iten.co.kr</p>";
contents += "<p style=\"margin-top: 20px; font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.</p>";
contents += "</div>";
contents += "</div>";
contents += "</div>";
contents += "</div>";
contents += "</body>";
contents += "";
contents += "</html>";
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);
}
}