File name
Commit message
Commit date
File name
Commit message
Commit date
2024-08-23
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-08-23
File name
Commit message
Commit date
2024-08-23
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-08-23
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.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;
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);
// 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.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:/";
}
}
// 이벤트 결제 바로가기
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) 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 < 6; i++) {
code = randomCode.append(Integer.toString(random.nextInt(10))).toString();
}
contents = contents.replace("%code%", code);
mjonMsgVO.setSmsTxt(contents);
mjonMsgVO.setReserveYn("N");
// 시스템 문자발송 번호
mjonMsgVO.setCallFrom("15518011");
// 문자 수신 번호 jsp에서 받아와야함!
/* mjonMsgVO.setCallTo(callTo); */
// System.out.println("mjonMsgVO.toString()");
// System.out.println(mjonMsgVO.toString());
// System.out.println("mjonMsgVO.toString()");
// 사용자 유효성 검사
// id, hp, nm
try {
UserManageVO userManageVO = new UserManageVO();
userManageVO.setEmplyrId(mjonMsgVO.getUserId());
userManageVO.setEmplyrNm(mjonMsgVO.getSearchNm());
userManageVO.setMoblphonNo(mjonMsgVO.getCallTo());
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 {
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.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()); //한건 금액
mjonMsgVO.setMsgType("4");
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", "문자 전송이 완료되었습니다.");
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);
}
}