File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-11-22
package itn.let.uat.uia.web;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
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.icert.comm.secu.IcertSecuManager;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.LoginVO;
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.MJUtil;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cert.ip.service.CertIpService;
import itn.let.cert.ip.service.CertLoginLogService;
import itn.let.cert.ip.service.MberCertIpVO;
import itn.let.cert.ip.service.MberCertLoginLogVO;
import itn.let.fax.user.service.FaxGroupDataVO;
import itn.let.fax.user.service.FaxService;
import itn.let.kakao.user.sent.service.KakaoSentService;
import itn.let.kakao.user.sent.service.KakaoSentVO;
import itn.let.mjo.cert.service.CertService;
import itn.let.mjo.cert.service.CertVO;
import itn.let.mjo.event.service.MjonEventService;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.kisa.service.KisaService;
import itn.let.mjo.kisa.service.KisaVO;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjPhoneMemberVO;
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.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.mjo.pay.service.MjonPayVO;
import itn.let.sym.grd.service.MberGrdService;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
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.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.sim.service.EgovClntInfo;
import itn.let.utl.user.service.MjonNoticeSendUtil;
/**
* 일반 로그인, 인증서 로그인을 처리하는 컨트롤러 클래스
*
* @author 공통서비스 개발팀 박지욱
* @since 2009.03.06
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.06 박지욱 최초 생성
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
* </pre>
*/
@Controller
public class EgovMypageController {
static String RSA_WEB_KEY = "_RSA_WEB_Key_"; // 개인키 session key
static String RSA_INSTANCE = "RSA"; // rsa transformation
@Resource(name = "KakaoSentService")
private KakaoSentService kakaoSentService;
@Resource(name = "faxService")
private FaxService faxService;
/** EgovLoginService */
@Resource(name = "loginService")
private EgovLoginService loginService;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/** mberManageService */
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name="egovCertEtcIdGnrService")
private EgovIdGnrService egovCertEtcIdGnrService;
@Resource(name = "certService")
private CertService certService;
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil fileUtil;
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
@Resource(name = "EgovFileMngService")
private EgovFileMngService fileService;
@Resource(name = "KisaService")
private KisaService kisaService;
/** 알림전송 Util */
@Resource(name = "mjonNoticeSendUtil")
private MjonNoticeSendUtil mjonNoticeSendUtil;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "MjonMsgSentService")
private MjonMsgSentService mjonMsgSentService;
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
@Resource(name = "MjonEventService")
private MjonEventService mjonEventService;
@Resource(name="MjonCommon")
private MjonCommon mjonCommon;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
/** 등급제 관리 서비스 */
@Resource(name = "mberGrdService")
MberGrdService mberGrdService;
// /* CertLoginLogService */
@Resource(name = "CertLoginLogService")
private CertLoginLogService certLoginLogService;
// /* CertLoginLogService */
@Resource(name = "CertIpService")
private CertIpService certIpService;
/**
* 마이페이지 비밀번호 변경 탭
*/
@RequestMapping(value="/web/user/mberInfoIndex.do")
public String mberInfoIndex(
ModelMap model
, HttpServletRequest request
, RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
if(userId == "") {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
{//문자 전송 개인 단가 불러오기
//0.이벤트 진행중이 회원 정보 불러오기.
//이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다.
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(userId);
//mjonEventVO.setEventStatus("Y");
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
long eventDiffDate = 0;
float eventRemainCash = 0;
boolean compareEndDate = false;
if(eventMberInfo != null) {
String eventEndDate = eventMberInfo.getEventEndDate();
/**
* MJUtil.getCompareDate()
* 현재 날짜와 파라미터 전달 날짜를 비교
* 전달날짜를 지난경우 False를 리턴함.
* 현재날짜 이전 혹은 같은 날짜면 True를 리턴함.
*
* */
if(eventEndDate != null) {
compareEndDate = MJUtil.getCompareDate(eventEndDate);
eventRemainCash = (float) eventMberInfo.getEventRemainCash();
//이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴
//이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴
if(!compareEndDate || eventRemainCash < 7.5) {
if(!eventMberInfo.getEventStatus().equals("E")) {
//이벤트 상태값을 종료로 변경한다.
mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
mjonEventVO.setEventStatus("E");
mjonEventVO.setEventRemainCash(eventRemainCash);
mjonEventService.updateEventEndStatus(mjonEventVO);
eventMberInfo.setEventStatus("E");
}
}else {//이벤트 진행중이면 남은 날짜 계산해서 전달.
eventDiffDate = MJUtil.getDiffDateDay(eventEndDate);
}
}
}
//남은 날짜값을 절대값으로 변경(음수로 나오기 때문)
model.addAttribute("eventDiffDate", Math.abs(eventDiffDate));
model.addAttribute("compareEndDate", compareEndDate);
model.addAttribute("eventMberInfo", eventMberInfo);
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
// 등급제 단가 추출 => 시스템 단가에 적용
sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId);
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = new MberManageVO();
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
}
Float shortPrice = (float) mberManageVO.getShortPrice();
Float longPrice = (float) mberManageVO.getLongPrice();
Float picturePrice = (float) mberManageVO.getPicturePrice();
Float picture2Price = (float) mberManageVO.getPicture2Price();
Float picture3Price = (float) mberManageVO.getPicture3Price();
Float kakaoAtPrice = (float) mberManageVO.getKakaoAtPrice();
Float faxPrice = (float) mberManageVO.getFaxPrice();
int userMoney = (int) mberManageVO.getUserMoney();
String userPoint = mberManageVO.getUserPoint();
if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {
shortPrice = (float) sysJoinSetVO.getShortPrice();
longPrice = (float) sysJoinSetVO.getLongPrice();
picturePrice = (float) sysJoinSetVO.getPicturePrice();
picture2Price = (float) sysJoinSetVO.getPicture2Price();
picture3Price = (float) sysJoinSetVO.getPicture3Price();
}
if(kakaoAtPrice < 1) {
kakaoAtPrice = (float) sysJoinSetVO.getKakaoAtPrice();
}
if(faxPrice < 1) {
faxPrice = (float) sysJoinSetVO.getFaxPrice();
}
model.addAttribute("shortPrice", shortPrice);
model.addAttribute("longPrice", longPrice);
model.addAttribute("picturePrice", picturePrice);
model.addAttribute("picture2Price", picture2Price);
model.addAttribute("picture3Price", picture3Price);
model.addAttribute("kakaoAtPrice", kakaoAtPrice);
model.addAttribute("faxPrice", faxPrice);
model.addAttribute("userMoney", userMoney);
model.addAttribute("userPoint", userPoint);
model.addAttribute("mberManageVO", mberManageVO);
}
/*
* #1.로딩 문제 해결을 위해 ajax로 이전 2024-03-21
* /web/user/subcontent/mberInfo_cash_pointAjax.do
{//캐시 정보
List<MjonPayVO> cashInfoList = mjonPayService.selectCashInfoList(userId);
model.addAttribute("cashInfoList", cashInfoList);
}
{//포인트 정보
List<MjonPayVO> pointInfoList = mjonPayService.selectPointInfoList(userId);
model.addAttribute("pointInfoList", pointInfoList);
}
*/
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setUserId(userId);
/*
* #2.로딩 문제 해결을 위해 ajax로 이전 2024-03-21
* /web/user/subcontent/mberInfo_send_reservAjax.do
*
{ // 발송건수
mjonMsgVO.setReserveYn("N");
List<MjonMsgVO> sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("sendTotList", sendTotList);
}
{ // 예약건수
mjonMsgVO.setReserveYn("Y");
List<MjonMsgVO> reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("reservToList", reservToList);
}
*/
{// 충전캐시
String sumPayMoney = mjonPayService.selectSumPayMoney(userId);
model.addAttribute("sumPayMoney", sumPayMoney);
}
{// 충전포인트
String sumPoint = mjonPayService.selectSumPoint(userId);
model.addAttribute("sumPoint", sumPoint);
}
/*
{// 총 사용금액
MjonPayVO mjonPayVO = new MjonPayVO();
mjonPayVO.setUserId(userId);
List<MjonPayVO> usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO);
model.addAttribute("usedCashTotList", usedCashTotList);
}
*/
{// 사용가능한 금액
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
model.addAttribute("mberManageVO", mberManageVO);
}
{//발신번호 리스트 조회하기
MjPhoneMemberVO phoneMemberVO = new MjPhoneMemberVO();
phoneMemberVO.setUserId(userId);
phoneMemberVO.setSearchSortCnd("phmId");
phoneMemberVO.setSearchSortOrd("desc");
phoneMemberVO.setPhmType("01");//발신번호 타입의 번호만 조회
phoneMemberVO.setFirstIndex(0);//페이징 처리에서 값이 없으면 1이 넘어가서 데이터를 못불러 오는 오류가 있어서 0으로 셋팅.
List<MjPhoneMemberVO> sendNumberList = mjonMsgService.selectSendNumberList(phoneMemberVO);
MJUtil mjUtil = new MJUtil();
for(int i=0; i < sendNumberList.size(); i++) {
String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber());
sendNumberList.get(i).setPhoneNumber(phoneNumber);
}
int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0;
model.addAttribute("countNum", countNum);
model.addAttribute("sendNumberList", sendNumberList);
}
{//최근 발송 문자 내용 불러오기 - 최근 3개 내역만
List<MjonMsgSentVO> mjonMsgSentList = mberManageService.selectMberMsgSentLatestListNew20240320(userId);
model.addAttribute("mjonMsgSentList", mjonMsgSentList);
}
/*
* 2024-03-22 페이지 로딩 속도 개선을 위해 ajax로 처리
{//최근 발송 알림톡 내용 불러오기 - 최근 3개 내역만
KakaoSentVO kakaoSentVO = new KakaoSentVO();
kakaoSentVO.setUserId(userId);
kakaoSentVO.setTabType("at");
kakaoSentVO.setRecordCountPerPage(3);
kakaoSentVO.setFirstIndex(0);
kakaoSentVO.setListType("groupList");
kakaoSentVO.setStateType("all");
kakaoSentVO.setSearchSortOrd("desc");
kakaoSentVO.setSearchSortCnd("regdate");
List<KakaoSentVO> kakaoATSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
model.addAttribute("kakaoATSentList", kakaoATSentList);
}
*/
{//최근 발송 팩스 내용 불러오기 - 최근 3개 내역만
FaxGroupDataVO faxGroupDataVO = new FaxGroupDataVO();
faxGroupDataVO.setUserId(userId);
faxGroupDataVO.setRecordCountPerPage(3);
faxGroupDataVO.setFirstIndex(0);
List<FaxGroupDataVO> faxSendList = faxService.selectMyFaxSendList(faxGroupDataVO);
model.addAttribute("faxSendList", faxSendList);
}
model.addAttribute("pageTab", "myPageIndex");
model.addAttribute("loginVO", loginVO);
{
/**
* 후불제 회원 관련 사용 요금 내역 정보 조회하기
* 20240102 우영두 추가
* 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회
*
* */
//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산)
String totSumCashAfterPay = mjonPayService.selectTotalSumCashForAfterPay(userId);
model.addAttribute("totSumCashAfterPay", totSumCashAfterPay);
//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
String totSumPointAfterPay = mjonPayService.selectTotalSumPointForAfterPay(userId);
model.addAttribute("totSumPointAfterPay", totSumPointAfterPay);
//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
String totSumPaymentAfterPay = mjonPayService.selectTotSumPaymentAfterPay(userId);
model.addAttribute("totSumPaymentAfterPay", totSumPaymentAfterPay);
//누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산)
float p_i_re_point = 0;
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
if (sysJoinSetVO != null) {
p_i_re_point = sysJoinSetVO.getPointPer();
}
int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100));
model.addAttribute("sumPaymentPointAfterPay", paymentPointAfterPay);
//당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산)
float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay);
model.addAttribute("unPaymentAfterPay", unPaymentAfterPay);
//당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산)
int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100));
model.addAttribute("unPaymentPointAfterPay", unPaymentPointAfterPay);
}
return "web/user/mberInfoIndex";
}
/**
* 마이페이지 - 이용내역 - ajax
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
* @throws Exception
*/
@RequestMapping(value="/web/user/subcontent/mberInfo_cash_pointAjax.do")
public String mberInfo_cash_pointAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
HttpServletRequest request,
ModelMap model) throws Exception{
System.out.println("mberInfo_cash_pointAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
{//캐시 정보
List<MjonPayVO> cashInfoList = mjonPayService.selectCashInfoList(userId);
model.addAttribute("cashInfoList", cashInfoList);
}
{//포인트 정보
List<MjonPayVO> pointInfoList = mjonPayService.selectPointInfoList(userId);
model.addAttribute("pointInfoList", pointInfoList);
}
System.out.println("mberInfo_cash_pointAjax_end");
return "/web/user/subcontent/mberInfo_cash_pointAjax";
}
/**
* 마이페이지 - 이용내역 - 발송건수/예약건수 ajax
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
* @throws Exception
*/
@RequestMapping(value="/web/user/subcontent/mberInfo_send_reservAjax.do")
public String mberInfo_send_reservAjax(
HttpServletRequest request,
ModelMap model) throws Exception{
System.out.println("mberInfo_cash_pointAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setUserId(userId);
{ // 발송건수
mjonMsgVO.setReserveYn("N");
List<MjonMsgVO> sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("sendTotList", sendTotList);
}
{ // 예약건수
mjonMsgVO.setReserveYn("Y");
List<MjonMsgVO> reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("reservToList", reservToList);
}
System.out.println("mberInfo_cash_pointAjax_end");
return "/web/user/subcontent/mberInfo_send_reservAjax";
}
/**
* 마이페이지 - 최근발송내역-알림톡
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
* @throws Exception
*/
@RequestMapping(value="/web/user/subcontent/mberInfo_kakaoATSentListAjax.do")
public String mberInfo_kakaoATSentListAjax(
HttpServletRequest request,
ModelMap model) throws Exception{
System.out.println("mberInfo_kakaoATSentListAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
{//최근 발송 알림톡 내용 불러오기 - 최근 3개 내역만
KakaoSentVO kakaoSentVO = new KakaoSentVO();
kakaoSentVO.setUserId(userId);
kakaoSentVO.setTabType("at");
kakaoSentVO.setRecordCountPerPage(3);
kakaoSentVO.setFirstIndex(0);
kakaoSentVO.setListType("groupList");
kakaoSentVO.setStateType("all");
kakaoSentVO.setSearchSortOrd("desc");
kakaoSentVO.setSearchSortCnd("regdate");
List<KakaoSentVO> kakaoATSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
model.addAttribute("kakaoATSentList", kakaoATSentList);
}
System.out.println("mberInfo_kakaoATSentListAjax_end");
return "/web/user/subcontent/mberInfo_kakaoATSentListAjax";
}
//발송문자 건수 계산하는 함수
public String[] getTotalSendCnt(List<MjonMsgSentVO> mjonMsgSentVO) {
int totCnt = 0; //전체건수
int succCnt = 0; //성공건수
int FCnt = 0; //실패, 대기 건수
int WCnt = 0; //실패, 대기 건수
int totalSPrice = 0; //성공, 대기 금액 합산
int totalWPrice = 0; //성공, 대기 금액 합산
int totalFPrice = 0; //실패 금액 합산
for(int i=0; i< mjonMsgSentVO.size(); i++) {
String msgResultSts = mjonMsgSentVO.get(i).getMsgResultSts();
int msgResultCnt = Integer.parseInt(mjonMsgSentVO.get(i).getMsgResultCnt());
float msgEachPrice = Float.parseFloat(mjonMsgSentVO.get(i).getEachPrice());
if(msgResultSts.equals("S")) {
succCnt = succCnt + msgResultCnt;
totalSPrice = totalSPrice + (int)(msgResultCnt * msgEachPrice);
}else if(msgResultSts.equals("W")){
WCnt = WCnt + msgResultCnt;
totalWPrice = totalWPrice + (int)(msgResultCnt * msgEachPrice);
}else {
FCnt = FCnt + msgResultCnt;
totalFPrice = totalFPrice + (int)(msgResultCnt * msgEachPrice);
}
totCnt = totCnt + msgResultCnt;
}
String[] returnArr = {Integer.toString(totCnt), Integer.toString(succCnt), Integer.toString(WCnt), Integer.toString(FCnt), Integer.toString(totalSPrice), Integer.toString(totalWPrice), Integer.toString(totalFPrice)};
return returnArr;
}
/**
* 마이페이지 비밀번호 변경 탭
*/
@RequestMapping(value="/web/user/mberInfoChange.do")
public String mberInfoChange(
@ModelAttribute MberManageVO mberManageVO
, ModelMap model
, RedirectAttributes redirectAttributes) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
/*if(!userInfo.getAtchFileId().equals("")) {*/
//사업자등록증
if(!("").equals(userInfo.getAtchFileId())) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(userInfo.getAtchFileId());
List<FileVO> result = fileService.selectFileInfs(fileVO);
model.addAttribute("result", result);
}
//재직증명서
if(!("").equals(userInfo.getWorkAtchFileId())) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(userInfo.getWorkAtchFileId());
List<FileVO> result2 = fileService.selectFileInfs(fileVO);
model.addAttribute("result2", result2);
}
// 이메일 코드조회
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
voComCode.setCodeId("ITN031");
model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode));
model.addAttribute("pageTab", "mberInfoChange");
if("c".equals(userInfo.getDept())) { //기업회원
//기업회원 정보변경 신청 상태 확인 - 회원ID로 가장 최근 기업회원 정보 내역 조회
mberManageVO.setSearchHstType("04"); //담당자 변경 조회
MberManageVO cmpPhoneChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO);
model.addAttribute("cmpPhoneChangeManageVO", cmpPhoneChangeManageVO);
mberManageVO.setSearchHstType("03"); //사업장 변경 조회
MberManageVO cmpInfoChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO);
model.addAttribute("cmpInfoChangeManageVO", cmpInfoChangeManageVO);
return "web/user/mberCompanyInfoChange";
}
return "web/user/mberInfoChange";//개인회원
}
// 회원가입 - 모바일인증 중복 체크 Ajax, 만 18세 체크
@RequestMapping(value = "/web/user/mblDnCheckByIdAjax.do")
public ModelAndView selectMblDnCheckByIdAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
@RequestParam Map<String, Object> commandMap) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//중복체크
// String mblDn = (String) commandMap.get("mblDn");
String Id = (String) commandMap.get("id");
mberManageVO.setMberId(Id);
List<String> checkMblDn = new ArrayList<String>();
checkMblDn = mberManageService.selectMblDnCheckById(mberManageVO);
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);
return modelAndView;
}
/**
* 회원정보 조회 휴대폰 인증
*/
@RequestMapping("/web/user/selectKmcMberInfoAjax.do")
public String selectKmcMberInfoAjax(
HttpServletRequest request, ModelMap model
, @RequestParam Map<String, Object> commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
//개인회원일 시 mblDn 비교 후 본인 명의 휴대폰만 변경 가능하게끔
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
model.addAttribute("loginVO", loginVO);
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) ;
}
}
//KMC 본인인증 로그
AuthCertVO certVO = new AuthCertVO();
certVO.setMberId(kmcVO.getPlusInfo());
certVO.setCertNum(kmcVO.getCertNum());
certVO.setCertDate(kmcVO.getDate());
certVO.setCertDi(kmcVO.getDI());
certVO.setCertPhone(kmcVO.getPhoneNo());
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("KMC_회원정보 변경");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
//디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
//개인회원일 시 기존 DN가 본인인증 DN비고하여 본인 명의만 번호 변경 가능하게
if("p".equals(loginVO.getDept())) {
if(!mblDn.equals(DI)) {
kmcVO.setDnChk("N");
}
}
//LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
// model.addAttribute("loginVO", loginVO);
model.addAttribute("kmcVO", kmcVO);
return "web/user/mberInfoKmcReqPage";
}
/**
* 마이페이지 개인정보 변경
*/
@RequestMapping(value="/web/user/updateUserInfoAjax.do")
public ModelAndView updateUserInfoAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
userManageService.updateUserInfo(mberManageVO); //이메일, 이벤트 수신 여부와 개인회원의 휴대폰 변경 시 회원 테이블 update
if("c".equals(mberManageVO.getDept()) && "Y".equals(mberManageVO.getMoblphonNoChangeYn())) { //기업회원의 휴대폰 변경 시 기업 회원 히스토리 테이블에 insert 후 관리자의 승인 반려 처리
String cAtchFileId = mberManageVO.getWorkAtchFileId();
final Map<String, MultipartFile> files = multiRequest.getFileMap();
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("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name
fileW.put("fileW" + wIndex, mFile);
wIndex++;
}
}
if(fileW != null) { // 재직증명서 첨부파일
List<FileVO> resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", "");
cAtchFileId = fileMngService.insertFileInfs(resultW);
mberManageVO.setWorkAtchFileId(cAtchFileId);
}
}
mberManageVO.setHstType("04"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 4.기업회원 담당자 변경(공통코드)
mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드)
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setUniqId( user.getUniqId());
mberManageVO.setAtchFileId(""); //담당자변경은 사업자등록증 첨부X
//회원정보 조회해서 histy에 insert에 추가
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
mberManageVO.setBizType(userInfo.getBizType());
mberManageVO.setMberNm(userInfo.getMberNm());
mberManageVO.setBizNo(userInfo.getBizNo());
mberManageVO.setCeoNm(userInfo.getCeoNm());
mberManageService.insertCmpUsrHst(mberManageVO);
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
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;
}
/**
* 마이페이지 기업정보 변경
*/
@RequestMapping(value="/web/user/updateCmpUserInfoAjax.do")
public ModelAndView updateCmpUserInfoAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
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 != 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);
}
}
mberManageVO.setHstType("03"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드)
mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드)
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setUniqId( user.getUniqId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
//회원정보 조회해서 histy에 insert에 추가
mberManageVO.setManagerNm(userInfo.getManagerNm());
mberManageVO.setMoblphonNo(userInfo.getMoblphonNo());
mberManageService.insertCmpUsrHst(mberManageVO);
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
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;
}
/**
* 마이페이지 기업정보 변경 취소 처리
*/
@RequestMapping(value="/web/user/updateCmpUserInfoCancelAjax.do")
public ModelAndView updateCmpUserInfoCancelAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
modelAndView.addObject("result", "loginFail");
return modelAndView;
}
try {
//취소 회원 아이디 셋팅
mberManageVO.setLastUpdusrId(loginVO.getId());
//기업회원 변경 취소 Update 처리 hstType = 05, hstSttus = 04로 변경
mberManageService.updateCmpUserInfoCancel(mberManageVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
System.out.println("updateCmpUserInfoCancelAjax Controller Error!!!! " + e);
modelAndView.addObject("message", "기업회원 정보변경 취소요청 처리 중 오류가 발생하였습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
return modelAndView;
}
/* *//**
* 마이페이지 기업정보 변경
*//*
@RequestMapping(value="/web/user/updateCmpUserInfoAjax.do")
public ModelAndView updateCmpUserInfoAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String atchFileId = mberManageVO.getAtchFileId();
String isThumbFile = "";
final Map<String, MultipartFile> files = multiRequest.getFileMap();
if (!files.isEmpty()){
if ("".equals(atchFileId)) {
List<FileVO> result = fileUtil.parseFileInf(files, "MY_", 0, atchFileId , "", isThumbFile);
atchFileId = fileMngService.insertFileInfs(result);
mberManageVO.setAtchFileId(atchFileId);
}else {
FileVO fvo = new FileVO();
fvo.setAtchFileId(atchFileId);
int cnt = fileMngService.getMaxFileSN(fvo);
List<FileVO> result = fileUtil.parseFileInf(files, "MY_", cnt, atchFileId, "", isThumbFile);
fileMngService.updateFileInfs(result);
}
}
userManageService.updateUserInfo(mberManageVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
*/
/**
* 기업회원 전환
*/
@RequestMapping(value="/web/user/membershipChange.do")
public String membershipChange(ModelMap model) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
// 이메일 코드조회
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
voComCode.setCodeId("ITN031");
model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode));
model.addAttribute("pageTab", "membershipChange");
//기업회원전환 신청 상태 확인 - 회원ID로 가장 최근 기업회원 정보 내역 조회
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO);
if(null != cmpChangeManageVO) {
if("02".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원전환일 시
if("01".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 신청 상태일 시
model.addAttribute("cmpChangeManageVO", cmpChangeManageVO);
return "web/user/membershipChanging";
}else if("03".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 반려 상태일 시
model.addAttribute("cmpChangeManageVO", cmpChangeManageVO);
return "web/user/membershipChangeReturn";
}else if("02".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 승인 상태일 시
model.addAttribute("cmpChangeManageVO", cmpChangeManageVO);
return "web/user/membershipChangeOk";
}
}
}
return "web/user/membershipChange";
}
/**
* 기업회원 전환 변경
*/
@RequestMapping(value="/web/user/updateMembershipChangeAjax.do")
public ModelAndView updateMembershipChangeAjax(@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);
}
}
//디비 테이블에 저장하기
//22.05.11 - 회원테이블 update에서 기업회원 히스토리 테이블 insert로 수정
//관리자가 승인 시 기업회원 히스토리 테이블의 데이터로 회원테이블 update
//mberManageService.updateMembershipChange(mberManageVO);
mberManageVO.setHstType("02"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드)
mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드)
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setUniqId( user.getUniqId());
//기업회원 전환 시 휴대폰을 따로 입력 받지 않아, 회원 테이블의 전화번호 조회 후 설정
MberManageVO mberManageVO2 = mberManageService.selectMber(user.getId());
mberManageVO.setMoblphonNo(mberManageVO2.getMoblphonNo());
mberManageService.insertCmpUsrHst(mberManageVO);
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
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;
}
/**
* 비밀번호 변경 페이지
*/
@RequestMapping(value="/web/user/passwordChange.do")
public String passwordChange(ModelMap model)
throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "passwordChange");
return "web/user/passwordChange";
}
/**
* 기존 비밀번호 조회
*/
@RequestMapping(value="/web/user/selectPasswordCheckAjax.do")
public ModelAndView selectPasswordCheckAjax(@ModelAttribute UserManageVO userManageVO
, HttpServletRequest request
,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
userManageVO.setUniqId(loginVO.getId());
int pwCheck = mberManageService.selectPasswordCheck(userManageVO);
modelAndView.addObject("pwCheck", pwCheck);
modelAndView.addObject("result", "success");
// 요청페이지가 개인정보 변경 펴이지 일경우
if(userManageVO.getUserTy().equals("userInfoCh")){
//System.out.println("휴대폰 인증 ***********************************************");
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.authCertCheckFive(serverNm + "/web/user/selectKmcMberInfoAjax.do", loginVO.getId());
modelAndView.addObject("certVO", certVO);
}
}catch (Exception e){
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 비밀번호 변경
*/
@RequestMapping(value="/web/user/updatePasswordCheckAjax.do")
public ModelAndView updatePasswordCheckAjax(@ModelAttribute UserManageVO userManageVO
, HttpServletRequest request
,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
UserManageVO userCheckVO = new UserManageVO();
userCheckVO.setUniqId(loginVO.getId());
userCheckVO.setPassword(userManageVO.getOldPassword());
int pwCheck = mberManageService.selectPasswordCheck(userCheckVO);
if(pwCheck == 0) {
modelAndView.addObject("errType", "01");
modelAndView.addObject("message", "현재 비밀번호를 확인해 주세요");
modelAndView.addObject("result", "fail");
return modelAndView;
}
if(!userManageVO.getPassword().equals(userManageVO.getRsaPasswd())) {
modelAndView.addObject("errType", "02");
modelAndView.addObject("message", "새 비밀번호와 확인 비밀번호가 같지 않습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
// 해당 정보의 등록 페스워드 조회
userManageVO.setEmplyrId(loginVO.getId());
int beforePwCheck = mberManageService.selectMberPWOverlapCheck(userManageVO);
if (beforePwCheck != 0) {
modelAndView.addObject("errType", "03");
modelAndView.addObject("message", "사용한 적 있는 비밀번호 입니다. 다른 비밀번호를 입력해주세요.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
//비밀번호 규칙섬 검증 추가 - 취약점 조치
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("errType", "04");
modelAndView.addObject("message", "비밀번호 규칙을 확인해주세요.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
userManageVO.setEmplyrId(loginVO.getId());
userManageService.updateUserPWAjax(userManageVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "Error : " + e.getLocalizedMessage());
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 신규 발신번호 관리 등록
*/
@RequestMapping(value="/web/user/sendNumberManageRegister.do")
public String sendNumberManageRegister(
@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, RedirectAttributes redirectAttributes
, ModelMap model) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}else {
/**
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함
* 현재 로그인 세션도 만료 처리함
* */
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
if(!mberSttus) {
request.getSession().invalidate();
redirectAttributes.addFlashAttribute("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 발신번호 등록을 할 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/main/mainPage.do");
return redirectUrlMaker.getRedirectUrl();
}
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "sendNumberManage");
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
return "web/user/sendNumberManageRegister";
}
/**
* 발신번호 관리
*/
@RequestMapping(value="/web/user/sendNumberManage.do")
public String sendNumberManage(
@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
/*model.addAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");*/
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "sendNumberManage");
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
return "web/user/sendNumberManage";
}
/**
* 발신번호 리스트 Ajax
*/
@RequestMapping(value="/web/user/sendNumberListAjax.do")
public String sendNumberListAjax(
@ModelAttribute("searchVO") MjPhoneMemberVO searchVO
, HttpServletRequest request
, ModelMap model) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
searchVO.setPhmType("01"); //발신조회
searchVO.setUserId(userId);
searchVO.setFirstIndex(0);
searchVO.setRecordCountPerPage(1000);
if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
searchVO.setSearchSortCnd("phmId");
searchVO.setSearchSortOrd("desc");
}
if(!"".equals(searchVO.getSearchKeyword())) {
searchVO.setSearchKeyword(searchVO.getSearchKeyword().replaceAll("-", ""));
}
//발신번호 리스트 조회
searchVO.setPhmType("01"); //발신조회
List<MjPhoneMemberVO> sendNumberList = mjonMsgService.selectSendNumberList(searchVO);
MJUtil mjUtil = new MJUtil();
int rejectCnt = 0; //발신번호 반려 건수
int compCnt = 0; //인증완료 건수
for(int i=0; i < sendNumberList.size(); i++) {
String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber());
sendNumberList.get(i).setPhoneNumber(phoneNumber);
//발신번호 반려 건수 체크
if(sendNumberList.get(i).getAuthYn().equals("C")) {
rejectCnt++;
}
if(sendNumberList.get(i).getAuthYn().equals("Y")) {
compCnt++;
}
}
int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0;
model.addAttribute("countNum", countNum);
model.addAttribute("sendNumberList", sendNumberList);
model.addAttribute("rejectCnt", rejectCnt);
model.addAttribute("compCnt", compCnt);
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
model.addAttribute("mberManageVO", mberManageVO);
return "web/user/sendNumberListAjax";
}
/**
* 발신번호 등록 여부 확인
*/
@RequestMapping(value = "/web/user/updateSendNumberAjax.do")
public ModelAndView updateSendNumberAjax(
@ModelAttribute("searchVO") MjPhoneMemberVO mjPhoneMemberVO
, HttpServletRequest request
,HttpServletResponse response
,final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
int resultCnt = 0;
MjPhoneMemberVO resultPhoneInfo = new MjPhoneMemberVO();
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
mjPhoneMemberVO.setUserId(userId);
String atchFileId = "";
String isThumbFile = "";
String phmId = mjPhoneMemberVO.getPhmId();
String certId = "";
//회원 발신번호 정보 불러오기
resultPhoneInfo = mjonMsgService.selectSendPhoneNumberByPhmId(phmId);
final Map<String, MultipartFile> files = multiRequest.getFileMap();
if (!files.isEmpty()){
atchFileId = mjPhoneMemberVO.getAtchFileId();
if ("".equals(atchFileId)) {//신규 첨부파일 처리
List<FileVO> result = fileUtil.parseFileInf(files, "CERT_", 0, atchFileId, "", "");
atchFileId = fileMngService.insertFileInfs(result);
//resultPhoneInfo = mjonMsgService.selectSendPhoneNumberByPhmId(phmId);
//인증서류 데이터 입력하기
CertVO certVO = new CertVO();
certId = egovCertEtcIdGnrService.getNextStringId();
mjPhoneMemberVO.setCertId(certId);
certVO.setCertId(certId); //인증 파일 아이디
certVO.setSentPhoneNumber(resultPhoneInfo.getPhoneNumber()); //발신번호
certVO.setCertType("01"); //인증종류 : 발신 타입(01)
certVO.setAtchFileId(atchFileId); //첨부파일 아이디
certVO.setUserId(loginVO.getId()); //사용자 아이디
certVO.setFrstRegisterId(loginVO.getId()); //최초등록자
certService.insertCertFile(certVO);
} else {//기존 첨부파일 업데이트
FileVO fvo = new FileVO();
fvo.setAtchFileId(atchFileId);
int cnt = fileMngService.getMaxFileSN(fvo);
List<FileVO> result = fileUtil.parseFileInf(files, "CERT_", cnt, atchFileId, "", "");
fileMngService.updateFileInfs(result);
}
}
//발신번호 수정에 따른 상태값을 심사로 변경.
resultCnt = mjonMsgService.updateSendPhoneNumberAuthType(mjPhoneMemberVO);
if(resultCnt > 0) {
/*String title = "번호관리 > 발신번호 재승인 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), title);*/
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "발신번호 수정 요청이 접수 되었습니다.");
}else {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "발신번호 수정 요청 접수에 오류가 발생하였습니다.");
}
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
/**
* 발신번호 등록시 반려후 재승인 심사가 필요한 경우
* 관리자에게 재승인 신청 접수 내역을 알리는
* 메일 발송 및 문자 발송을 진행한다.
* 2022.09.26 우영두 수정
*
* 에러가 발생시 오류 메세지만 로그 기록하고 완료 처리함
* */
try {
// 즉시승인이 아닌경우 문자온 법인폰으로 알림 문자 발송하기.
if (resultCnt > 0) {
String title = "번호관리 > 발신번호 재승인 요청";
String userNm = resultPhoneInfo.getUserName();
String userId = resultPhoneInfo.getUserId();
String phoneNum = resultPhoneInfo.getPhoneNumber();
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(userNm, userId, title);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
MjonCommon mjCommon = new MjonCommon();
MjonMsgVO mjonMsgVO = new MjonMsgVO();
//발신번호 등록(관리자에게 알림이기에 발신번호도 법인폰 번호로 한다. 15518011 )
mjonMsgVO.setCallFrom("15518011");
//발송 문자 내용 등록
String smsTxt = "[발신번호 재승인 요청] "+ userNm +"(" + userId + ")/발신번호 " + phoneNum + "/재승인 요청";
mjonMsgVO.setSmsTxt(smsTxt);
//발송 문자 타입(단/장문) 등록
//문자열 길이 체크 해주기
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
smsTxt = smsTxt.replace("\r\n", "\n");
int FrBytes = smsTxt.getBytes(charset).length;
String msgType = "4";
//90바이트를 초과하는 경우 장문으로 발송
if(FrBytes > 90){
msgType = "6";
}
mjonMsgVO.setMsgType(msgType);
//그림이미지 첨부파일 갯수 0으로 셋팅
mjonMsgVO.setFileCnt("0");
// 문자타입 구분
if (mjonMsgVO.getMsgType().equals("4")) {
mjonMsgVO.setMsgDiv("S"); // 단문
}
else if (mjonMsgVO.getMsgType().equals("6")) {
if (mjonMsgVO.getFileCnt().equals("0")) {
mjonMsgVO.setMsgDiv("L"); // 장문
}
else {
mjonMsgVO.setMsgDiv("P"); // 그림
}
}
// 문자타입별 대표전송사 정보
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 resultCom = mjCommon.getAdminPhoneSendMsgDataComm(mjonMsgVO);
//문자온 법인폰으로 문자 발송 처리
mjonMsgDataService.insertAdmToMberMsgDataInfo(resultCom);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 발신번호 재승인 요청 - " + userNm +"("+ userId + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
}
} catch (Exception e) {
System.out.println("+++++++++++++++++++++++++++++ 발신번호 등록 재승인 요청문자온 법인폰으로 문자 발송 및 이메일 알림 발송 Function Error !!!" + e);
}
return modelAndView;
}
/**
* 발신번호 등록 여부 확인
*/
@RequestMapping(value = "/web/user/selectSendNumberAjax.do")
public ModelAndView selectSendNumberAjax(
@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO
, HttpServletRequest request
,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
//발신번호 차단 리스트 체크(아이디 상관없이 모든 번호에 대한 차단번호 체크 20220616)
int sendBlockNumberCheck = 0;
sendBlockNumberCheck = mjonMsgService.selectSendBlockPhonNumCheck(mjonMsgVO);
if(sendBlockNumberCheck != 0){
String message = "입력하신 발신번호는 차단된 발신번호 입니다.";
modelAndView.addObject("message", message);
modelAndView.addObject("result", "fail");
return modelAndView;
}
int sendNumberCheck = 0;
//발신번호 등록 중복 체크
sendNumberCheck = mjonMsgService.selectSendPhonNumCheck(mjonMsgVO);
if(sendNumberCheck != 0) {
String message = "이미 등록되어 있는 발신번호 입니다.";
modelAndView.addObject("message", message);
modelAndView.addObject("result", "fail");
}else {
//System.out.println(mjonMsgVO.getPhmAuthType() + " : ***********************************************");
//if(mjonMsgVO.getPhmAuthType().equals("01") || mjonMsgVO.getPhmAuthType() == "01") { // phone
//System.out.println("휴대폰 인증 ***********************************************");
LoginVO loginVO = new LoginVO();
loginVO.setId(mjonMsgVO.getUserId());
loginVO = loginService.selectKMCInfo(loginVO);
modelAndView.addObject("loginVO", loginVO);
mjonMsgVO.getCallFrom(); // 신규 등록할 발신번호
String name = loginVO.getMberNm(); // 이름
if(loginVO.getDept().equals("c")) {
name = loginVO.getManagerNm();
}
KmcCertChecker kmcCertCheck = new KmcCertChecker();
//kmc 본인인증 실/개발 서버 구분
String serverNm = "";
if(request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) {
serverNm = request.getScheme() + "://119.193.215.98:8882";
}else{
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
//AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/insertPhoneSendNumber.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), name);
AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/selectPhoneNumberCertChkAjax.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), "", mjonMsgVO.getMyNameFlag());
modelAndView.addObject("certVO", certVO);
/*}else if(mjonMsgVO.getPhmAuthType().equals("02") || mjonMsgVO.getPhmAuthType() == "02") { // ARS
System.out.println("ARS 인증 ***********************************************");
} else if(mjonMsgVO.getPhmAuthType().equals("03") || mjonMsgVO.getPhmAuthType() == "03") { // ARS
System.out.println("서류인증 ***********************************************");
} */
modelAndView.addObject("result", "success");
}
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 휴대폰 인증 본인, 타인 정보 확인
*/
@RequestMapping("/web/user/selectPhoneNumberCertChkAjax.do")
public String selectPhoneNumberCertChk(
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 = "";
IcertSecuManager seed = new 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) ;
}
}
/*
* plusInfo(본인인증 추가파라미터)
* 구분지 "§"
* [0] = mberId
* [1] = 개인 혹은 법인 회원 본인인증일 경우 flag
*
* */
String tmp = kmcVO.getPlusInfo();
String[] tmpResult = tmp.split("§");
//KMC 본인인증 로그
AuthCertVO certVO = new AuthCertVO();
certVO.setMberId(tmpResult[0]);
certVO.setCertNum(kmcVO.getCertNum());
certVO.setCertDate(kmcVO.getDate());
certVO.setCertDi(kmcVO.getDI());
certVO.setCertPhone(kmcVO.getPhoneNo());
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("KMC_발신번호 등록 인증");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
//디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
String resultDnFlag = "N";
if(DI.equals(mblDn)) {
resultDnFlag = "Y";
}
model.addAttribute("resultDnFlag", resultDnFlag);
System.out.println("START 휴대폰인증");
System.out.println("휴대폰인증 => myNameFlag : " + tmpResult[1]);
/*
* 개인회원 - 본인명의 본인인증의 경우
* 휴대폰 본인인증 시 회원가입자 이름과 동일해야만 승인
* 법인회원 - 본인명의 본인인증의 경우
* 휴대폰 본인인증 시 회원가입자 이름과 동일해야만 승인
* 이준호_230314
* http://pms.iten.co.kr:9999/issues/3088
*/
//=======================시작=========================
//개인 본인명의 - Y
//법인 대표 - Y
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
mberManageVO = userManageService.selectUserInfo(mberManageVO);
String ceoNm = mberManageVO.getCeoNm() == null ? "" : mberManageVO.getCeoNm();
String managerNm = mberManageVO.getManagerNm() == null ? "" : mberManageVO.getManagerNm();
String resultNameChk = "";
//본인인증 호출부에서 myNameFlag값 == tmpResult[1]
if("Y".equals(tmpResult[1])) {
if("p".equals(mberManageVO.getDept())) {
//개인회원일경우
//이름에 본인인증결과(이름)이 같을 경우
if(kmcVO.getName().trim().equals(loginVO.getName().trim())) {
resultNameChk = "Y";
}
else {
resultNameChk = "N";
}
System.out.println("휴대폰인증 => 개인회원 회원이름 : " + loginVO.getName().trim());
System.out.println("휴대폰인증 => 개인회원 인증이름 : " + kmcVO.getName().trim());
System.out.println("휴대폰인증 => 개인회원 resultNameChk : " + resultNameChk);
}
if("c".equals(mberManageVO.getDept())) {
//법인회원 일 경우
if(ceoNm.contains(kmcVO.getName().trim())) {
resultNameChk = "Y";
}
//대표자명에 본인인증결과(이름)이 포함 되지 않을 경우
else {
resultNameChk = "N";
}
System.out.println("휴대폰인증 => 기업회원(대표) 대표이름 : " + ceoNm);
System.out.println("휴대폰인증 => 기업회원(대표) 인증이름 : " + kmcVO.getName().trim());
System.out.println("휴대폰인증 => 기업회원(대표) resultNameChk : " + resultNameChk);
}
}
else {
/*
// 기업회원>직원 인경우
if("c".equals(mberManageVO.getDept())) {
//법인회원 일 경우
if(managerNm.equals(kmcVO.getName().trim())) {
resultNameChk = "Y";
}
//대표자명에 본인인증결과(이름)이 포함 되지 않을 경우
else {
resultNameChk = "N";
}
System.out.println("휴대폰인증 => 기업회원(직원) 직원이름 : " + managerNm);
System.out.println("휴대폰인증 => 기업회원(직원) 인증이름 : " + kmcVO.getName().trim());
System.out.println("휴대폰인증 => 기업회원(직원) resultNameChk : " + resultNameChk);
}
*/
}
System.out.println("END 휴대폰인증");
model.addAttribute("resultNameChk", resultNameChk);
//=======================끝=========================
String birthDay_tmp = "";
try {
birthDay_tmp = kmcVO.getMBirthDay().length() != 0 ? kmcVO.getMBirthDay() : kmcVO.getBirthDay();
} catch (Exception e) {
birthDay_tmp = birthDay;
}
model.addAttribute("CI", kmcVO.getCI());
model.addAttribute("birthDay", birthDay_tmp);
return "web/user/selectPhoneNumberCertChkReq";
}
/**
* 휴대폰 인증 발신번호 등록
*/
@RequestMapping("/web/user/testtest.do")
public String test222(
HttpServletRequest request, ModelMap model
, @RequestParam Map<String, Object> commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
model.addAttribute("resultDnFlag", "Y");
return "web/user/selectPhoneNumberCertChkReq";
}
/**
* 휴대폰 인증 발신번호 등록
*/
@RequestMapping("/web/user/insertPhoneSendNumber.do")
public String insertPhoneSendNumber(
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 = "";
IcertSecuManager seed = new 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) ;
}
}
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setUserId(plusInfo);
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setPhmAuthType("01");
mjPhoneMemberVO.setFrstRegisterId(plusInfo);
mjPhoneMemberVO.setLastUpdusrId(plusInfo);
mjPhoneMemberVO.setPhoneNumber(phoneNo);
mjPhoneMemberVO.setUserName(name);
mjPhoneMemberVO.setAuthYn("Y");
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
model.addAttribute("kmcVO", kmcVO);
return "web/user/sendNumberKmcReqPage";
}
/**
* ARS 인증 발신번호 등록
*/
@RequestMapping("/web/user/insertArsSendNumberAjax.do")
public ModelAndView insertArsSendNumberAjax(CertVO certVO
, HttpServletResponse response
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setUserId(loginVO.getId());
mjPhoneMemberVO.setPhmAuthType("02");
mjPhoneMemberVO.setFrstRegisterId(loginVO.getId());
mjPhoneMemberVO.setLastUpdusrId(loginVO.getId());
mjPhoneMemberVO.setPhoneNumber(certVO.getSentPhoneNumber()); // 발송 전화번호
mjPhoneMemberVO.setUserName(loginVO.getName());
mjPhoneMemberVO.setAuthYn("Y");
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 서류인증(통신사 가입 증명서) 등록
*/
@SuppressWarnings("unused")
@RequestMapping("/web/user/insertDocumentSendNumberAjax.do")
public ModelAndView insertDocumentSendNumberAjax(
CertVO certVO
, HttpServletResponse response
, HttpServletRequest request
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setOwnerName(certVO.getOwnerName()); //본인인증 명의 이름 세팅
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
// 발신번호 서류관리 등록 [시작]
try {
String atchFileId = "";
String isThumbFile = "";
final Map<String, MultipartFile> files = multiRequest.getFileMap();
if (!files.isEmpty()){
List<FileVO> result = fileUtil.parseFileInf(files, "CERT_", 0, atchFileId , "", isThumbFile);
atchFileId = fileMngService.insertFileInfs(result);
certVO.setAtchFileId(atchFileId);
//인증서류 데이터 입력하기
certVO.setCertId(egovCertEtcIdGnrService.getNextStringId());
certVO.setUserId(loginVO.getId());
certVO.setFrstRegisterId(loginVO.getId());
certService.insertCertFile(certVO);
}
// 발신번호 서류관리 등록 [끝]
// 발신번호 등록 [시작]
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setUserId(loginVO.getId());
mjPhoneMemberVO.setCertId(certVO.getCertId());
mjPhoneMemberVO.setPhmAuthType(certVO.getCertType()); //번호 인증 타입 01:휴대폰인증, 03: 서류인증
mjPhoneMemberVO.setFrstRegisterId(loginVO.getId());
mjPhoneMemberVO.setLastUpdusrId(loginVO.getId());
mjPhoneMemberVO.setPhoneNumber(certVO.getSentPhoneNumber()); // 발송 전화번호
if(!"".equals(certVO.getSendPhoneNumber()) && certVO.getSendPhoneNumber() != null) { //230530 추가 - 고객이 인증 후 입력 한 발신번호를 수정하면, 수정 한 발신번호가 등록되어서 인증했을 경우 인증한 번호로 발신번호 등록하게끔 추가
mjPhoneMemberVO.setPhoneNumber(certVO.getSendPhoneNumber());
}
mjPhoneMemberVO.setUserName(loginVO.getName());
mjPhoneMemberVO.setSendPhoneNumber(certVO.getSendPhoneNumber()); // 확인 전화번호
mjPhoneMemberVO.setPhmValue(certVO.getPhmValue()); //비고
mjPhoneMemberVO.setNameType(certVO.getNameType());
mjPhoneMemberVO.setDept(certVO.getDept());
mjPhoneMemberVO.setCI(certVO.getCI()); // CI값
mjPhoneMemberVO.setBirthDay(certVO.getBirthDay()); // 생년월일
//개인회원 본인 인증인 경우 핸드폰 번호 즉시 승인해주기
String dept = certVO.getDept();
String nameType = certVO.getNameType();
String certType = certVO.getCertType();
if(StringUtil.isNotEmpty(dept) && StringUtil.isNotEmpty(nameType)) {
//회원종류 개인, 인증 종류 휴대폰 본인 인증인경우 즉시 승인
if(dept.equals("p") && nameType.equals("5") && certType.equals("01")) {
mjPhoneMemberVO.setAuthYn("Y");
}else if(dept.equals("c") && nameType.equals("2") && certType.equals("01")){
//기업회원 중 대표 이면서 휴대폰 인증인 경우 즉시 승인
mjPhoneMemberVO.setAuthYn("Y");
}else {
mjPhoneMemberVO.setAuthYn("H");
}
}else {
mjPhoneMemberVO.setAuthYn("H");
}
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
// 발신번호 등록 [끝]
// 즉시승인이 아닌경우 관리자에게 이메일 발송
/*if (!mjPhoneMemberVO.getAuthYn().equals("Y")) {
String title = "번호관리 > 발신번호 승인 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), title);
}*/
modelAndView.addObject("result", "success");
}catch (Exception e) {
System.out.println("발신번호 등록 오류 아이디 : " + loginVO.getId());
System.out.println("발신번호 등록 오류 내용 : " + e.getMessage());
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
/**
* 발신번호 등록시 승인 심사가 필요한 경우
* 관리자에게 승인 신청 접수 내역을 알리는
* 메일 발송 및 문자 발송을 진행한다.
* 2022.09.26 우영두 수정
*
* 에러가 발생시 오류 메세지만 로그 기록하고 완료 처리함
* */
try {
// 즉시승인이 아닌경우 문자온 법인폰으로 알림 문자 발송하기.
if (!mjPhoneMemberVO.getAuthYn().equals("Y")) {
String title = "번호관리 > 발신번호 승인 요청";
String userNm = mjPhoneMemberVO.getUserName();
String userId = mjPhoneMemberVO.getUserId();
String phoneNum = mjPhoneMemberVO.getPhoneNumber();
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(userNm, userId, title);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
MjonCommon mjCommon = new MjonCommon();
MjonMsgVO mjonMsgVO = new MjonMsgVO();
//발신번호 등록(관리자에게 알림이기에 발신번호도 법인폰 번호로 한다. 15518011 )
mjonMsgVO.setCallFrom("15518011");
//발송 문자 내용 등록
String smsTxt = "[발신번호 승인 요청] "+ userNm +"(" + userId + ")/발신번호 " + phoneNum + "/승인 요청";
mjonMsgVO.setSmsTxt(smsTxt);
//발송 문자 타입(단/장문) 등록
//문자열 길이 체크 해주기
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
smsTxt = smsTxt.replace("\r\n", "\n");
int FrBytes = smsTxt.getBytes(charset).length;
String msgType = "4";
//90바이트를 초과하는 경우 장문으로 발송
if(FrBytes > 90){
msgType = "6";
}
mjonMsgVO.setMsgType(msgType);
//그림이미지 첨부파일 갯수 0으로 셋팅
mjonMsgVO.setFileCnt("0");
// 문자타입 구분
if (mjonMsgVO.getMsgType().equals("4")) {
mjonMsgVO.setMsgDiv("S"); // 단문
}
else if (mjonMsgVO.getMsgType().equals("6")) {
if (mjonMsgVO.getFileCnt().equals("0")) {
mjonMsgVO.setMsgDiv("L"); // 장문
}
else {
mjonMsgVO.setMsgDiv("P"); // 그림
}
}
// 문자타입별 대표전송사 정보
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 resultCom = mjCommon.getAdminPhoneSendMsgDataComm(mjonMsgVO);
//문자온 법인폰으로 문자 발송 처리
mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 발신번호 승인 요청 - " + userNm +"("+ userId + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
}
} catch (Exception e) {
System.out.println("+++++++++++++++++++++++++++++ 발신번호 등록 승인 요청 문자온 법인폰으로 문자 발송 및 이메일 알림 발송 Function Error !!!" + e);
}
return modelAndView;
}
/**
* 발신번호 삭제
*/
@RequestMapping(value = "/web/user/deleteSendNumberAjax.do")
public ModelAndView deleteSendNumberAjax(@ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
mjPhoneMemberVO.setUserId(loginVO.getId());
//삭제 전 기본번호 조회
String baseYId = mjonMsgService.selectBaseYPhoneNum(mjPhoneMemberVO);
try {
mjonMsgService.deleteSendNumberDelete(mjPhoneMemberVO);
//삭제 번호가 기본번호 일 시 다른번호 기본번호 설정하기
if(baseYId != null && baseYId.equals(mjPhoneMemberVO.getPhmId())) {
mjonMsgService.updateBaseYPhoneNumLately(mjPhoneMemberVO);
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 발신번호 일괄 삭제
*/
@RequestMapping(value = "/web/user/deleteSendNumberAllAjax.do")
public ModelAndView deleteSendNumberAllAjax(@RequestParam("chk") String[] chk, @ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
mjPhoneMemberVO.setUserId(loginVO.getId());
//삭제 전 기본번호 조회
String baseYId = mjonMsgService.selectBaseYPhoneNum(mjPhoneMemberVO);
try {
for(String id: chk) {
mjPhoneMemberVO.setPhmId(id);
mjonMsgService.deleteSendNumberDelete(mjPhoneMemberVO);
//삭제 번호가 기본번호 일 시 다른번호 기본번호 설정하기
if(baseYId != null && baseYId.equals(mjPhoneMemberVO.getPhmId())) {
mjonMsgService.updateBaseYPhoneNumLately(mjPhoneMemberVO);
}
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 발신번호 기본번호 설정
*/
@RequestMapping(value = "/web/user/updateSendNumberBaseYnAjax.do")
public ModelAndView updateSendNumberBaseYnAjax(@RequestParam("baseId") String baseId, @ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
try {
mjPhoneMemberVO.setUserId(loginVO.getId());
mjPhoneMemberVO.setPhmId(baseId);
//업데이트문 개발 시작
mjonMsgService.updateSendNumberBaseYn(mjPhoneMemberVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 알림설정
*/
@RequestMapping(value="/web/user/notifyManage.do")
public String notifyManage(
@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, ModelMap model) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
model.addAttribute("pageTab", "notifyManage");
return "web/user/notifyManage";
}
/**
* 발송결과 알림 수정
*/
@RequestMapping(value = "/web/user/updateSandResultAjax.do")
public ModelAndView updateSandResultAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
if(mberManageVO.getUserTy().equals("tab1")) {
userManageService.updateSandResul(mberManageVO);
}else if(mberManageVO.getUserTy().equals("tab2")) {
userManageService.updateNoticet(mberManageVO);
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 회원탈퇴 본인인증 화면
*/
@RequestMapping(value="/web/user/mberSecession.do")
public String mberSecession(@ModelAttribute MberManageVO mberManageVO
, ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "mberSecession");
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
String name = userInfo.getMberNm(); // 이름
if(loginVO.getDept().equals("c")) {
name = userInfo.getManagerNm();
}
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.authCertCheckSeven(serverNm + "/web/user/selectMberSecessionAjax.do", name);
model.addAttribute("certVO", certVO);
return "web/user/mberSecession";
}
/**
* 회원탈퇴 본인인증 화면
*/
@RequestMapping(value="/web/user/mberSecureLogin.do")
public String secureLogin(@ModelAttribute("mberCertLoginLogVO") MberCertLoginLogVO mberCertLoginLogVO
, ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
try {
System.out.println("test Try +++ ");
// secuLoginFlag 값을 Model에 추가
if(mberCertLoginLogVO == null) {
model.addAttribute("secuLoginFlag", "");
}else {
model.addAttribute("secuLoginFlag", mberCertLoginLogVO.getSecuLoginFlag());
}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
//로그인 권한정보 불러오기
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mberCertLoginLogVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mberCertLoginLogVO.getPageUnit());
paginationInfo.setPageSize(mberCertLoginLogVO.getPageSize());
mberCertLoginLogVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mberCertLoginLogVO.setLastIndex(paginationInfo.getLastRecordIndex());
mberCertLoginLogVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(mberCertLoginLogVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mberCertLoginLogVO.setSearchSortCnd("LOGIN_DT");
mberCertLoginLogVO.setSearchSortOrd("desc");
}
mberCertLoginLogVO.setLoginId(userId);
//전체 발송 리스트 불러오기
List<MberCertLoginLogVO> resultList = certLoginLogService.findAllCertLoginLogVO(mberCertLoginLogVO);
model.addAttribute("resultList", resultList);
model.addAttribute("resultListCnt", resultList.size());
paginationInfo.setTotalRecordCount( resultList.size()> 0 ? resultList.get(0).getTotCnt() : 0);
model.addAttribute("paginationInfo", paginationInfo);
// 접속 IP
String cennectIP = EgovClntInfo.getClntIP(request);
model.addAttribute("cennectIP", cennectIP);
// 접속 IP가 등록되어있는지 확인
MberCertIpVO mberCertIpVO = new MberCertIpVO();
mberCertIpVO.setCertIp(cennectIP);
mberCertIpVO.setMberId(userId);
model.addAttribute("chkcertRegIP", certIpService.checkRegCertIp(mberCertIpVO));
{
/**
* 보안인증 본인인증 기능추가
* 20241120 원영현 과장 추가
* */
KmcCertChecker kmcCertCheck = new KmcCertChecker();
//kmc 본인인증 실/개발 서버 구분
String serverNm = "";
if(request.getServerName().contains("192.168.0.60") || request.getServerName().contains("localhost")) {
serverNm = request.getScheme() + "://192.168.0.60:8085";
}else{
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
System.out.println("@@@ serverNm : " + serverNm);
AuthCertVO certVO = kmcCertCheck.authCertCheckNine(serverNm + "/web/user/selectSecurityAuthn.do", loginVO.getId());
model.addAttribute("certVO", certVO);
}
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
// 탭 하이라이트
model.addAttribute("pageTab", "mberSecureLogin");
//디비 테이블에 저장하기ㅣ
AuthCertVO authCertVO = new AuthCertVO();
authCertVO.setMberId(userId);
authCertVO.setCertType("secureLoginOFF");
String certLogRegDate = mberManageService.findTopByregDateFromCertLog(authCertVO);
// 탭 하이라이트
model.addAttribute("certLogRegDate", certLogRegDate);
return "web/user/mberSecureLogin";
}
/**
* 회원탈퇴 상세정보 화면
*/
@RequestMapping(value="/web/user/mberSecessionInfo.do")
public String mberSecessionInfo(@ModelAttribute MberManageVO mberManageVO
, RedirectAttributes redirectAttributes
, ModelMap model) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "mberSecession");
//본인인증 했는지 확인 필요
if(mberManageVO.getKeyCheck() == null || !mberManageVO.getKeyCheck().equals("Y")) {
redirectAttributes.addFlashAttribute("message", "본인인증 진행 하세요.");
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/user/mberSecession.do");
return redirectUrlMaker.getRedirectUrl();
}
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
return "web/user/mberSecessionInfo";
}
/**
* 회원탈퇴
*/
@RequestMapping(value="/web/user/mberDeleteInfoAjax.do")
public ModelAndView mberDeleteInfoAjax(MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setMberId(loginVO.getId());
userManageService.updateDeleteInfo(mberManageVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 회원탈퇴 본인인증
*/
@RequestMapping("/web/user/selectMberSecessionAjax.do")
public String selectMberSecessionAjax(
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) ;
}
}
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setUserId(plusInfo);
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setPhmAuthType("01");
mjPhoneMemberVO.setFrstRegisterId(plusInfo);
mjPhoneMemberVO.setLastUpdusrId(plusInfo);
mjPhoneMemberVO.setPhoneNumber(phoneNo);
mjPhoneMemberVO.setUserName(name);
mjPhoneMemberVO.setAuthYn("Y");
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
model.addAttribute("kmcVO", kmcVO);
return "web/user/mberSecessionKmcReqPage";
}
// 파라미터 유효성 검증 --------------------------------------------
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";
}
public Boolean findIdKmcCheck(String DI, String Name, String PhoneNo) throws Exception {
UserManageVO userManageVO = new UserManageVO();
userManageVO.setEmplyrNm(Name);
userManageVO.setMoblphonNo(PhoneNo);
userManageVO.setMblDn(DI);
List<UserManageVO> usedNmList = userManageService.selectUserIdAjax(userManageVO);
boolean TorF = usedNmList.size() > 0 ? true : false;
return TorF;
}
/**
* KISA 신고 목록
*/
@RequestMapping(value="/web/user/kisaReport.do")
public String kisaReport(
@ModelAttribute KisaVO kisaVO
, HttpServletRequest request
, ModelMap model) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
kisaVO.setMberId(loginVO.getId());
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
model.addAttribute("pageTab", "kisaReport");
// List Start
if(kisaVO.getPageUnit() != 10) {
kisaVO.setPageUnit(kisaVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(kisaVO.getPageIndex());
paginationInfo.setRecordCountPerPage(kisaVO.getPageUnit());
paginationInfo.setPageSize(kisaVO.getPageSize());
kisaVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
kisaVO.setLastIndex(paginationInfo.getLastRecordIndex());
kisaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(kisaVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
kisaVO.setSearchSortCnd("kisaId");
kisaVO.setSearchSortOrd("desc");
}
List<KisaVO> kisaList = kisaService.selectKisaList(kisaVO);
int totCnt = 0;
if(kisaList.size() > 0) {
totCnt = kisaList.get(0).getTotcnt();
}
model.addAttribute("kisaList", kisaList);
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
return "web/user/kisaReport";
}
/**
* KISA 신고 상세
*/
@RequestMapping(value="/web/user/kisaReportDetailAjax.do")
public ModelAndView kisaReportDetailAjax(@ModelAttribute KisaVO kisaVO,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
List<FileVO> fileList = null;
try {
kisaVO = kisaService.selectKisaDetail(kisaVO);
if(kisaVO.getAtchFileId() !=null) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(kisaVO.getAtchFileId());
fileList = fileService.selectFileInfs(fileVO);
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("result", kisaVO);
model.addAttribute("fileList", fileList);
return modelAndView;
}
/**
* KISA 서명자료(첨부파일) 목록
*/
@RequestMapping(value="/web/user/kisaSignFileListAjax.do")
public ModelAndView kisaSignFileListAjax(@ModelAttribute KisaVO kisaVO,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
List<FileVO> fileList = null;
try {
kisaVO = kisaService.selectKisaDetail(kisaVO);
if(kisaVO.getAtchFileId2() !=null) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(kisaVO.getAtchFileId2());
fileList = fileService.selectFileInfs(fileVO);
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
model.addAttribute("fileList", fileList);
return modelAndView;
}
/**
* KISA 서명 파일업로드
*/
@RequestMapping(value="/web/user/kisaSignFileSaveAjax.do")
public ModelAndView kisaSignFileSaveAjax(final MultipartHttpServletRequest multiRequest
, KisaVO kisaVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
kisaVO = kisaService.selectKisaDetail(kisaVO);
String atchFileId2 = kisaVO.getAtchFileId2();
final Map<String, MultipartFile> files = multiRequest.getFileMap();
if (!files.isEmpty()) {
if ("".equals(atchFileId2)) {
List<FileVO> result = fileUtil.parseFileInf(files, "KISA_SIGN_", 0, atchFileId2, "", "");
atchFileId2 = fileMngService.insertFileInfs(result);
kisaVO.setAtchFileId2(atchFileId2);
} else {
FileVO fvo = new FileVO();
fvo.setAtchFileId(atchFileId2);
int cnt = fileMngService.getMaxFileSN(fvo);
List<FileVO> result = fileUtil.parseFileInf(files, "KISA_", cnt, atchFileId2, "", "");
fileMngService.updateFileInfs(result);
}
}
kisaVO.setKisaReceptState("4"); // KISA 소명자료 제출 완료
kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close
kisaService.updateKisa(kisaVO);
modelAndView.addObject("result", "success");
return modelAndView;
}
/**
* KISA 서명하기
*/
@RequestMapping(value="/web/user/kisaSignSaveAjax.do")
public ModelAndView kisaSignSaveAjax(final MultipartHttpServletRequest multiRequest
, KisaVO kisaVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
// 날짜
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
// 서명정보
String kisaSignNm = "";
String kisaSignPhoneNo = "";
String kisaSignPnttm = "";
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO != null) {
// 서명정보
kisaSignNm = loginVO.getName();
kisaSignPhoneNo = loginVO.getMoblphonNo();
kisaSignPnttm = sdf1.format(now);
for(String kisaId : kisaVO.getKisaIds()) {
kisaVO.setKisaId(kisaId);
kisaVO = kisaService.selectKisaDetail(kisaVO);
// 업데이트
kisaVO.setKisaSignNm(kisaSignNm);
kisaVO.setKisaSignPhoneNo(kisaSignPhoneNo);
kisaVO.setKisaSignPnttm(kisaSignPnttm);
if (kisaVO.getKisaReportState().equals("1")) {
// KISA 서명 요청
kisaVO.setKisaReceptState("2"); // KISA 서명 서명 완료
kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close
}
else if (kisaVO.getKisaReportState().equals("3")) {
// 당사경고 서명 요청
kisaVO.setKisaReceptState("2"); // KISA 서명 서명 완료
kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close
}
else {
// KISA 소명자료 요청
kisaVO.setKisaReceptState("3"); // KISA 소명자료 미제출
}
kisaService.updateKisa(kisaVO);
}
}
else {
isSuccess = false;
msg = "로그인후 이용해주세요.";
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
@RequestMapping(value = "/web/user/selectRejectAjax.do")
public ModelAndView selectRejectAjax(@ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
try {
MjPhoneMemberVO rejectInfo = mjonMsgService.selectSendPhoneNumberByPhmId(mjPhoneMemberVO.getPhmId());
modelAndView.addObject("rejectInfo", rejectInfo);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 회원정보 조회 휴대폰 인증
*/
@RequestMapping("/web/user/selectSecurityAuthn.do")
public String selectSecurityAuthn(
HttpServletRequest request, ModelMap model
, @RequestParam Map<String, Object> commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
//개인회원일 시 mblDn 비교 후 본인 명의 휴대폰만 변경 가능하게끔
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
model.addAttribute("loginVO", loginVO);
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) ;
}
}
//KMC 본인인증 로그
AuthCertVO certVO = new AuthCertVO();
certVO.setMberId(kmcVO.getPlusInfo());
certVO.setCertNum(kmcVO.getCertNum());
certVO.setCertDate(kmcVO.getDate());
certVO.setCertDi(kmcVO.getDI());
certVO.setCertPhone(kmcVO.getPhoneNo());
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("secureLoginOFF");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
//디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
return "web/user/securityAuthnPage";
}
@RequestMapping(value="/web/user/mberSecureLoginAjax.do")
public ResponseEntity<?> mberSecureLoginAjax(MberManageVO mberManageVO, @RequestBody Map<String, String> params){
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if("Y".equals(params.get("secuLoginFlag"))) {
mberManageVO.setSecuLoginFlag("N");
}else {
mberManageVO.setSecuLoginFlag("Y");
}
mberManageVO.setMberId(userId);
mberManageVO.setLastUpdusrId(userId);
try {
mberManageService.updateSecureLoginFlag(mberManageVO);
return new ResponseEntity<>("success", HttpStatus.OK);
} catch (Exception e) {
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
System.out.println("mberSecureLoginAjax Error!!!!!!!!!!!!!!!!!!!!");
return new ResponseEntity<>("fail", HttpStatus.OK);
}
}
}