본인인증 개발
This commit is contained in:
parent
b1b012a44e
commit
6fec0efb19
33
pom.xml
33
pom.xml
@ -339,24 +339,6 @@
|
||||
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1_exp.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
<!-- sci 평가 siren24. 본인인증 -->
|
||||
<dependency>
|
||||
<groupId>sciSecuPCC</groupId>
|
||||
<artifactId>sciSecuPCC</artifactId>
|
||||
<version>2</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/sciSecuPCC.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>sciSecuPIN_v3</groupId>
|
||||
<artifactId>sciSecuPIN_v3</artifactId>
|
||||
<version>2</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/sciSecuIPIN_v3.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- magicline 공동인증서 시작 -->
|
||||
<dependency>
|
||||
<groupId>jcaos</groupId>
|
||||
@ -560,8 +542,21 @@
|
||||
<artifactId>spring-security-crypto</artifactId>
|
||||
<version>4.2.13.RELEASE</version> <!-- 프로젝트와 호환되는 4.x 라인 -->
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.36</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<!-- sci본인인증 v3 -->
|
||||
<dependency>
|
||||
<groupId>com.sci.v3</groupId>
|
||||
<artifactId>sciSecuPCC_v3</artifactId>
|
||||
<version>v3</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
|
||||
@ -1,26 +1,6 @@
|
||||
package kcc.kccadr.xxx.web;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import kcc.com.cmm.CmmUtil;
|
||||
@ -30,18 +10,37 @@ import kcc.com.cmm.service.EgovCmmUseService;
|
||||
import kcc.com.cmm.service.EgovFileMngService;
|
||||
import kcc.com.cmm.service.EgovFileMngUtil;
|
||||
import kcc.com.cmm.service.FileVO;
|
||||
import kcc.com.utl.user.service.CheckLoginUtil;
|
||||
import kcc.kccadr.xxx.service.XxxService;
|
||||
import kcc.kccadr.xxx.service.XxxVO;
|
||||
import kcc.ve.cmm.crt.CertPhoneRequestUtill;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
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 javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* 대국민(사용자)
|
||||
* XXX에 관한 controller 클래스를 정의한다.
|
||||
* @author 이준호
|
||||
* @since 2021.08.09
|
||||
* @version 1.0
|
||||
* @see
|
||||
*
|
||||
* <pre>
|
||||
* @author 이준호
|
||||
* @version 1.0
|
||||
* @see <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
@ -49,6 +48,7 @@ import kcc.kccadr.xxx.service.XxxVO;
|
||||
* 2021.08.09 이준호 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
* @since 2021.08.09
|
||||
*/
|
||||
@Controller
|
||||
public class XxxWebController {
|
||||
@ -66,36 +66,45 @@ public class XxxWebController {
|
||||
// eGov 공통코드
|
||||
@Resource(name = "EgovCmmUseService")
|
||||
private EgovCmmUseService cmmUseService;
|
||||
|
||||
|
||||
// global 프로퍼티
|
||||
@Resource(name="globalSettings")
|
||||
@Resource(name = "globalSettings")
|
||||
protected Properties propertiesService;
|
||||
|
||||
|
||||
//첨부파일 경로, realPath 설정
|
||||
@Resource(name="EgovFileMngUtil")
|
||||
@Resource(name = "EgovFileMngUtil")
|
||||
private EgovFileMngUtil fileUtil;
|
||||
|
||||
|
||||
// 첨부파일 정보
|
||||
@Resource(name="EgovFileMngService")
|
||||
private EgovFileMngService fileMngService;
|
||||
|
||||
@Resource(name = "EgovFileMngService")
|
||||
private EgovFileMngService fileMngService;
|
||||
|
||||
// 첨부파일 정보
|
||||
@Resource(name = "certPhoneRequestUtill")
|
||||
private CertPhoneRequestUtill certPhoneRequestUtill;
|
||||
|
||||
//로그인 체크 util
|
||||
@Resource(name = "checkLoginUtil")
|
||||
private CheckLoginUtil checkLoginUtil;
|
||||
|
||||
|
||||
/**
|
||||
* XXX 목록 화면
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/xxxList.do")
|
||||
public String xxxList(@ModelAttribute("searchVO") XxxVO xxxVO, ModelMap model) throws Exception {
|
||||
public String xxxList( @ModelAttribute("searchVO") XxxVO xxxVO, ModelMap model ) throws Exception {
|
||||
|
||||
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); //로그인 정보
|
||||
model.addAttribute("user", user);
|
||||
|
||||
|
||||
List<XxxVO> xxxList = xxxService.selectXxxList(xxxVO); // 목록 조회
|
||||
|
||||
|
||||
// 페이징 처리 객체
|
||||
PaginationInfo paginationInfo = CmmUtil.getPageing(xxxVO, xxxVO.getPageUnit());
|
||||
paginationInfo.setTotalRecordCount(xxxList.size() > 0 ? xxxList.get(0).getTotCnt() : 0);
|
||||
|
||||
|
||||
//최초조회시 최신것 조회List
|
||||
if("".equals(xxxVO.getSearchSortCnd())){
|
||||
if("".equals(xxxVO.getSearchSortCnd())) {
|
||||
xxxVO.setSearchSortCnd("xxxId");
|
||||
xxxVO.setSearchSortOrd("desc");
|
||||
}
|
||||
@ -113,7 +122,7 @@ public class XxxWebController {
|
||||
* XXX 등록화면
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/xxxRegist.do")
|
||||
public String xxxRegist(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model) throws Exception {
|
||||
public String xxxRegist( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model ) throws Exception {
|
||||
|
||||
return "/web/kccadr/xxx/xxxRegist";
|
||||
}
|
||||
@ -122,42 +131,42 @@ public class XxxWebController {
|
||||
* XXX 등록 처리
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/insertXxx.do")
|
||||
public String insertXxx(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap mode, RedirectAttributes redirectAttributes) throws Exception {
|
||||
public String insertXxx( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap mode, RedirectAttributes redirectAttributes ) throws Exception {
|
||||
|
||||
xxxService.insertXxx(xxxVO); // 등록
|
||||
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); // 공통메세지
|
||||
|
||||
return "redirect:/web/kccadr/xxx/xxxList.do";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* XXX 등록 Ajax
|
||||
*/
|
||||
@RequestMapping(value = {"/web/kccadr/xxx/insertXxxAjax.do"})
|
||||
public ModelAndView insertXxxAjax(final MultipartHttpServletRequest multiRequest
|
||||
* XXX 등록 Ajax
|
||||
*/
|
||||
@RequestMapping(value = { "/web/kccadr/xxx/insertXxxAjax.do" })
|
||||
public ModelAndView insertXxxAjax( final MultipartHttpServletRequest multiRequest
|
||||
, XxxVO xxxVO
|
||||
, RedirectAttributes redirectAttributes
|
||||
, HttpServletRequest request) throws Exception {
|
||||
|
||||
, HttpServletRequest request ) throws Exception {
|
||||
|
||||
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
|
||||
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
|
||||
String atchFileId = "";
|
||||
final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
||||
if (!files.isEmpty()) {
|
||||
if(!files.isEmpty()) {
|
||||
//XXX_로 첨부파일 네이밍
|
||||
List<FileVO> result = fileUtil.parseFileInf(files, "XXX_", 0, "", "", "");
|
||||
atchFileId = fileMngService.insertFileInfs(result);
|
||||
//첨부파일Id(atchFileId)를 해당 VO atchFileId변수에 저장
|
||||
xxxVO.setAtchFileId(atchFileId);
|
||||
}
|
||||
|
||||
|
||||
xxxVO.setFrstRegisterId(user.getId());
|
||||
//게시글 등록 서비스
|
||||
xxxService.insertXxx(xxxVO);
|
||||
|
||||
|
||||
modelAndView.addObject("result", "success");
|
||||
return modelAndView;
|
||||
}
|
||||
@ -166,7 +175,7 @@ public class XxxWebController {
|
||||
* XXX 상세화면
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/xxxDetail.do")
|
||||
public String xxxDetail(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model) throws Exception {
|
||||
public String xxxDetail( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model ) throws Exception {
|
||||
|
||||
XxxVO result = xxxService.selectXxxDetail(xxxVO); // 상세 조회
|
||||
model.addAttribute("result", result);
|
||||
@ -178,7 +187,7 @@ public class XxxWebController {
|
||||
* XXX 수정화면
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/xxxModify.do")
|
||||
public String xxxModify(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model) throws Exception {
|
||||
public String xxxModify( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model ) throws Exception {
|
||||
|
||||
XxxVO result = xxxService.selectXxxDetail(xxxVO); // 상세 조회
|
||||
model.addAttribute("result", result);
|
||||
@ -190,34 +199,34 @@ public class XxxWebController {
|
||||
* XXX 수정 처리
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/updateXxx.do")
|
||||
public String updateXxx(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap mode, RedirectAttributes redirectAttributes) throws Exception {
|
||||
|
||||
public String updateXxx( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap mode, RedirectAttributes redirectAttributes ) throws Exception {
|
||||
|
||||
xxxService.updateXxx(xxxVO); // 수정
|
||||
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); // 공통메세지
|
||||
|
||||
return "redirect:/web/kccadr/xxx/xxxDetail.do";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* xxx 수정 Ajax
|
||||
*/
|
||||
@RequestMapping(value = {"/web/kccadr/xxx/updateXxxAjax.do"})
|
||||
public ModelAndView updateXxxAjax(final MultipartHttpServletRequest multiRequest
|
||||
* xxx 수정 Ajax
|
||||
*/
|
||||
@RequestMapping(value = { "/web/kccadr/xxx/updateXxxAjax.do" })
|
||||
public ModelAndView updateXxxAjax( final MultipartHttpServletRequest multiRequest
|
||||
, XxxVO xxxVO
|
||||
, RedirectAttributes redirectAttributes
|
||||
, HttpServletRequest request) throws Exception {
|
||||
|
||||
, HttpServletRequest request ) throws Exception {
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
|
||||
String atchFileId = "";
|
||||
final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
||||
|
||||
if (!files.isEmpty()) {
|
||||
if ("".equals(atchFileId)) {
|
||||
|
||||
if(!files.isEmpty()) {
|
||||
if("".equals(atchFileId)) {
|
||||
//XXX_로 첨부파일 네이밍
|
||||
List<FileVO> result = fileUtil.parseFileInf(files, "XXX_", 0, atchFileId, "", "");
|
||||
|
||||
|
||||
atchFileId = fileMngService.insertFileInfs(result);
|
||||
//첨부파일Id(atchFileId)를 해당 VO atchFileId변수에 저장
|
||||
xxxVO.setAtchFileId(atchFileId);
|
||||
@ -226,13 +235,13 @@ public class XxxWebController {
|
||||
fvo.setAtchFileId(atchFileId);
|
||||
int cnt = fileMngService.getMaxFileSN(fvo);
|
||||
List<FileVO> result = fileUtil.parseFileInf(files, "XXX_", cnt, atchFileId, "", "");
|
||||
|
||||
|
||||
fileMngService.updateFileInfs(result);
|
||||
}
|
||||
}
|
||||
//게시글 수정 서비스
|
||||
xxxService.updateXxx(xxxVO);
|
||||
|
||||
|
||||
modelAndView.addObject("result", "success");
|
||||
return modelAndView;
|
||||
}
|
||||
@ -241,29 +250,29 @@ public class XxxWebController {
|
||||
* XXX 삭제 처리
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/deleteXxx.do")
|
||||
public String deleteXxx(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap mode, RedirectAttributes redirectAttributes) throws Exception {
|
||||
public String deleteXxx( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap mode, RedirectAttributes redirectAttributes ) throws Exception {
|
||||
|
||||
xxxService.deleteXxx(xxxVO); // 삭제
|
||||
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); // 공통메세지
|
||||
|
||||
|
||||
return "redirect:/web/kccadr/xxx/xxxList.do";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* XXX 삭제 처리(delete가 아닌 useYn컬럼을 상태값으로 'N'처리할때)
|
||||
* XXX 삭제 처리(delete가 아닌 useYn컬럼을 상태값으로 'N'처리할때)
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/deleteXxx2.do")
|
||||
public String deleteXxx2(HttpServletRequest request, @ModelAttribute("searchVO") XxxVO xxxVO,
|
||||
ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
|
||||
public String deleteXxx2( HttpServletRequest request, @ModelAttribute("searchVO") XxxVO xxxVO,
|
||||
ModelMap model, RedirectAttributes redirectAttributes ) throws Exception {
|
||||
|
||||
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
|
||||
|
||||
xxxVO.setLastUpdusrId(user.getUniqId());
|
||||
xxxVO.setLastUpdusrNm(user.getName()); // 변경이력에 사용
|
||||
xxxVO.setLastUpdusrNm(user.getName()); // 변경이력에 사용
|
||||
|
||||
xxxService.deleteXxx2(xxxVO);
|
||||
xxxVO.setPageIndex(1); //삭제후 첫페이지로 로딩
|
||||
|
||||
|
||||
redirectAttributes.addAttribute("pageIndex", xxxVO.getPageIndex());
|
||||
redirectAttributes.addAttribute("searchCnd", xxxVO.getSearchCnd());
|
||||
redirectAttributes.addAttribute("searchWrd", xxxVO.getSearchWrd());
|
||||
@ -271,15 +280,13 @@ public class XxxWebController {
|
||||
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.useN"));
|
||||
return "redirect:/web/kccadr/xxx/xxxList.do";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* XXX 팝업화면
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/xxxDetailPop.do")
|
||||
public String xxxDetailPop(@ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model) throws Exception {
|
||||
public String xxxDetailPop( @ModelAttribute("xxxVO") XxxVO xxxVO, ModelMap model ) throws Exception {
|
||||
|
||||
XxxVO result = xxxService.selectXxxDetail(xxxVO); // 상세 조회
|
||||
model.addAttribute("result", result);
|
||||
@ -291,19 +298,19 @@ public class XxxWebController {
|
||||
* XXX YYYY(처리) Ajax 처리
|
||||
*/
|
||||
@RequestMapping("/web/kccadr/xxx/xxxYyyyAjax.do")
|
||||
public ModelAndView xxxYyyyAjax(@ModelAttribute("xxxVO") XxxVO xxxVO, BindingResult bindingResult) throws Exception {
|
||||
|
||||
public ModelAndView xxxYyyyAjax( @ModelAttribute("xxxVO") XxxVO xxxVO, BindingResult bindingResult ) throws Exception {
|
||||
|
||||
String result = "success";
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
|
||||
// YYYY 처리 로직
|
||||
|
||||
|
||||
// YYYY 처리 상태 체크
|
||||
if (1 == 0) {
|
||||
if(1 == 0) {
|
||||
result = "fail";
|
||||
}
|
||||
|
||||
|
||||
modelAndView.addObject("result", result);
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
@ -1,30 +1,31 @@
|
||||
package kcc.let.cop.bbs.web;
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.security.SecureRandom;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import NiceID.Check.CPClient;
|
||||
import com.penta.scpdb.ScpDbAgent;
|
||||
import egovframework.rte.fdl.property.EgovPropertyService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import kcc.com.cmm.*;
|
||||
import kcc.com.cmm.service.*;
|
||||
import kcc.com.cmm.util.StringUtil;
|
||||
import kcc.com.cmm.util.WebUtil;
|
||||
import kcc.com.uss.ion.cnf.service.ProhibitMngService;
|
||||
import kcc.com.uss.ion.cnf.service.WordFilterService;
|
||||
import kcc.com.uss.ion.cnf.service.WordFilterVO;
|
||||
import kcc.com.utl.fcc.service.EgovStringUtil;
|
||||
import kcc.com.utl.user.service.CheckLoginUtil;
|
||||
import kcc.let.cop.bbs.service.*;
|
||||
import kcc.let.sym.mnu.mpm.service.EgovMenuManageService;
|
||||
import kcc.let.sym.mnu.mpm.service.MenuManageVO;
|
||||
import kcc.let.sym.site.service.EgovSiteManagerService;
|
||||
import kcc.let.sym.site.service.SiteManagerVO;
|
||||
import kcc.let.uat.uia.service.SsoLoginVO;
|
||||
import kcc.let.utl.fcc.service.ITNotiUtil;
|
||||
import kcc.let.utl.sim.service.EgovClntInfo;
|
||||
import kcc.ve.cmm.VeConstants;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
import org.apache.poi.ss.usermodel.Font;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
@ -47,47 +48,15 @@ import org.springframework.web.servlet.ModelAndView;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
import org.springmodules.validation.commons.DefaultBeanValidator;
|
||||
|
||||
import com.penta.scpdb.ScpDbAgent;
|
||||
import com.sci.v2.pcc.secu.SciSecuManager;
|
||||
import com.sci.v2.pcc.secu.hmac.SciHmac;
|
||||
|
||||
import NiceID.Check.CPClient;
|
||||
import egovframework.rte.fdl.property.EgovPropertyService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import kcc.com.cmm.ComDefaultCodeVO;
|
||||
import kcc.com.cmm.EgovMessageSource;
|
||||
import kcc.com.cmm.EgovMultiPartEmail;
|
||||
import kcc.com.cmm.LoginVO;
|
||||
import kcc.com.cmm.ReadVO;
|
||||
import kcc.com.cmm.UserVO;
|
||||
import kcc.com.cmm.service.EgovCmmUseService;
|
||||
import kcc.com.cmm.service.EgovFileMngService;
|
||||
import kcc.com.cmm.service.EgovFileMngUtil;
|
||||
import kcc.com.cmm.service.FileVO;
|
||||
import kcc.com.cmm.service.ReadService;
|
||||
import kcc.com.cmm.util.StringUtil;
|
||||
import kcc.com.cmm.util.WebUtil;
|
||||
import kcc.com.uss.ion.cnf.service.ProhibitMngService;
|
||||
import kcc.com.uss.ion.cnf.service.WordFilterService;
|
||||
import kcc.com.uss.ion.cnf.service.WordFilterVO;
|
||||
import kcc.com.utl.fcc.service.EgovStringUtil;
|
||||
import kcc.let.cop.bbs.service.Board;
|
||||
import kcc.let.cop.bbs.service.BoardChgHst;
|
||||
import kcc.let.cop.bbs.service.BoardMaster;
|
||||
import kcc.let.cop.bbs.service.BoardMasterVO;
|
||||
import kcc.let.cop.bbs.service.BoardVO;
|
||||
import kcc.let.cop.bbs.service.EgovBBSAttributeManageService;
|
||||
import kcc.let.cop.bbs.service.EgovBBSManageService;
|
||||
import kcc.let.sym.mnu.mpm.service.EgovMenuManageService;
|
||||
import kcc.let.sym.mnu.mpm.service.MenuManageVO;
|
||||
import kcc.let.sym.site.service.EgovSiteManagerService;
|
||||
import kcc.let.sym.site.service.SiteManagerVO;
|
||||
import kcc.let.uat.uia.service.SsoLoginVO;
|
||||
import kcc.let.utl.fcc.service.ITNotiUtil;
|
||||
import kcc.let.utl.sim.service.EgovClntInfo;
|
||||
import kcc.ve.cmm.VeConstants;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.io.OutputStream;
|
||||
import java.security.SecureRandom;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* 게시물 관리를 위한 컨트롤러 클래스
|
||||
@ -2341,21 +2310,21 @@ public class EgovBBSManageController {
|
||||
|
||||
request.getSession().setAttribute("reqNum", reqNum); // 결과값 복호화시 필요
|
||||
|
||||
//01. 암호화 모듈 선언
|
||||
SciSecuManager seed = new SciSecuManager();
|
||||
|
||||
//02. 1차 암호화
|
||||
String encStr = "";
|
||||
String reqInfo = SELFAUTH_SITE_ID+"^"+SELFAUTH_SRV_NO+"^"+reqNum+"^"+certDate+"^"+certGb+"^"+addVar+"^"+exVar; // 데이터 암호화
|
||||
encStr = seed.getEncPublic(reqInfo);
|
||||
|
||||
//03. 위변조 검증 값 생성
|
||||
String hmacMsg = SciHmac.HMacEncriptPublic(encStr);
|
||||
|
||||
//03. 2차 암호화
|
||||
reqInfo = seed.getEncPublic(encStr + "^" + hmacMsg + "^" + "0000000000000000"); //2차암호화
|
||||
|
||||
request.getSession().setAttribute("reqInfo", reqInfo); // 본인확인 요청 정보
|
||||
// //01. 암호화 모듈 선언
|
||||
// SciSecuManager seed = new SciSecuManager();
|
||||
//
|
||||
// //02. 1차 암호화
|
||||
// String encStr = "";
|
||||
// String reqInfo = SELFAUTH_SITE_ID+"^"+SELFAUTH_SRV_NO+"^"+reqNum+"^"+certDate+"^"+certGb+"^"+addVar+"^"+exVar; // 데이터 암호화
|
||||
// encStr = seed.getEncPublic(reqInfo);
|
||||
//
|
||||
// //03. 위변조 검증 값 생성
|
||||
// String hmacMsg = SciHmac.HMacEncriptPublic(encStr);
|
||||
//
|
||||
// //03. 2차 암호화
|
||||
// reqInfo = seed.getEncPublic(encStr + "^" + hmacMsg + "^" + "0000000000000000"); //2차암호화
|
||||
//
|
||||
// request.getSession().setAttribute("reqInfo", reqInfo); // 본인확인 요청 정보
|
||||
request.getSession().setAttribute("SITE_URL", SITE_URL); // 사이트 URL
|
||||
|
||||
return "web/cop/selfauth/selfauth";
|
||||
@ -2371,41 +2340,41 @@ public class EgovBBSManageController {
|
||||
@RequestMapping("/web/cop/selfauth/resultSeed.do")
|
||||
public String resultSeed(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception {
|
||||
|
||||
String retInfo = request.getParameter("retInfo").trim();
|
||||
String cookiereqNum = (String)request.getSession().getAttribute("reqNum");
|
||||
|
||||
//복화화용 변수
|
||||
String encPara = "";
|
||||
String encMsg = "";
|
||||
String msgChk = "N";
|
||||
|
||||
// 1. 암호화 모듈 (jar) Loading
|
||||
SciSecuManager sciSecuMg = new SciSecuManager();
|
||||
//쿠키에서 생성한 값을 Key로 생성 한다.
|
||||
retInfo = sciSecuMg.getDec(retInfo, cookiereqNum);
|
||||
|
||||
// 2.1차 파싱---------------------------------------------------------------
|
||||
String[] aRetInfo1 = retInfo.split("\\^");
|
||||
|
||||
encPara = aRetInfo1[0]; //암호화된 통합 파라미터
|
||||
encMsg = aRetInfo1[1]; //암호화된 통합 파라미터의 Hash값
|
||||
|
||||
String encMsg2 = sciSecuMg.getMsg(encPara);
|
||||
// 3.위/변조 검증 ---------------------------------------------------------------
|
||||
if(encMsg2.equals(encMsg)) msgChk="Y";
|
||||
|
||||
if(msgChk.equals("N")) {
|
||||
// 비정상 접근 처리
|
||||
}
|
||||
|
||||
retInfo = sciSecuMg.getDec(encPara, cookiereqNum);
|
||||
|
||||
String[] aRetInfo = retInfo.split("\\^");
|
||||
String name = aRetInfo[0]; //성명
|
||||
// String retInfo = request.getParameter("retInfo").trim();
|
||||
// String cookiereqNum = (String)request.getSession().getAttribute("reqNum");
|
||||
//
|
||||
// //복화화용 변수
|
||||
// String encPara = "";
|
||||
// String encMsg = "";
|
||||
// String msgChk = "N";
|
||||
//
|
||||
// // 1. 암호화 모듈 (jar) Loading
|
||||
// SciSecuManager sciSecuMg = new SciSecuManager();
|
||||
// //쿠키에서 생성한 값을 Key로 생성 한다.
|
||||
// retInfo = sciSecuMg.getDec(retInfo, cookiereqNum);
|
||||
//
|
||||
// // 2.1차 파싱---------------------------------------------------------------
|
||||
// String[] aRetInfo1 = retInfo.split("\\^");
|
||||
//
|
||||
// encPara = aRetInfo1[0]; //암호화된 통합 파라미터
|
||||
// encMsg = aRetInfo1[1]; //암호화된 통합 파라미터의 Hash값
|
||||
//
|
||||
// String encMsg2 = sciSecuMg.getMsg(encPara);
|
||||
// // 3.위/변조 검증 ---------------------------------------------------------------
|
||||
// if(encMsg2.equals(encMsg)) msgChk="Y";
|
||||
//
|
||||
// if(msgChk.equals("N")) {
|
||||
// // 비정상 접근 처리
|
||||
// }
|
||||
//
|
||||
// retInfo = sciSecuMg.getDec(encPara, cookiereqNum);
|
||||
//
|
||||
// String[] aRetInfo = retInfo.split("\\^");
|
||||
// String name = aRetInfo[0]; //성명
|
||||
// String birYMD = aRetInfo[1]; //생년월일
|
||||
// String sex = aRetInfo[2]; //성별
|
||||
// String fgnGbn = aRetInfo[3]; //내외국인 구분값
|
||||
String di = aRetInfo[4]; //DI
|
||||
// String di = aRetInfo[4]; //DI
|
||||
// String ci1 = aRetInfo[5]; //CI
|
||||
// String ci2 = aRetInfo[6]; //CI
|
||||
// String civersion = aRetInfo[7]; //CI Version
|
||||
@ -2419,8 +2388,8 @@ public class EgovBBSManageController {
|
||||
|
||||
// 사용자 세션생성
|
||||
UserVO userVO = new UserVO();
|
||||
userVO.setName(name);
|
||||
userVO.setMblDn(di);
|
||||
// userVO.setName(name);
|
||||
// userVO.setMblDn(di);
|
||||
request.getSession().setAttribute("userVO", userVO);
|
||||
|
||||
String url = (String)request.getSession().getAttribute("url");
|
||||
|
||||
@ -66,9 +66,6 @@ public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements
|
||||
LoginVO loginVO = null;
|
||||
String s_password = vo.getPassword();
|
||||
String s_ci = vo.getMberCi();
|
||||
System.out.println("======1========================"+s_password);
|
||||
System.out.println("======1========================"+EgovNewPasswordUtil.hashPassword(s_password));
|
||||
System.out.println("======1========================"+EgovFileScrty.encryptPassword(s_password, vo.getId()));
|
||||
|
||||
//step1.new 로그인인 경우 loginvo ret
|
||||
//최고관리자를 제외한 사용자 sso 로그인으로 비밀번호 암호화 삭제(210818, 이준호)
|
||||
|
||||
@ -5,18 +5,19 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import kcc.ve.cmm.crt.CertPhoneResultUtill;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.client.ClientProtocolException;
|
||||
@ -25,6 +26,8 @@ import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -189,6 +192,9 @@ public class EgovLoginController {
|
||||
/** 구동 환경 */
|
||||
@Value("#{property['Globals.prod.islocal']}")
|
||||
private String environment;
|
||||
|
||||
@Resource(name = "certPhoneResultUtill")
|
||||
private CertPhoneResultUtill certPhoneResultUtill;
|
||||
|
||||
/*
|
||||
*//**
|
||||
@ -725,28 +731,55 @@ public class EgovLoginController {
|
||||
|
||||
//일반 로그인이 아니므로 1로 세팅
|
||||
loginVO.setPassword("1");
|
||||
|
||||
// 로그인 정보 check
|
||||
// if (loginVO.getId() == null || loginVO.getPassword() == null) {
|
||||
// SsoLoginVO SsoLoginSessionChk = (SsoLoginVO) session.getAttribute("SSOLoginVO");
|
||||
// // SSOLoginVO 세션 체크
|
||||
// if (SsoLoginSessionChk != null) {
|
||||
//
|
||||
// loginVO.setId(SsoLoginSessionChk.getMembId());
|
||||
// loginVO.setPassword("1");
|
||||
// } else {
|
||||
// model.addAttribute("message", "로그인을 다시 해주세요.");
|
||||
// // 로그인 페이지로 이동
|
||||
// /*return "/web/kccadr/login/SsoLoginUsr";*/
|
||||
// return "redirect:/web/user/login/ssoLogin.do";
|
||||
// }
|
||||
// }
|
||||
if(StringUtil.isEmpty(loginVO.getMberCi())) {
|
||||
|
||||
String retInfo = request.getParameter("retInfo");
|
||||
|
||||
if(StringUtil.isEmpty(retInfo)) {
|
||||
model.addAttribute("message", "로그인을 다시 해주세요.");
|
||||
redirectAttributes.addAttribute("message", "로그인을 다시 해주세요.");
|
||||
// 로그인 페이지로 이동
|
||||
return "redirect:/web/user/login/ssoLogin.do";
|
||||
}
|
||||
|
||||
// AES 복호화 설정 (AES/CBC/PKCS5Padding)
|
||||
String reqkey = request.getSession().getAttribute("reqkey").toString();
|
||||
String reqiv = request.getSession().getAttribute("reqiv").toString();
|
||||
|
||||
SecretKeySpec secureKey = new SecretKeySpec(reqkey.getBytes("UTF-8"), "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
cipher.init(Cipher.DECRYPT_MODE, secureKey, new IvParameterSpec(reqiv.getBytes("UTF-8")));
|
||||
|
||||
// Base64 디코딩 후 복호화 수행
|
||||
byte[] cipherEnc = Base64.getDecoder().decode(retInfo);
|
||||
|
||||
String resData = new String(cipher.doFinal(cipherEnc), "UTF-8");
|
||||
|
||||
// 복호화된 결과를 다시 JSON으로 파싱
|
||||
JSONParser parser2 = new JSONParser();
|
||||
JSONObject jsonData = (JSONObject) parser2.parse(resData);
|
||||
if(jsonData != null) {
|
||||
System.out.println("===== 복호화된 결과 =====");
|
||||
|
||||
for(Object keyObj : jsonData.keySet()) {
|
||||
String key2 = (String) keyObj;
|
||||
Object value = jsonData.get(key2);
|
||||
System.out.println(key2 + " = " + value);
|
||||
}
|
||||
|
||||
} else {
|
||||
System.out.println("복호화 실패: jsonData가 null 입니다.");
|
||||
model.addAttribute("message", "로그인을 다시 해주세요.");
|
||||
redirectAttributes.addAttribute("message", "로그인을 다시 해주세요.");
|
||||
// 로그인 페이지로 이동
|
||||
return "redirect:/web/user/login/ssoLogin.do";
|
||||
}
|
||||
|
||||
loginVO.setMembName(jsonData.get("userName").toString());
|
||||
loginVO.setMembCelnum(jsonData.get("celNo").toString());
|
||||
loginVO.setSexCode(jsonData.get("gender").toString());
|
||||
loginVO.setMembBirth(jsonData.get("birYMD").toString());
|
||||
loginVO.setMberCi(jsonData.get("ci").toString());
|
||||
|
||||
// 기존에 있던 회원이 아니면 DB에 일련번호 저장
|
||||
UserManageVO userManageVO = new UserManageVO();
|
||||
userManageVO.setMberCi(loginVO.getMberCi());
|
||||
|
||||
102
src/main/java/kcc/ve/cmm/crt/CertPhoneRequestUtill.java
Normal file
102
src/main/java/kcc/ve/cmm/crt/CertPhoneRequestUtill.java
Normal file
@ -0,0 +1,102 @@
|
||||
package kcc.ve.cmm.crt;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.Base64;
|
||||
|
||||
@Service(value = "certPhoneRequestUtill")
|
||||
public class CertPhoneRequestUtill {
|
||||
|
||||
public String getEncReqData( String key, String iv, String reqData ) throws Exception {
|
||||
String reqInfo = "";
|
||||
try {
|
||||
SecretKey secureKey = new SecretKeySpec(key.getBytes(), "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, secureKey, new IvParameterSpec(iv.getBytes()));
|
||||
byte[] encrypted;
|
||||
encrypted = cipher.doFinal(reqData.trim().getBytes());
|
||||
reqInfo = Base64.getEncoder().encodeToString(encrypted);
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) getEncReqData Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
return reqInfo;
|
||||
}
|
||||
|
||||
public String createSymmetricKey( String req_dtim, String req_no, String token_val ) throws Exception {
|
||||
String symmetricKey = "";
|
||||
String value = req_dtim.trim() + req_no.trim() + token_val.trim();
|
||||
MessageDigest md;
|
||||
try {
|
||||
md = MessageDigest.getInstance("SHA-256");
|
||||
md.update(value.getBytes());
|
||||
byte[] arrHashValue = md.digest();
|
||||
symmetricKey = Base64.getEncoder().encodeToString(arrHashValue);
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) createSymmetricKey Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
return symmetricKey;
|
||||
}
|
||||
|
||||
public byte[] hmac256( byte[] secretKey, byte[] message ) throws Exception {
|
||||
byte[] hmac256 = null;
|
||||
try {
|
||||
Mac mac = Mac.getInstance("HmacSHA256");
|
||||
SecretKeySpec sks = new SecretKeySpec(secretKey, "HmacSHA256");
|
||||
mac.init(sks);
|
||||
hmac256 = mac.doFinal(message);
|
||||
return hmac256;
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) hmac256 Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public String getReqData( String id, String srvNo, String reqNum, String retUrl, String certDate, String certGb ) {
|
||||
|
||||
JSONObject msgMap = new JSONObject();
|
||||
msgMap.put("id", id);
|
||||
msgMap.put("srvNo", srvNo);
|
||||
msgMap.put("reqNum", reqNum);
|
||||
msgMap.put("retUrl", retUrl);
|
||||
msgMap.put("certDate", certDate);
|
||||
msgMap.put("certGb", certGb);
|
||||
String reqData = msgMap.toJSONString();
|
||||
return reqData;
|
||||
|
||||
}
|
||||
|
||||
//복호화
|
||||
public JSONObject getResData( String req_info, String key, String iv ) throws Exception {
|
||||
SecretKey secureKey = new SecretKeySpec(key.getBytes(), "AES");
|
||||
Cipher c;
|
||||
String resData = "";
|
||||
try {
|
||||
c = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
c.init(Cipher.DECRYPT_MODE, secureKey, new IvParameterSpec(iv.getBytes()));
|
||||
/*byte[] cipherEnc = Base64.getDecoder().decode(encData);*/
|
||||
byte[] cipherEnc = Base64.getDecoder().decode(req_info);
|
||||
resData = new String(c.doFinal(cipherEnc), "utf-8");
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) getResData Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
JSONParser parser = new JSONParser();
|
||||
JSONObject jsonResData = (JSONObject) parser.parse(resData);
|
||||
return jsonResData;
|
||||
}
|
||||
|
||||
}
|
||||
355
src/main/java/kcc/ve/cmm/crt/CertPhoneResultUtill.java
Normal file
355
src/main/java/kcc/ve/cmm/crt/CertPhoneResultUtill.java
Normal file
@ -0,0 +1,355 @@
|
||||
package kcc.ve.cmm.crt;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.*;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.SecureRandom;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Service(value = "certPhoneResultUtill")
|
||||
public class CertPhoneResultUtill {
|
||||
public String createCryptoTokenUrl = "https://sciapi.siren24.com:52099/authentication/api/v1.0/common/crypto/token";
|
||||
public String access_token = "994b5d96-3788-4239-a5b0-a0ba2e0cf089 ";
|
||||
public String client_id = "5a2a72e2-16ce-420c-8816-57b3dda0e231";
|
||||
|
||||
public CertPhoneResultUtill() throws Exception {
|
||||
}
|
||||
|
||||
|
||||
public String certResult( HttpServletRequest request ) throws Exception {
|
||||
String reqcryptotokenid = request.getParameter("crypto_token_id");
|
||||
String integrity_value = request.getParameter("integrity_value");
|
||||
System.out.println("crypto_token_id -> " + reqcryptotokenid);
|
||||
System.out.println("integrity_value -> " + integrity_value);
|
||||
|
||||
String id = "SKIP001";
|
||||
String url = "https://pcc.siren24.com/servlet/StoS";
|
||||
|
||||
// String reqInfo = certPhoneResultUtill.getReqData(id, crypto_token_id);
|
||||
//
|
||||
// String key = request.getSession().getAttribute("certPhoneKey").toString();
|
||||
// String iv = request.getSession().getAttribute("certPhoneIv").toString();
|
||||
// reqInfo = certPhoneResultUtill.getEncReqData(key, iv, reqInfo);
|
||||
|
||||
//암호화키 얻기
|
||||
Date currentDate = new Date();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String reqDate = sdf.format(currentDate);
|
||||
String reqNo = "koipa_edu";
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
|
||||
String cryptoToken = callCreateCryptoTokenAPI(currentDate, reqNo);
|
||||
|
||||
JSONParser parser = new JSONParser();
|
||||
JSONObject cryptoTokenJson = (JSONObject) parser.parse(cryptoToken);
|
||||
JSONObject dataBody = (JSONObject) cryptoTokenJson.get("dataBody");
|
||||
|
||||
String crypto_token_id = (String) dataBody.get("crypto_token_id");
|
||||
String token_val = (String) dataBody.get("crypto_token");
|
||||
String reqInfo = getReqData(id, reqcryptotokenid);
|
||||
|
||||
|
||||
String day = formatter.format(currentDate);
|
||||
|
||||
String symmetricKey = createSymmetricKey(day, reqNo, token_val);
|
||||
String key = symmetricKey.substring(0, 16); // 데이터 암호화할 대칭키
|
||||
String iv = symmetricKey.substring(symmetricKey.length() - 16, symmetricKey.length());// 데이터 암호화할 lnitail Vector
|
||||
|
||||
reqInfo = getEncReqData(key, iv, reqInfo);
|
||||
|
||||
//복호화
|
||||
try {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
// 1. Header 설정
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
// 2. Body 생성
|
||||
Map<String, Object> dataHeader = new HashMap<>();
|
||||
dataHeader.put("CNTY_CD", "kr");
|
||||
dataHeader.put("TRAN_ID", id);
|
||||
|
||||
Map<String, Object> dataBody2 = new HashMap<>();
|
||||
dataBody2.put("crypto_token_id", crypto_token_id);
|
||||
dataBody2.put("reqInfo", reqInfo);
|
||||
dataBody2.put("integrity_value", integrity_value);
|
||||
|
||||
Map<String, Object> requestJson = new HashMap<>();
|
||||
requestJson.put("dataHeader", dataHeader);
|
||||
requestJson.put("dataBody", dataBody2);
|
||||
|
||||
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestJson, headers);
|
||||
|
||||
// 3. POST 요청 호출
|
||||
ResponseEntity<String> response = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.POST,
|
||||
entity,
|
||||
String.class
|
||||
);
|
||||
|
||||
System.out.println("Response: " + response.getBody());
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
Map<String, Object> json = mapper.readValue(response.getBody(), Map.class);
|
||||
Map<String, Object> resDataBody = (Map<String, Object>) json.get("dataBody");
|
||||
|
||||
String retInfo = (String) resDataBody.get("RET_INFO");
|
||||
|
||||
// AES 복호화 설정 (AES/CBC/PKCS5Padding)
|
||||
String reqkey = request.getSession().getAttribute("reqkey").toString();
|
||||
String reqiv = request.getSession().getAttribute("reqiv").toString();
|
||||
|
||||
SecretKeySpec secureKey = new SecretKeySpec(reqkey.getBytes("UTF-8"), "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
cipher.init(Cipher.DECRYPT_MODE, secureKey, new IvParameterSpec(reqiv.getBytes("UTF-8")));
|
||||
|
||||
// Base64 디코딩 후 복호화 수행
|
||||
byte[] cipherEnc = Base64.getDecoder().decode(retInfo);
|
||||
|
||||
|
||||
String resData = new String(cipher.doFinal(cipherEnc), "UTF-8");
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
===== 복호화된 결과 =====
|
||||
Commid = KTM
|
||||
reqNum = koipa_edu
|
||||
gender = M
|
||||
di = MC0GCCqGSIb3DQIJAyEAu7FiVqtM/qf7o/KlCxGNQtWWSEoxUzcLWNtM3gXU/hA=
|
||||
ci = BWqlL7enYj5t2aDsrbvX97vk5wW2+MD08M6e7NtHI9GVeWfWioe8L2m7mheHWKht4uxDUC3k8xG81YgRnUP2lw==
|
||||
celNo = 01030266269
|
||||
fgnGbn = 1
|
||||
certGb = H
|
||||
userName = 이준호
|
||||
ci2 = 00
|
||||
result = Y
|
||||
addVar =
|
||||
certdate = 20251118123928
|
||||
birYMD = 19890202
|
||||
ciVersion = 1
|
||||
utf8Name = %EC%9D%B4%EC%A4%80%ED%98%B8
|
||||
id = SKIP001
|
||||
|
||||
|
||||
|
||||
===== 복호화된 결과 =====
|
||||
Commid = LGT
|
||||
reqNum = koipa_edu
|
||||
gender = F
|
||||
di = MC0GCCqGSIb3DQIJAyEAHq52+k0nurs/FS2kArC2+JTfs+3Xa8KPvSTY2WtgMDY=
|
||||
ci = vDDZDokeyyUJ3i3jaktyXRVGib2XoZZUvp4Rb9tOOWg1sATqRChD4qRNSCaY78EKpsggJMZ/j6jwcLngkXxZtg==
|
||||
celNo = 01057058729
|
||||
fgnGbn = 1
|
||||
certGb = H
|
||||
userName = 정수빈
|
||||
ci2 =
|
||||
result = Y
|
||||
addVar =
|
||||
certdate = 20251118125047
|
||||
birYMD = 19970829
|
||||
ciVersion = 1
|
||||
utf8Name = %EC%A0%95%EC%88%98%EB%B9%88
|
||||
id = SKIP001
|
||||
*/
|
||||
return retInfo;
|
||||
|
||||
} catch(Exception e) {
|
||||
System.out.println(e.getMessage());
|
||||
return "fail";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String callCreateCryptoTokenAPI( Date currentDate, String req_no ) throws Exception {
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
long current_timestamp = currentDate.getTime() / 1000;
|
||||
String authorization = "bearer " + access_token;
|
||||
|
||||
Map<String, String> requestPropertyMap = new HashMap<>();
|
||||
requestPropertyMap.put("Content-Type", "application/json");
|
||||
requestPropertyMap.put("Authorization", authorization);
|
||||
|
||||
HttpURLConnection connection = getURLConnection(createCryptoTokenUrl, "POST", requestPropertyMap, true, false);
|
||||
JSONObject dataHeader = new JSONObject();
|
||||
dataHeader.put("lang_code", "kr");
|
||||
JSONObject dataBody = new JSONObject();
|
||||
dataBody.put("client_id", client_id);
|
||||
dataBody.put("req_date", formatter.format(currentDate));
|
||||
dataBody.put("req_no", req_no);
|
||||
dataBody.put("enc_mode", "1");
|
||||
JSONObject msgMap = new JSONObject();
|
||||
msgMap.put("dataHeader", dataHeader);
|
||||
msgMap.put("dataBody", dataBody);
|
||||
String msg = msgMap.toJSONString();
|
||||
if(send(connection.getOutputStream(), msg)) return "";
|
||||
String receiveMsg = receive(connection.getInputStream());
|
||||
|
||||
return receiveMsg;
|
||||
}
|
||||
|
||||
public String getEncReqData( String key, String iv, String reqData ) throws Exception {
|
||||
String req_info = "";
|
||||
try {
|
||||
SecretKey secureKey = new SecretKeySpec(key.getBytes(), "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, secureKey, new IvParameterSpec(iv.getBytes()));
|
||||
byte[] encrypted;
|
||||
encrypted = cipher.doFinal(reqData.trim().getBytes());
|
||||
req_info = Base64.getEncoder().encodeToString(encrypted);
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) getEncReqData Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
return req_info;
|
||||
}
|
||||
|
||||
public byte[] hmac256( byte[] secretKey, byte[] message ) throws Exception {
|
||||
byte[] hmac256 = null;
|
||||
try {
|
||||
Mac mac = Mac.getInstance("HmacSHA256");
|
||||
SecretKeySpec sks = new SecretKeySpec(secretKey, "HmacSHA256");
|
||||
mac.init(sks);
|
||||
hmac256 = mac.doFinal(message);
|
||||
return hmac256;
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) hmac256 Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public String createSymmetricKey( String req_dtim, String req_no, String token_val ) throws Exception {
|
||||
String symmetricKey = "";
|
||||
String value = req_dtim.trim() + req_no.trim() + token_val.trim();
|
||||
MessageDigest md;
|
||||
try {
|
||||
md = MessageDigest.getInstance("SHA-256");
|
||||
md.update(value.getBytes());
|
||||
byte[] arrHashValue = md.digest();
|
||||
symmetricKey = Base64.getEncoder().encodeToString(arrHashValue);
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) createSymmetricKey Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
return symmetricKey;
|
||||
}
|
||||
|
||||
|
||||
public Boolean send( OutputStream outputStream, String sendMsg ) throws Exception {
|
||||
Boolean isFail = true;
|
||||
BufferedWriter bufferedWriter = null;
|
||||
try {
|
||||
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
|
||||
bufferedWriter.write(sendMsg);
|
||||
bufferedWriter.flush();
|
||||
isFail = false;
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) send Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(bufferedWriter != null) {
|
||||
bufferedWriter.close();
|
||||
}
|
||||
}
|
||||
return isFail;
|
||||
}
|
||||
|
||||
private static HttpsURLConnection openHttps12( String urlStr ) throws Exception {
|
||||
URL url = new URL(urlStr);
|
||||
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
|
||||
|
||||
SSLContext ctx = SSLContext.getInstance("TLSv1.2");
|
||||
ctx.init(null, null, new SecureRandom());
|
||||
conn.setSSLSocketFactory(ctx.getSocketFactory());
|
||||
|
||||
|
||||
return conn;
|
||||
}
|
||||
|
||||
|
||||
public String receive( InputStream inputStream ) throws Exception {
|
||||
String receiveMsg = "";
|
||||
BufferedReader bufferedReader = null;
|
||||
try {
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
String inputLine;
|
||||
while((inputLine = bufferedReader.readLine()) != null) {
|
||||
stringBuilder.append(inputLine);
|
||||
}
|
||||
receiveMsg = stringBuilder.toString();
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) receive Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(bufferedReader != null) {
|
||||
bufferedReader.close();
|
||||
}
|
||||
}
|
||||
return receiveMsg;
|
||||
}
|
||||
|
||||
public HttpURLConnection getURLConnection( String urlStr, String method, Map<String, String> requestPropertyMap, Boolean isNeedOutput, Boolean isHttps ) throws Exception {
|
||||
try {
|
||||
URL url = new URL(urlStr);
|
||||
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod(method);
|
||||
|
||||
connection.setDoInput(true);
|
||||
if(isNeedOutput) connection.setDoOutput(true);
|
||||
for(String key : requestPropertyMap.keySet()) {
|
||||
connection.setRequestProperty(key, requestPropertyMap.get(key));
|
||||
}
|
||||
return connection;
|
||||
} catch(Exception e) {
|
||||
System.out.println(String.format("(APICERT)(ERR) getURLConnection Exception : %s", e.getMessage()));
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
}
|
||||
}
|
||||
|
||||
public String getReqData( String id, String reqcryptotokenid ) {
|
||||
|
||||
|
||||
JSONObject msgMap = new JSONObject();
|
||||
msgMap.put("id", id);
|
||||
msgMap.put("reqcryptotokenid", reqcryptotokenid);
|
||||
|
||||
|
||||
String reqData = msgMap.toJSONString();
|
||||
|
||||
return reqData;
|
||||
}
|
||||
|
||||
}
|
||||
188
src/main/java/kcc/ve/cmm/crt/CertPhoneWebController.java
Normal file
188
src/main/java/kcc/ve/cmm/crt/CertPhoneWebController.java
Normal file
@ -0,0 +1,188 @@
|
||||
package kcc.ve.cmm.crt;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import kcc.com.utl.user.service.CheckLoginUtil;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Controller
|
||||
public class CertPhoneWebController {
|
||||
|
||||
// 첨부파일 정보
|
||||
@Resource(name = "certPhoneRequestUtill")
|
||||
private CertPhoneRequestUtill certPhoneRequestUtill;
|
||||
|
||||
// 첨부파일 정보
|
||||
@Resource(name = "certPhoneResultUtill")
|
||||
private CertPhoneResultUtill certPhoneResultUtill;
|
||||
|
||||
//로그인 체크 util
|
||||
@Resource(name = "checkLoginUtil")
|
||||
private CheckLoginUtil checkLoginUtil;
|
||||
|
||||
/**
|
||||
* 본인인증
|
||||
*/
|
||||
@RequestMapping("/web/cmm/crt/certPhoneRequestAjax.do")
|
||||
public ModelAndView certPhoneRequestAjax( HttpServletRequest request ) throws Exception {
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
String result = "fail";
|
||||
|
||||
try {
|
||||
String url = "https://sciapi.siren24.com:52099/authentication/api/v1.0/common/crypto/token";
|
||||
|
||||
Date currentDate = new Date();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
String reqDate = sdf.format(currentDate);
|
||||
String reqNo = "koipa_edu";
|
||||
String id = "SKIP001";
|
||||
String clientId = "5a2a72e2-16ce-420c-8816-57b3dda0e231";
|
||||
String srvNo = "001003";
|
||||
String retUrl = "https://dev-ipedu-cert.iten.co.kr/ipedu/web/cmm/crt/certPhoneReturn.do";
|
||||
// String retUrl = "https://dev-ipedu-cert.iten.co.kr/ipedu/web/user/login/actionSecurityLogin.do";
|
||||
|
||||
String accessToken = "994b5d96-3788-4239-a5b0-a0ba2e0cf089";
|
||||
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
// 1. Header 설정
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
headers.set("Authorization", "bearer " + accessToken);
|
||||
|
||||
// 2. Body 생성
|
||||
Map<String, Object> dataHeader = new HashMap<>();
|
||||
dataHeader.put("lang_code", "kr");
|
||||
|
||||
Map<String, Object> dataBody = new HashMap<>();
|
||||
dataBody.put("client_id", clientId);
|
||||
dataBody.put("req_date", reqDate);
|
||||
dataBody.put("req_no", reqNo);
|
||||
dataBody.put("enc_mode", "1");
|
||||
|
||||
Map<String, Object> requestJson = new HashMap<>();
|
||||
requestJson.put("dataHeader", dataHeader);
|
||||
requestJson.put("dataBody", dataBody);
|
||||
|
||||
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestJson, headers);
|
||||
|
||||
// 3. POST 요청 호출
|
||||
ResponseEntity<String> response = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.POST,
|
||||
entity,
|
||||
String.class
|
||||
);
|
||||
|
||||
System.out.println("Response: " + response.getBody());
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
Map<String, Object> json = mapper.readValue(response.getBody(), Map.class);
|
||||
Map<String, Object> resDataBody = (Map<String, Object>) json.get("dataBody");
|
||||
|
||||
String cryptoTokenId = (String) resDataBody.get("crypto_token_id");
|
||||
String cryptoToken = (String) resDataBody.get("crypto_token");
|
||||
|
||||
String reqInfo = certPhoneRequestUtill.getReqData(id
|
||||
, srvNo
|
||||
, reqNo
|
||||
, "72" + retUrl
|
||||
, reqDate
|
||||
, "H"); //4번시트 5 본인확인 서비스 요청데이터 암호화 항목참조
|
||||
|
||||
String symmetricKey = certPhoneRequestUtill.createSymmetricKey(reqDate, reqNo, cryptoToken);
|
||||
|
||||
String key = symmetricKey.substring(0, 16);
|
||||
String iv = symmetricKey.substring(symmetricKey.length() - 16, symmetricKey.length());
|
||||
|
||||
request.getSession().setAttribute("reqkey", key);
|
||||
request.getSession().setAttribute("reqiv", iv);
|
||||
|
||||
reqInfo = certPhoneRequestUtill.getEncReqData(key, iv, reqInfo);
|
||||
|
||||
String hmacKey = symmetricKey.substring(0, 32);
|
||||
byte[] hmacSha256 = certPhoneRequestUtill.hmac256(hmacKey.getBytes(), reqInfo.getBytes());
|
||||
String integrityValue = Base64.getEncoder().encodeToString(hmacSha256);
|
||||
String baseEncStr = Base64.getEncoder().encodeToString(hmacSha256);
|
||||
|
||||
modelAndView.addObject("reqInfo", reqInfo);
|
||||
modelAndView.addObject("cryptoTokenId", cryptoTokenId);
|
||||
modelAndView.addObject("integrityValue", integrityValue);
|
||||
modelAndView.addObject("verSion", "3");
|
||||
result = "success";
|
||||
|
||||
} catch(Exception ex) {
|
||||
System.out.println(ex.getMessage());
|
||||
}
|
||||
|
||||
modelAndView.addObject("result", result);
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
@RequestMapping("/web/cmm/crt/certPhoneReturn.do")
|
||||
public String certPhoneReturn( HttpServletRequest request, ModelMap model ) throws Exception {
|
||||
|
||||
String retInfo = certPhoneResultUtill.certResult(request);
|
||||
|
||||
model.addAttribute("retInfo", retInfo);
|
||||
return "web/kccadr/login/CertPhoneResultPop";
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/web/cmm/crt/certPhoneRequestAjax_dev.do")
|
||||
public ModelAndView certPhoneRequestAjax_dev( HttpServletRequest request ) throws Exception {
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
// 1. 클라이언트에서 넘어온 평문 JSON 문자열
|
||||
String retInfo = request.getParameter("retInfo");
|
||||
System.out.println("plain retInfo -> " + retInfo);
|
||||
|
||||
// 2. 세션에서 키/IV 가져오기
|
||||
String reqkey = request.getSession().getAttribute("reqkey").toString();
|
||||
String reqiv = request.getSession().getAttribute("reqiv").toString();
|
||||
|
||||
// 3. AES 암호화 설정
|
||||
SecretKeySpec secureKey = new SecretKeySpec(reqkey.getBytes("UTF-8"), "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, secureKey, new IvParameterSpec(reqiv.getBytes("UTF-8")));
|
||||
|
||||
// 4. 평문 JSON 문자열을 바이트로 변환 후 암호화
|
||||
byte[] plainBytes = retInfo.getBytes("UTF-8");
|
||||
byte[] cipherBytes = cipher.doFinal(plainBytes);
|
||||
|
||||
// 5. 암호문을 Base64 인코딩해서 최종 문자열로 변환
|
||||
String encRetInfo = Base64.getEncoder().encodeToString(cipherBytes);
|
||||
|
||||
System.out.println("encrypted retInfo(Base64) -> " + encRetInfo);
|
||||
|
||||
// 필요하다면 응답에 포함
|
||||
modelAndView.addObject("result", "success");
|
||||
modelAndView.addObject("encRetInfo", encRetInfo);
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
121
src/main/java/kcc/ve/cmm/sendAt/PpurioGlobalSet.java
Normal file
121
src/main/java/kcc/ve/cmm/sendAt/PpurioGlobalSet.java
Normal file
@ -0,0 +1,121 @@
|
||||
package kcc.ve.cmm.sendAt;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class PpurioGlobalSet {
|
||||
|
||||
private static String id;
|
||||
private static String pw;
|
||||
private static String host;
|
||||
private static String senderKey;
|
||||
private static String templateCode1;
|
||||
private static String templateCode2;
|
||||
private static String templateCode3;
|
||||
private static String templateCode4;
|
||||
private static String templateCode5;
|
||||
private static String templateCode6;
|
||||
|
||||
private static String from;
|
||||
|
||||
@Value("#{globalSettings['ppurio.id']}")
|
||||
public void setId(String id) {
|
||||
PpurioGlobalSet.id = id;
|
||||
}
|
||||
|
||||
public static String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.pw']}")
|
||||
public void setPw(String pw) {
|
||||
PpurioGlobalSet.pw = pw;
|
||||
}
|
||||
|
||||
public static String getPw() {
|
||||
return pw;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.host']}")
|
||||
public void setHost(String host) {
|
||||
PpurioGlobalSet.host = host;
|
||||
}
|
||||
|
||||
public static String getHost() {
|
||||
return host;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.senderKey']}")
|
||||
public void setSenderKey(String senderKey) {
|
||||
PpurioGlobalSet.senderKey = senderKey;
|
||||
}
|
||||
|
||||
public static String getSenderKey() {
|
||||
return senderKey;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.templateCode1']}")
|
||||
public void setTemplateCode1(String templateCode1) {
|
||||
PpurioGlobalSet.templateCode1 = templateCode1;
|
||||
}
|
||||
|
||||
public static String getTemplateCode1() {
|
||||
return templateCode1;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.templateCode2']}")
|
||||
public void setTemplateCode2(String templateCode2) {
|
||||
PpurioGlobalSet.templateCode2 = templateCode2;
|
||||
}
|
||||
|
||||
public static String getTemplateCode2() {
|
||||
return templateCode2;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.templateCode3']}")
|
||||
public void setTemplateCode3(String templateCode3) {
|
||||
PpurioGlobalSet.templateCode3 = templateCode3;
|
||||
}
|
||||
|
||||
public static String getTemplateCode3() {
|
||||
return templateCode3;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.templateCode4']}")
|
||||
public void setTemplateCode4(String templateCode4) {
|
||||
PpurioGlobalSet.templateCode4 = templateCode4;
|
||||
}
|
||||
|
||||
public static String getTemplateCode4() {
|
||||
return templateCode4;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.templateCode5']}")
|
||||
public void setTemplateCode5(String templateCode5) {
|
||||
PpurioGlobalSet.templateCode5 = templateCode5;
|
||||
}
|
||||
|
||||
public static String getTemplateCode5() {
|
||||
return templateCode5;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.templateCode6']}")
|
||||
public void setTemplateCode6(String templateCode6) {
|
||||
PpurioGlobalSet.templateCode6 = templateCode6;
|
||||
}
|
||||
|
||||
public static String getTemplateCode6() {
|
||||
return templateCode6;
|
||||
}
|
||||
|
||||
@Value("#{globalSettings['ppurio.from']}")
|
||||
public void setFrom(String from) {
|
||||
PpurioGlobalSet.from = from;
|
||||
}
|
||||
|
||||
public static String getFrom() {
|
||||
return from;
|
||||
}
|
||||
|
||||
}
|
||||
89
src/main/java/kcc/ve/cmm/sendAt/SendAtVO.java
Normal file
89
src/main/java/kcc/ve/cmm/sendAt/SendAtVO.java
Normal file
@ -0,0 +1,89 @@
|
||||
package kcc.ve.cmm.sendAt;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @packageName : kcc.com.snd.service
|
||||
* @templatecode
|
||||
* @신청인_접수확인_1 :
|
||||
* TEMPLATE_APP_JUBSU
|
||||
* @chihwan : 없음
|
||||
* @신청인_담당자배정_1 :
|
||||
* TEMPLATE_APP_BAEJUNG
|
||||
* @chihwan : "caseNo", "team", "examiner", "tel", "email"
|
||||
* @양당사자_분쟁조정협의회 안건상정 :
|
||||
* TEMPLATE_BOTH_SANGJUNG
|
||||
* @chihwan : "caseNo", "cfrnc", "tel", "email"
|
||||
* @양당사자_출석요구 n차 :
|
||||
* TEMPLATE_BOTH_CHULSUK
|
||||
* @chihwan : "caseNo", "nCha"
|
||||
* @양당사자_통지 :
|
||||
* TEMPLATE_BOTH_TONGJI
|
||||
* @chihwan : "caseNo", "cfrnc"
|
||||
* @신청인_보완요구 n차 :
|
||||
* TEMPLATE_APP_BOWAN
|
||||
* @chihwan : "caseNo", "nCha"
|
||||
*
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class SendAtVO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@JsonIgnore
|
||||
private String accesstoken;
|
||||
private String type;
|
||||
@JsonIgnore
|
||||
private String expired;
|
||||
|
||||
|
||||
private String account;
|
||||
private String refkey;
|
||||
private String from;
|
||||
private String to;
|
||||
private Content content;
|
||||
|
||||
@JsonIgnore
|
||||
private Map<String, String> chihwan;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class Content {
|
||||
private At at;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class At {
|
||||
private String senderkey;
|
||||
private String templatecode;
|
||||
private String message;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public String toJson() throws JsonProcessingException {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
return mapper.writeValueAsString(this);
|
||||
}
|
||||
}
|
||||
52
src/main/java/kcc/ve/cmm/sendAt/SendService.java
Normal file
52
src/main/java/kcc/ve/cmm/sendAt/SendService.java
Normal file
@ -0,0 +1,52 @@
|
||||
package kcc.ve.cmm.sendAt;
|
||||
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface SendService {
|
||||
|
||||
/**
|
||||
* @methodName : sendAt
|
||||
* @author : JunHo Lee
|
||||
* @date : 2024.12.09
|
||||
* @description :
|
||||
* @param to
|
||||
* @param templateCode
|
||||
* @param chihwan
|
||||
*
|
||||
* @packageName : kcc.com.snd.service
|
||||
* @templatecode
|
||||
* @신청인_접수확인_1 :
|
||||
* TEMPLATE_APP_JUBSU
|
||||
* @chihwan : 없음
|
||||
* @신청인_담당자배정_2 :
|
||||
* TEMPLATE_APP_BAEJUNG
|
||||
* @chihwan : "respondent", "caseNo", "team", "examiner", "tel", "email"
|
||||
* @양당사자_분쟁조정협의회 안건상정 :
|
||||
* TEMPLATE_BOTH_SANGJUNG
|
||||
* @chihwan : "caseNo", "cfrnc", "tel", "email"
|
||||
* @양당사자_출석요구 n차 :
|
||||
* TEMPLATE_BOTH_CHULSUK
|
||||
* @chihwan : "caseNo", "nCha"
|
||||
* @양당사자_통지 :
|
||||
* TEMPLATE_BOTH_TONGJI
|
||||
* @chihwan : "caseNo", "cfrnc"
|
||||
* @신청인_보완요구 n차 :
|
||||
* TEMPLATE_APP_BOWAN
|
||||
* @chihwan : "caseNo", "nCha"
|
||||
*
|
||||
*/
|
||||
void sendAt(String to, String templateCode, Map<String, String> chihwan) throws Exception;
|
||||
|
||||
Map<String, Object> sendSms(String to, String subject, String smsContent, String type) throws Exception;
|
||||
|
||||
SendSmsVO selectSendSet() throws Exception;
|
||||
|
||||
void updateSendSet(SendSmsVO sendSmsVO) throws Exception;
|
||||
|
||||
EgovMap selectTEMPLATE_APP_BAEJUNG(EgovMap egovMap) throws Exception;
|
||||
|
||||
List<EgovMap> selectTEMPLATE_BOTH_CHULSUK(EgovMap egovMap) throws Exception;
|
||||
}
|
||||
24
src/main/java/kcc/ve/cmm/sendAt/SendSmsVO.java
Normal file
24
src/main/java/kcc/ve/cmm/sendAt/SendSmsVO.java
Normal file
@ -0,0 +1,24 @@
|
||||
package kcc.ve.cmm.sendAt;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class SendSmsVO extends SendAtVO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String subject;
|
||||
private String smsContent;
|
||||
|
||||
private String atYn;
|
||||
private String smsYn;
|
||||
private String emailYn;
|
||||
|
||||
}
|
||||
38
src/main/java/kcc/ve/cmm/sendAt/impl/SendDAO.java
Normal file
38
src/main/java/kcc/ve/cmm/sendAt/impl/SendDAO.java
Normal file
@ -0,0 +1,38 @@
|
||||
package kcc.ve.cmm.sendAt.impl;
|
||||
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import kcc.com.cmm.service.impl.EgovComAbstractDAO;
|
||||
import kcc.ve.cmm.sendAt.SendAtVO;
|
||||
import kcc.ve.cmm.sendAt.SendSmsVO;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Repository("sendDAO")
|
||||
public class SendDAO extends EgovComAbstractDAO {
|
||||
|
||||
public SendAtVO selectToken() throws Exception{
|
||||
return (SendAtVO) select("sendDAO.selectToken");
|
||||
}
|
||||
|
||||
public void updateToken(SendAtVO SendAtVO) throws Exception{
|
||||
update("sendDAO.updateToken", SendAtVO);
|
||||
}
|
||||
|
||||
public SendSmsVO selectSendSet() throws Exception{
|
||||
return (SendSmsVO) select("sendDAO.selectSendSet");
|
||||
}
|
||||
|
||||
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{
|
||||
update("sendDAO.updateSendSet", sendSmsVO);
|
||||
}
|
||||
|
||||
public EgovMap selectTEMPLATE_APP_BAEJUNG(EgovMap egovMap) {
|
||||
return (EgovMap) select("sendDAO.selectTEMPLATE_APP_BAEJUNG", egovMap);
|
||||
}
|
||||
|
||||
public List<EgovMap> selectTEMPLATE_BOTH_CHULSUK(EgovMap egovMap) {
|
||||
return (List<EgovMap>) list("sendDAO.selectTEMPLATE_BOTH_CHULSUK", egovMap);
|
||||
}
|
||||
}
|
||||
548
src/main/java/kcc/ve/cmm/sendAt/impl/SendServiceImpl.java
Normal file
548
src/main/java/kcc/ve/cmm/sendAt/impl/SendServiceImpl.java
Normal file
@ -0,0 +1,548 @@
|
||||
package kcc.ve.cmm.sendAt.impl;
|
||||
|
||||
|
||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import kcc.ve.cmm.sendAt.SendAtVO.Content;
|
||||
import kcc.ve.cmm.sendAt.SendAtVO.Content.At;
|
||||
import kcc.ve.cmm.sendAt.PpurioGlobalSet;
|
||||
import kcc.ve.cmm.sendAt.SendAtVO;
|
||||
import kcc.ve.cmm.sendAt.SendService;
|
||||
import kcc.ve.cmm.sendAt.SendSmsVO;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@Service("SendService")
|
||||
public class SendServiceImpl extends EgovAbstractServiceImpl implements SendService {
|
||||
|
||||
@Resource(name="sendDAO")
|
||||
private SendDAO sendDAO;
|
||||
|
||||
@Override
|
||||
public void sendAt(
|
||||
String to
|
||||
, String templateCode
|
||||
, Map<String, String> chihwan
|
||||
) throws Exception{
|
||||
SendAtVO vo = new SendAtVO();
|
||||
vo = sendDAO.selectToken();
|
||||
|
||||
//이전 발급 토큰이 만료되었는지 시간비교
|
||||
if(timeDiffBefore(vo.getExpired())) {
|
||||
//토큰 발급
|
||||
if(this.getPpurioToken(vo)) {
|
||||
//토큰 갱신
|
||||
sendDAO.updateToken(vo);
|
||||
}else {
|
||||
System.out.println("토큰 갱신 실패");
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
|
||||
vo = vo.builder()
|
||||
.accesstoken(vo.getAccesstoken())
|
||||
.expired(vo.getExpired())
|
||||
.refkey("test1234")
|
||||
.type(vo.getType())
|
||||
.to(to)
|
||||
.content(Content.builder()
|
||||
.at(SendAtVO.Content.At.builder()
|
||||
.templatecode(templateCode)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.chihwan(chihwan)
|
||||
.build()
|
||||
;
|
||||
|
||||
this.sendAt(vo);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> sendSms(
|
||||
String to
|
||||
, String subject
|
||||
, String smsContent
|
||||
, String type
|
||||
) throws Exception{
|
||||
Boolean success = true;
|
||||
int successCnt = 0;
|
||||
SendAtVO vo = new SendAtVO();
|
||||
vo = sendDAO.selectToken();
|
||||
|
||||
//이전 발급 토큰이 만료되었는지 시간비교
|
||||
if(timeDiffBefore(vo.getExpired())) {
|
||||
//토큰 발급
|
||||
if(this.getPpurioToken(vo)) {
|
||||
//토큰 갱신
|
||||
sendDAO.updateToken(vo);
|
||||
}else {
|
||||
System.out.println("토큰 갱신 실패");
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
SendSmsVO smsVO = new SendSmsVO();
|
||||
BeanUtils.copyProperties(smsVO, vo);
|
||||
smsVO.setSubject(subject);
|
||||
smsVO.setSmsContent(smsContent);
|
||||
smsVO.setType(type);
|
||||
|
||||
String[] phoneNums = to.split(",");
|
||||
for(String phone : phoneNums) {
|
||||
smsVO.setTo(phone);
|
||||
boolean result = this.sendSmsPrcs(smsVO);
|
||||
if(result) {
|
||||
successCnt++;
|
||||
}else {
|
||||
success = false;
|
||||
System.out.println("문자 발송 실패: " + phone);
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
resultMap.put("success" , success);
|
||||
resultMap.put("successCnt" , successCnt);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SendSmsVO selectSendSet() throws Exception{
|
||||
return sendDAO.selectSendSet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{
|
||||
sendDAO.updateSendSet(sendSmsVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EgovMap selectTEMPLATE_APP_BAEJUNG( EgovMap egovMap) throws Exception{
|
||||
return sendDAO.selectTEMPLATE_APP_BAEJUNG(egovMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EgovMap> selectTEMPLATE_BOTH_CHULSUK(EgovMap egovMap) throws Exception{
|
||||
return sendDAO.selectTEMPLATE_BOTH_CHULSUK(egovMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @methodName : timeDiffBefore
|
||||
* @author : JunHo Lee
|
||||
* @date : 2024.12.09
|
||||
* @description :
|
||||
* @param str
|
||||
* @return :
|
||||
* !str이 현재 시간보다 이전이면 true
|
||||
* !str이 현재 시간보다 이후이면 false
|
||||
*/
|
||||
private Boolean timeDiffBefore(String str) {
|
||||
try {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
Date diffDate = sdf.parse(str);
|
||||
|
||||
Date currentDate = new Date();
|
||||
|
||||
if (diffDate.before(currentDate)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static String sendAt(SendAtVO sendAtVO) {
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
|
||||
String input = null;
|
||||
|
||||
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
|
||||
|
||||
try {
|
||||
|
||||
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
|
||||
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
|
||||
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
|
||||
public X509Certificate[] getAcceptedIssuers() { return null; }
|
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } };
|
||||
SSLContext sc = SSLContext.getInstance("SSL");
|
||||
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
}
|
||||
|
||||
URL url = new URL(ppurioGlobalSet.getHost() + "/v3/message");
|
||||
|
||||
/** Connection 설정 **/
|
||||
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("POST");
|
||||
connection.addRequestProperty("Content-Type", "application/json");
|
||||
connection.addRequestProperty("Accept-Charset", "UTF-8");
|
||||
connection.addRequestProperty("Authorization", "Bearer " + sendAtVO.getAccesstoken());
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setConnectTimeout(15000);
|
||||
|
||||
|
||||
/** Request **/
|
||||
At at = sendAtVO.getContent().getAt();
|
||||
at = messageSet(at, sendAtVO.getChihwan());
|
||||
|
||||
sendAtVO = sendAtVO.builder()
|
||||
.account(ppurioGlobalSet.getId())
|
||||
.refkey(sendAtVO.getRefkey())
|
||||
.type("at")
|
||||
.from(ppurioGlobalSet.getFrom())
|
||||
.to(sendAtVO.getTo())
|
||||
.content(Content.builder()
|
||||
.at(At.builder()
|
||||
.senderkey(ppurioGlobalSet.getSenderKey())
|
||||
.templatecode(at.getTemplatecode())
|
||||
.message(at.getMessage())
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
// Request body 전송
|
||||
try (OutputStream os = connection.getOutputStream()) {
|
||||
os.write(sendAtVO.toJson().getBytes("UTF-8"));
|
||||
os.flush();
|
||||
}
|
||||
|
||||
// 서버 응답 처리
|
||||
int responseCode = connection.getResponseCode();
|
||||
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
|
||||
while ((input = reader.readLine()) != null) {
|
||||
result.append(input);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 오류 응답 처리
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
|
||||
StringBuilder errorResponse = new StringBuilder();
|
||||
while ((input = reader.readLine()) != null) {
|
||||
errorResponse.append(input);
|
||||
}
|
||||
System.out.println("Error Response: " + errorResponse.toString());
|
||||
return "Error: " + errorResponse.toString();
|
||||
}
|
||||
}
|
||||
connection.disconnect();
|
||||
|
||||
System.out.println("Response : " + result.toString());
|
||||
|
||||
JSONObject jObject = new JSONObject(result.toString());
|
||||
// status = jObject.getString("description");
|
||||
|
||||
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
// return status;
|
||||
}
|
||||
|
||||
public static Boolean sendSmsPrcs(SendSmsVO sendSmsVO) {
|
||||
|
||||
Boolean success = true;
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
|
||||
String input = null;
|
||||
|
||||
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
|
||||
|
||||
try {
|
||||
|
||||
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
|
||||
if(ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
|
||||
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
|
||||
public X509Certificate[] getAcceptedIssuers() { return null; }
|
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } };
|
||||
SSLContext sc = SSLContext.getInstance("SSL");
|
||||
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
}
|
||||
|
||||
URL url = new URL(ppurioGlobalSet.getHost() + "/v3/message");
|
||||
|
||||
/** Connection 설정 **/
|
||||
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("POST");
|
||||
connection.addRequestProperty("Content-Type", "application/json");
|
||||
connection.addRequestProperty("Accept-Charset", "UTF-8");
|
||||
connection.addRequestProperty("Authorization", "Bearer " + sendSmsVO.getAccesstoken());
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setConnectTimeout(15000);
|
||||
|
||||
/*SMS LMS 구분처리*/
|
||||
JSONObject sms = new JSONObject();
|
||||
sms.put("message", sendSmsVO.getSmsContent());
|
||||
if("LMS".equals(sendSmsVO.getType())) {
|
||||
sms.put("subject", sendSmsVO.getSubject());
|
||||
}
|
||||
JSONObject content = new JSONObject();
|
||||
if("SMS".equals(sendSmsVO.getType())) {
|
||||
content.put("sms", sms);
|
||||
}else {
|
||||
content.put("lms", sms);
|
||||
}
|
||||
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("account", ppurioGlobalSet.getId());
|
||||
json.put("type", sendSmsVO.getType().toLowerCase());
|
||||
json.put("from", "15881490");
|
||||
json.put("to", sendSmsVO.getTo());
|
||||
json.put("content", content);
|
||||
json.put("refkey", "test1234");
|
||||
|
||||
String body = json.toString();
|
||||
|
||||
// Request body 전송
|
||||
try (OutputStream os = connection.getOutputStream()) {
|
||||
os.write(body.getBytes("UTF-8"));
|
||||
os.flush();
|
||||
}
|
||||
|
||||
// 서버 응답 처리
|
||||
int responseCode = connection.getResponseCode();
|
||||
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
|
||||
while ((input = reader.readLine()) != null) {
|
||||
result.append(input);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 오류 응답 처리
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
|
||||
StringBuilder errorResponse = new StringBuilder();
|
||||
while ((input = reader.readLine()) != null) {
|
||||
errorResponse.append(input);
|
||||
}
|
||||
System.out.println("Error Response: " + errorResponse.toString());
|
||||
success = false;
|
||||
//return "Error: " + errorResponse.toString();
|
||||
}
|
||||
}
|
||||
connection.disconnect();
|
||||
|
||||
System.out.println("Response : " + result.toString());
|
||||
|
||||
JSONObject jObject = new JSONObject(result.toString());
|
||||
// status = jObject.getString("description");
|
||||
|
||||
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
success = false;
|
||||
} catch (KeyManagementException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
success = false;
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
success = false;
|
||||
}
|
||||
return success;
|
||||
// return status;
|
||||
}
|
||||
|
||||
public static Boolean getPpurioToken(SendAtVO sendAtVO) {
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
|
||||
String input = null;
|
||||
|
||||
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
|
||||
|
||||
try {
|
||||
|
||||
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
|
||||
if(ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
|
||||
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
|
||||
public X509Certificate[] getAcceptedIssuers() { return null; }
|
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } };
|
||||
SSLContext sc = SSLContext.getInstance("SSL");
|
||||
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
}
|
||||
|
||||
URL url = new URL(ppurioGlobalSet.getHost() + "/v1/token");
|
||||
|
||||
/** Connection 설정 **/
|
||||
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("POST");
|
||||
connection.addRequestProperty("Content-Type", "application/json");
|
||||
connection.addRequestProperty("Accept-Charset", "UTF-8");
|
||||
|
||||
//Base64 인코딩
|
||||
String idpw = ppurioGlobalSet.getId() + ":" + ppurioGlobalSet.getPw();
|
||||
String authData = Base64.getEncoder().encodeToString(idpw.getBytes());
|
||||
|
||||
connection.addRequestProperty("Authorization", "Basic " + authData);
|
||||
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setConnectTimeout(15000);
|
||||
|
||||
/** Request **/
|
||||
OutputStream os = connection.getOutputStream();
|
||||
os.flush();
|
||||
|
||||
/** Response **/
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
|
||||
|
||||
while ((input = in.readLine()) != null) {
|
||||
result.append(input);
|
||||
}
|
||||
connection.disconnect();
|
||||
|
||||
if (result.length() > 0) {
|
||||
JSONObject jObject = new JSONObject(result.toString());
|
||||
if (
|
||||
jObject.has("accesstoken")
|
||||
&& !jObject.isNull("accesstoken")
|
||||
&& jObject.has("type")
|
||||
&& !jObject.isNull("type")
|
||||
&& jObject.has("expired")
|
||||
&& !jObject.isNull("expired")
|
||||
) {
|
||||
sendAtVO.setAccesstoken(jObject.getString("accesstoken"));
|
||||
sendAtVO.setType(jObject.getString("type"));
|
||||
sendAtVO.setExpired(jObject.getString("expired"));
|
||||
} else {
|
||||
System.out.println("response data not found or is null");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
System.out.println("Empty response");
|
||||
return false;
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return false;
|
||||
} catch (KeyManagementException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return false;
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static At messageSet(
|
||||
At at,
|
||||
Map<String, String> chihwan
|
||||
) {
|
||||
String content = "";
|
||||
Map<String, String[]> requiredPlaceholders = new HashMap<>();
|
||||
|
||||
switch (at.getTemplatecode()) {
|
||||
case "TEMPLATE_APP_JUBSU": // 신청인_접수확인_1
|
||||
at.setTemplatecode("bizp_2024112810423519814410026");
|
||||
content = "[한국공정거래조정원] \r\n"
|
||||
+ "귀사(하)의 조정신청이 접수 완료되었습니다.\r\n"
|
||||
+ "향후 담당부서 및 담당자가 배정될 예정입니다.";
|
||||
break;
|
||||
case "TEMPLATE_APP_BAEJUNG": // 신청인_담당자배정_2
|
||||
// at.setTemplatecode("bizp_2024112810423516931294012");
|
||||
at.setTemplatecode("bizp_2024121915475924487679960");
|
||||
content = "[한국공정거래조정원]\r\n"
|
||||
+ "귀사(하)가 #{respondent}을(를) 상대로 신청한 사건의 사건번호는 #{caseNo}, 담당자는 #{team}팀 #{examiner} 조사관(유선전화:#{tel}, 메일주소 #{email})입니다.\r\n"
|
||||
+ "향후 담당 조사관이 공문 등을 통해 연락드릴 예정입니다.";
|
||||
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"respondent","caseNo", "team", "examiner", "tel", "email"});
|
||||
break;
|
||||
case "TEMPLATE_BOTH_SANGJUNG": // 양당사자_분쟁조정협의회 안건상정
|
||||
at.setTemplatecode("bizp_2024112810492919814837182");
|
||||
content = "[한국공정거래조정원]\r\n"
|
||||
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]이 향후 개최될 #{cfrnc}분쟁조정협의회에 상정될 예정입니다.\r\n"
|
||||
+ "#{cfrnc}분쟁조정협의회 기일은 담당 조사관(유선전화:#{tel}, 메일주소 #{email})에게 문의주시면 안내드리겠습니다.";
|
||||
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "cfrnc", "tel", "email"});
|
||||
break;
|
||||
case "TEMPLATE_BOTH_CHULSUK": // 양당사자_출석요구 n차
|
||||
// at.setTemplatecode("bizp_2024112810492916931760451");
|
||||
at.setTemplatecode("bizp_2025011515420924487914030");
|
||||
content = "[한국공정거래조정원]\r\n"
|
||||
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]의 출석조사(#{nCha}차) 기일이 확정되었습니다. \r\n"
|
||||
+ "향후 담당 조사관이 공문 등을 통해 연락드릴 예정입니다. \r\n"
|
||||
+ "https://fairnet.kofair.or.kr";
|
||||
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "nCha"});
|
||||
break;
|
||||
case "TEMPLATE_BOTH_TONGJI": // 양당사자_통지
|
||||
// at.setTemplatecode("bizp_2024112810492916931854671");
|
||||
at.setTemplatecode("bizp_2025011515425124487733149");
|
||||
content = "[한국공정거래조정원]\r\n"
|
||||
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]에 대한 #{cfrnc}분쟁조정협의회 의결이 완료되었습니다.\r\n"
|
||||
+ "한국공정거래조정원 분쟁조정사건처리시스템에서 확인해주시기 바랍니다.\r\n"
|
||||
+ "https://fairnet.kofair.or.kr";
|
||||
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "cfrnc"});
|
||||
break;
|
||||
case "TEMPLATE_APP_BOWAN": // 신청인_보완요구 n차
|
||||
// at.setTemplatecode("bizp_2024112810522719814540186");
|
||||
at.setTemplatecode("bizp_2025011515404892092190436");
|
||||
content =
|
||||
"[한국공정거래조정원]\r\n"
|
||||
+ "귀사(하)가 신청한 분쟁조정 신청사건(사건번호 #{caseNo})에 대한 보완(#{nCha}차)이 필요합니다.\r\n"
|
||||
+ "향후 담당 조사관이 공문 등을 통해 연락드릴 예정입니다. \r\n"
|
||||
+ "https://fairnet.kofair.or.kr";
|
||||
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "nCha"});
|
||||
break;
|
||||
}
|
||||
|
||||
String[] placeholders = requiredPlaceholders.get(at.getTemplatecode());
|
||||
if (placeholders != null) {
|
||||
for (String placeholder : placeholders) {
|
||||
String value = chihwan.get(placeholder);
|
||||
if (value == null || value.isEmpty()) {
|
||||
throw new IllegalArgumentException(placeholder + " 값이 없습니다.");
|
||||
}
|
||||
content = content.replace("#{" + placeholder + "}", value);
|
||||
}
|
||||
}
|
||||
|
||||
at.setMessage(content);
|
||||
return at;
|
||||
}
|
||||
}
|
||||
@ -6,16 +6,7 @@ import java.net.URLEncoder;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.activation.DataHandler;
|
||||
@ -394,8 +385,18 @@ public class MainController {
|
||||
|
||||
@RequestMapping(value = "/web/main/mainPage.do")
|
||||
public String siteMainPage(HttpServletRequest request, ModelMap model, HttpSession session) throws Exception{
|
||||
|
||||
//메인이미지
|
||||
try {
|
||||
|
||||
// 문자열을 바이트로 변환하고 Base64로 인코딩합니다.
|
||||
byte[] encodedBytes = Base64.getEncoder().encode("5a2a72e2-16ce-420c-8816-57b3dda0e231:75f6288bae324cd6bd112e82d693aa01".getBytes());
|
||||
|
||||
// 바이트 배열을 다시 문자열로 변환하여 출력합니다.
|
||||
String encodedString = new String(encodedBytes);
|
||||
|
||||
System.out.println("encodedString :: " + encodedString);
|
||||
|
||||
/** 메인존 */
|
||||
model.addAttribute("mainzoneList", mainZone()); //PC
|
||||
|
||||
|
||||
@ -896,7 +896,7 @@ function set_bbs(){
|
||||
<span id="BBSNameSpan" style="color: blue"></span>
|
||||
<span id="showUrl" style="display: none;" >
|
||||
<br>
|
||||
URL <input type="text" name="url" id="url" size="90"/>
|
||||
URL <input type="text" name="url" id="url" size="50"/>
|
||||
<input type="hidden" id="url_tmp" name="url_tmp"/>
|
||||
</span>
|
||||
</td>
|
||||
|
||||
@ -108,14 +108,14 @@ function fn_popupzone_update(method_parm) {
|
||||
frm = document.writeForm;
|
||||
frm.action = "<c:url value='/uss/ion/pwm/popupzoneInsert.do'/>";
|
||||
if(fn_checkForm(1))
|
||||
goSave(method_parm)
|
||||
goSave(method_parm);
|
||||
}
|
||||
/* 글 등록 function */
|
||||
function fn_popupzone_insert(method_parm) {
|
||||
frm = document.writeForm;
|
||||
frm.action = "<c:url value='/uss/ion/pwm/popupzoneInsert.do'/>";
|
||||
if(fn_checkForm(1))
|
||||
goSave(method_parm)
|
||||
goSave(method_parm);
|
||||
}
|
||||
|
||||
/* 배너 삭제 function */
|
||||
|
||||
@ -1,47 +1,7 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<!-- <script type="text/javaScript" language="javascript" defer="defer">
|
||||
|
||||
function footerSiteLinkPageGo (){
|
||||
/* var site = $('#footerSite').val();
|
||||
if(site == ""){
|
||||
alert("사이트를 선택해 주세요")
|
||||
}else{
|
||||
window.open(site);
|
||||
} */
|
||||
var url = $("#site_select").val();
|
||||
|
||||
if (url == ""){
|
||||
alert("사이트를 선택해 주세요");
|
||||
}
|
||||
else if (url == "SITE005" ) {
|
||||
// 디지털 저작권 거래소
|
||||
$('#usrModifyForm').attr("action","https://www.kdce.or.kr/user/main.do");
|
||||
$('#usrModifyForm').submit();
|
||||
} else if (url == "SITE006" ) {
|
||||
// 권리자 찾기
|
||||
$('#usrModifyForm').attr("action","https://www.findcopyright.or.kr/ssoMain.do");
|
||||
$('#usrModifyForm').submit();
|
||||
} else if (url == "SITE007" ) {
|
||||
// OLIS 오픈소스SW 라이선스
|
||||
$('#usrModifyForm').attr("action","https://www.olis.or.kr/membership/ssoOlisLogin.do");
|
||||
$('#usrModifyForm').submit();
|
||||
} else if (url == "SITE008" ) {
|
||||
// 공유마당
|
||||
$('#usrModifyForm').attr("action","https://gongu.copyright.or.kr/gongu/member/user/ssoLogin.do");
|
||||
$('#usrModifyForm').submit();
|
||||
} else if (url == "SITE009" ) {
|
||||
// 저작권 인증
|
||||
$('#usrModifyForm').attr("action","https://cras.copyright.or.kr/front/right/comm/ssoLoginMain.do");
|
||||
$('#usrModifyForm').submit();
|
||||
} else {
|
||||
window.open(url);
|
||||
}
|
||||
}
|
||||
</script> -->
|
||||
|
||||
<footer>
|
||||
|
||||
<div class="area_top">
|
||||
<div class="inner">
|
||||
<ul>
|
||||
@ -51,11 +11,11 @@ function footerSiteLinkPageGo (){
|
||||
<li><a href="https://www.koipa.re.kr/home/content.do?menu_cd=000008" target="_blank" title="새창열림">찾아오시는 길 <i></i></a></li>
|
||||
</ul>
|
||||
<ul class="sns">
|
||||
<li><a href="https://www.youtube.com/user/kipracafe" target="_blank" title="새창열림"><img src="/ipedu/visitEdu/usr/publish/images/common/sns_youtube.png" alt=""></a></li>
|
||||
<li><a href="https://blog.naver.com/koipa_ip" target="_blank" title="새창열림"><img src="/ipedu/visitEdu/usr/publish/images/common/sns_blog.png" alt=""></a></li>
|
||||
<li><a href="https://www.instagram.com/koipa_ip/" target="_blank" title="새창열림"><img src="/ipedu/visitEdu/usr/publish/images/common/sns_insta.png" alt=""></a></li>
|
||||
<li><a href="https://www.facebook.com/koipa.ip/" target="_blank" title="새창열림"><img src="/ipedu/visitEdu/usr/publish/images/common/sns_facebook.png" alt=""></a></li>
|
||||
<li><a href="https://twitter.com/ip_protection" target="_blank" title="새창열림"><img src="/ipedu/visitEdu/usr/publish/images/common/sns_twitter.png" alt=""></a></li>
|
||||
<li><a href="https://www.youtube.com/user/kipracafe" target="_blank" title="새창열림"><img src="${pageContext.request.contextPath}/visitEdu/usr/publish/images/common/sns_youtube.png" alt=""></a></li>
|
||||
<li><a href="https://blog.naver.com/koipa_ip" target="_blank" title="새창열림"><img src="${pageContext.request.contextPath}/visitEdu/usr/publish/images/common/sns_blog.png" alt=""></a></li>
|
||||
<li><a href="https://www.instagram.com/koipa_ip/" target="_blank" title="새창열림"><img src="${pageContext.request.contextPath}/visitEdu/usr/publish/images/common/sns_insta.png" alt=""></a></li>
|
||||
<li><a href="https://www.facebook.com/koipa.ip/" target="_blank" title="새창열림"><img src="${pageContext.request.contextPath}/visitEdu/usr/publish/images/common/sns_facebook.png" alt=""></a></li>
|
||||
<li><a href="https://twitter.com/ip_protection" target="_blank" title="새창열림"><img src="${pageContext.request.contextPath}/visitEdu/usr/publish/images/common/sns_twitter.png" alt=""></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -89,7 +89,7 @@
|
||||
if (event.persisted || (window.performance && window.performance.navigation.type == 2)) {
|
||||
} else { // 새 페이지 열릴 시
|
||||
// 등록, 수정, 삭제, 실패 등 페이지 처리 완료 후 메세지
|
||||
<c:if test="${!empty message}">alert("${message}");</c:if>
|
||||
<%-- <c:if test="${!empty message}">alert("${message}");</c:if>--%>
|
||||
}
|
||||
}
|
||||
function isMobile(){
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
opener.document.loginForm.retInfo.value = '<c:out value="${retInfo}"/>';
|
||||
opener.actionLogin();
|
||||
self.close();
|
||||
});
|
||||
</script>
|
||||
@ -1,90 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
|
||||
<script type="text/javascript">
|
||||
function press(event) {
|
||||
if (event.keyCode == 13)
|
||||
actionLogin();
|
||||
}
|
||||
|
||||
function sessionRegist() {
|
||||
/* if (document.loginForm.id_text.value =="") {
|
||||
alert("아이디를 입력하세요");
|
||||
return;
|
||||
} else if (document.loginForm.password_text.value =="") {
|
||||
alert("비밀번호를 입력하세요");
|
||||
return;
|
||||
} else { */
|
||||
//개발 완료시 삭제영역
|
||||
/* const str = $("#devIdSelect").val();
|
||||
const arr = str.split("/");
|
||||
$("#id_text").val(arr[0]);
|
||||
$("#password_text").val(arr[1]);
|
||||
//개발완료시 삭제 영역 끝
|
||||
|
||||
var id = $("#id_text").val();
|
||||
var pw = $("#password_text").val();
|
||||
|
||||
$("#id").val(id);
|
||||
$("#password").val(pw); */
|
||||
|
||||
document.ssoLoginVO.action = "<c:url value='/web/user/login/ssoSessionRegist.do'/>";
|
||||
document.ssoLoginVO.submit();
|
||||
|
||||
}
|
||||
</script>
|
||||
<form:form id="ssoLoginVO" name="ssoLoginVO" method="post" action="/web/user/login/ssoSessionRegist.do">
|
||||
<input type="hidden" name="membSeq" id="membSeq" value="<c:out value='${membSeq}'/>">
|
||||
<input type="hidden" name="membSmsRecpYn" id="membSmsRecpYn" value="Y">
|
||||
<input type="hidden" name="error" id="error" value="0000">
|
||||
<input type="hidden" name="membCi" id="BWqlL7enYj5t2aDsrbvX97vk5wW2+MD08M6e7NtHI9GVeWfWioe8L2m7mheHWKht4uxDUC3k8xG81YgRnasdlw==">
|
||||
<input type="hidden" name="membEmailRecpYn" id="membEmailRecpYn" value="Y">
|
||||
|
||||
<!-- cont -->
|
||||
<div class="cont_wrap login_cont" id="sub">
|
||||
<div class="inner">
|
||||
<div class="cont_tit">
|
||||
<h2>로그인</h2>
|
||||
</div>
|
||||
<fieldset>
|
||||
<div class="login_wrap">
|
||||
<p class="login_tit">
|
||||
<span>세션등록</span> 해주세요
|
||||
</p>
|
||||
|
||||
<p class="login_tit">
|
||||
<span>외부개발자용 세션등록은 <br>세션에서 SSO로그인과 같이 개인정보를 가져오기 위함입니다.<br>모든 입력은 필수입니다.<br></span>
|
||||
</p>
|
||||
<div class="login_form">
|
||||
이름 :
|
||||
<input type="text" name="membName" id="membName" value="김고객" style="width: 50%;">
|
||||
</br>
|
||||
아이디(XXXX@XXXX.XXX) :
|
||||
<input type="text" name="membId" id="membId" value="daeneg" style="width: 50%;">
|
||||
</br>
|
||||
성별(M,W) :
|
||||
<input type="text" name="sexCode" id="sexCode" value="M" style="width: 50%;">
|
||||
</br>
|
||||
이메일(XXXXX@XXX.XXX) :
|
||||
<input type="text" name="membEmail" id="membEmail" value="daenge@daenge.com" style="width: 50%;">
|
||||
</br>
|
||||
휴대폰번호(XXX-XXXX-XXXX) :
|
||||
<input type="text" name="membCelnum" id="membCelnum" value="010-1231-1212" style="width: 50%;">
|
||||
</br>
|
||||
생년월일(YYYY-MM-DD) :
|
||||
<input type="text" name="membBirth" id="membBirth" value="19881210" style="width: 50%;">
|
||||
</br>
|
||||
|
||||
<div class="btn_wrap">
|
||||
<button type="button" onclick="javascript:sessionRegist();" class="btn_login">SSO로그인 세션 등록</button>
|
||||
</div>
|
||||
<div class="login_util"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- //cont -->
|
||||
</form:form>
|
||||
@ -4,6 +4,11 @@
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
|
||||
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
|
||||
|
||||
<%
|
||||
String profile = System.getProperty("spring.profiles.active");
|
||||
request.setAttribute("profile", profile);
|
||||
%>
|
||||
|
||||
<style>
|
||||
.snb {width:0px}
|
||||
</style>
|
||||
@ -14,21 +19,85 @@ $(document).ready(function(){
|
||||
}
|
||||
});
|
||||
|
||||
function login() {
|
||||
if($('#devIdSelect').val() != ""){
|
||||
|
||||
const str = $("#devIdSelect").val();
|
||||
const arr = str.split(":");
|
||||
$("#membName").val(arr[0]);
|
||||
$("#membCelnum").val(arr[1]);
|
||||
$("#sexCode").val(arr[2]);
|
||||
$("#membBirth").val(arr[3]);
|
||||
$("#mberCi").val(arr[4]);
|
||||
|
||||
$("#isSelect").val("Y");
|
||||
actionLogin();
|
||||
|
||||
<c:if test="${profile eq 'tLocal'}">
|
||||
function devLogin() {
|
||||
if ($('#devIdSelect').val() != "") {
|
||||
|
||||
const str = $("#devIdSelect").val();
|
||||
const arr = str.split(":");
|
||||
|
||||
// ➊ retInfo 평문 문자열 생성
|
||||
let retInfoStr =
|
||||
'{' +
|
||||
'"Commid":"KTM",' +
|
||||
'"reqNum":"koipa_edu",' +
|
||||
'"gender":"' + arr[2] + '",' +
|
||||
'"di":"MC0GCCqGSIb3DQIJAyEAu7FiVqtM/qf7o/KlCxGNQtWWSEoxUzcLWNtM3gXU/hA=",' +
|
||||
'"ci":"' + arr[4] + '",' +
|
||||
'"celNo":"' + arr[1] + '",' +
|
||||
'"fgnGbn":"1",' +
|
||||
'"certGb":"H",' +
|
||||
'"userName":"' + arr[0] + '",' +
|
||||
'"ci2":"00",' +
|
||||
'"result":"Y",' +
|
||||
'"addVar":"",' +
|
||||
'"certdate":"20251118141526",' +
|
||||
'"birYMD":"' + arr[3] + '",' +
|
||||
'"ciVersion":"1",' +
|
||||
'"utf8Name":"' + encodeURIComponent(arr[0]) + '",' +
|
||||
'"id":"SKIP001"' +
|
||||
'}';
|
||||
|
||||
// loginForm에 우선 평문 retInfo 세팅
|
||||
document.loginForm.retInfo.value = retInfoStr;
|
||||
|
||||
// ➋ 첫 번째 AJAX: reqInfo, crypto_token_id 등 세팅
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "<c:url value='/web/cmm/crt/certPhoneRequestAjax.do'/>",
|
||||
dataType: 'json',
|
||||
success: function (returnData) {
|
||||
if (returnData.result === 'success') {
|
||||
document.reqPCCForm.reqInfo.value = returnData.reqInfo;
|
||||
document.reqPCCForm.crypto_token_id.value = returnData.cryptoTokenId;
|
||||
document.reqPCCForm.integrity_value.value = returnData.integrityValue;
|
||||
document.reqPCCForm.verSion.value = returnData.verSion;
|
||||
|
||||
// ➌ 첫 번째 AJAX 성공 후, 두 번째 AJAX 호출
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "<c:url value='/web/cmm/crt/certPhoneRequestAjax_dev.do'/>",
|
||||
data: $("#loginForm").serialize(), // retInfo 포함해서 전송
|
||||
dataType: "json",
|
||||
success: function (devData) {
|
||||
console.log("응답:", devData.result);
|
||||
console.log("encRetInfo:", devData.encRetInfo);
|
||||
|
||||
// 서버에서 암호화한 문자열로 다시 세팅
|
||||
document.loginForm.retInfo.value = devData.encRetInfo;
|
||||
|
||||
// ➍ 모든 준비 끝났으니 이제 실제 로그인 submit
|
||||
actionLogin();
|
||||
},
|
||||
error: function (e) {
|
||||
console.log("오류:", e);
|
||||
alert("retInfo 암호화 중 오류가 발생했습니다.");
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
alert("f5를 눌러 다시 시도해주세요.");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
alert("요청 오류가 발생했습니다.");
|
||||
console.log("ERROR: ", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
</c:if>
|
||||
|
||||
|
||||
|
||||
@ -36,18 +105,56 @@ function actionLogin() {
|
||||
document.loginForm.action="<c:url value='/web/user/login/actionSecurityLogin.do'/>";
|
||||
document.loginForm.submit();
|
||||
}
|
||||
|
||||
function certPhone() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "<c:url value='/web/cmm/crt/certPhoneRequestAjax.do'/>",
|
||||
dataType: 'json',
|
||||
success: function (returnData) {
|
||||
if (returnData.result === 'success') {
|
||||
document.reqPCCForm.reqInfo.value = returnData.reqInfo;
|
||||
document.reqPCCForm.crypto_token_id.value = returnData.cryptoTokenId;
|
||||
document.reqPCCForm.integrity_value.value = returnData.integrityValue;
|
||||
document.reqPCCForm.verSion.value = returnData.verSion;
|
||||
|
||||
openPCCWindow();
|
||||
} else {
|
||||
alert("f5를 눌러 다시 시도해주세요.");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
alert("요청 오류가 발생했습니다.");
|
||||
console.log("ERROR: ", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var PCC_window;
|
||||
function openPCCWindow(){
|
||||
var PCC_window = window.open('', 'PCCV3Window', 'width=400, height=630, resizable=1, scrollbars=no, status=0, titlebar=0, toolbar=0, left=300, top=200' );
|
||||
// iframe형식으로 개발하시지 말아주십시오. iframe으로 개발 시 나오는 문제는 개발지원해드리지 않습니다.
|
||||
if(PCC_window == null){
|
||||
alert(" ※ 윈도우 XP SP2 또는 인터넷 익스플로러 7 사용자일 경우에는 \n 화면 상단에 있는 팝업 차단 알림줄을 클릭하여 팝업을 허용해 주시기 바랍니다. \n\n※ MSN,야후,구글 팝업 차단 툴바가 설치된 경우 팝업허용을 해주시기 바랍니다.");
|
||||
}
|
||||
//창을 오픈할때 크롬 및 익스플로어 양쪽 다 테스트 하시길 바랍니다.
|
||||
document.reqPCCForm.action = 'https://pcc.siren24.com/pcc_V3/jsp/pcc_V3_j10_v4.jsp';
|
||||
document.reqPCCForm.target = 'PCCV3Window';
|
||||
document.reqPCCForm.submit();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
<div class="cont_wrap" id="sub" style="width: 100%">
|
||||
<form:form id="loginForm" name="loginForm" method="post" action="/web/user/login/actionSecurityLogin.do">
|
||||
<input type="hidden" name="beforeUrl" value='<c:out value="${beforeUrl}"></c:out>' />
|
||||
<input type="hidden" name="userSe" value="GNR" />
|
||||
<input type="hidden" id="membName" name="membName">
|
||||
<input type="hidden" id="membCelnum" name="membCelnum">
|
||||
<input type="hidden" id="sexCode" name="sexCode">
|
||||
<input type="hidden" id="membBirth" name="membBirth">
|
||||
<input type="hidden" id="mberCi" name="mberCi">
|
||||
|
||||
|
||||
<input type="hidden" id="retInfo" name="retInfo" value="">
|
||||
|
||||
|
||||
<div class="cont_tit">
|
||||
<h2>로그인</h2>
|
||||
<div class="sns_go">
|
||||
@ -57,25 +164,14 @@ function actionLogin() {
|
||||
</div>
|
||||
|
||||
<div class="login_wrap">
|
||||
<c:if test="${profile eq 'tLocal'}">
|
||||
|
||||
<p class="login_tit">
|
||||
본인인증 로그인</br>
|
||||
<span>사이트 오픈 시 셀렉트 박스를 통한 로그인은 삭제됩니다.</span>
|
||||
</p>
|
||||
<select id="devIdSelect" style="width: 400px; height: 30px;" onchange="login()">
|
||||
<select id="devIdSelect" style="width: 400px; height: 30px;" onchange="devLogin()">
|
||||
<option value="">로그인할 아이디를 선택해주세요.</option>
|
||||
|
||||
<!-- <option value="USRCNFRM_00000002613:1">개발팀 사용자(USRCNFRM_00000002613)_일반사용자1</option>
|
||||
<option value="USRCNFRM_00000002720:1">개발팀 사용자(USRCNFRM_00000002720)_일반사용자2</option>
|
||||
<option value="USRCNFRM_00000002650:1">기소유예사용자 1 (USRCNFRM_00000002650)_기소유예사용자 1</option>
|
||||
<option value="USRCNFRM_00000002970:1">기소유예사용자 2 (USRCNFRM_00000002970)_기소유예사용자 2</option>
|
||||
<option value="USRCNFRM_00000003070:1">기소유예사용자 3 (USRCNFRM_00000003070)_기소유예사용자 3</option>
|
||||
<option value="USRCNFRM_00000002930:1">기소유예사용자 4 (USRCNFRM_00000002930)_기소유예사용자 4</option>
|
||||
<option value="USRCNFRM_00000003080:1">기소유예사용자 5 (USRCNFRM_00000003080)_기소유예사용자 5</option>
|
||||
<option value="USRCNFRM_00000002960:1">기소유예사용자 6 (USRCNFRM_00000002960)_기소유예사용자 6</option>
|
||||
<option value="USRCNFRM_00000002943:1">기소유예사용자 7 (USRCNFRM_00000002943)_기소유예사용자 7</option>
|
||||
<option value="USRCNFRM_00000002942:1">기소유예사용자 8 (USRCNFRM_00000002942)_기소유예사용자 8</option>
|
||||
<option value="USRCNFRM_00000002941:1">기소유예사용자 9 (USRCNFRM_00000002941)_기소유예사용자 9</option>
|
||||
<option value="USRCNFRM_00000002872:1">기소유예사용자 10 (USRCNFRM_00000002872)_기소유예사용자 10</option> -->
|
||||
<option value="홍길동:01012345678:M:19890202:AwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">홍길동:01012345678:M:19890202</option>
|
||||
<option value="엄길동:01011112222:M:20061230:BwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">엄길동:01011112222:M:20061230</option>
|
||||
<option value="이길동:01033334444:W:19580301:CwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">이길동:01033334444:W:19580301</option>
|
||||
@ -86,11 +182,18 @@ function actionLogin() {
|
||||
<option value="이준호:01030266269:M:19890202:HwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">이준호:01030266269:M:19890202</option>
|
||||
</select>
|
||||
<br></br>
|
||||
</c:if>
|
||||
<div class="login_form">
|
||||
<div class="login_btn_wrap">
|
||||
<button type="button" onclick="javascript:actionLogin();" class="btn_login">본인인증</button>
|
||||
<button type="button" onclick="javascript:certPhone();" class="btn_login">본인인증</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form:form>
|
||||
<form name="reqPCCForm" id="reqPCCForm" method="post" action="https://pcc.siren24.com/pcc_V3/jsp/pcc_V3_j10_v4.jsp" onsubmit="return openPCCWindow()">
|
||||
<input type="hidden" id="crypto_token_id" name="crypto_token_id" value="">
|
||||
<input type="hidden" id="integrity_value" name="integrity_value" value="">
|
||||
<input type="hidden" id="reqInfo" name="reqInfo" value="">
|
||||
<input type="hidden" id="verSion" name="verSion" value="">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -1,82 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<script type="text/javascript">
|
||||
function press(event) { if (event.keyCode == 13) actionLogin(); }
|
||||
|
||||
function actionLogin() {
|
||||
/* if (document.loginForm.id_text.value =="") {
|
||||
alert("아이디를 입력하세요");
|
||||
return;
|
||||
} else if (document.loginForm.password_text.value =="") {
|
||||
alert("비밀번호를 입력하세요");
|
||||
return;
|
||||
} else { */
|
||||
//개발 완료시 삭제영역
|
||||
const str = $("#devIdSelect").val();
|
||||
const arr = str.split("/");
|
||||
$("#id_text").val(arr[0]);
|
||||
$("#password_text").val(arr[1]);
|
||||
$("#membSeq").val(arr[2]);
|
||||
//개발완료시 삭제 영역 끝
|
||||
|
||||
var id = $("#id_text").val();
|
||||
var pw = $("#password_text").val();
|
||||
|
||||
$("#id").val(id);
|
||||
$("#password").val(pw);
|
||||
|
||||
document.loginForm.action="<c:url value='/web/user/login/actionSecurityLogin2.do'/>";
|
||||
document.loginForm.submit();
|
||||
|
||||
}
|
||||
</script>
|
||||
<form:form id="loginForm" name="loginForm" method="post" action="/web/user/login/actionSecurityLogin2.do">
|
||||
<input type="hidden" name="beforeUrl" value='<c:out value="${beforeUrl}"></c:out>'/>
|
||||
<input type="hidden" name="userSe" value="GNR"/>
|
||||
<input type="hidden" id="id" name="id">
|
||||
<input type="hidden" id="password" name="password">
|
||||
<input type="hidden" id="membSeq" name="membSeq">
|
||||
<!-- cont -->
|
||||
<div class="cont_wrap login_cont" id="sub" style="width: 100%">
|
||||
<div class="inner">
|
||||
<div class="cont_tit">
|
||||
<h2>로그인</h2>
|
||||
</div>
|
||||
<fieldset>
|
||||
<div class="login_wrap">
|
||||
<p class="login_tit"><span>로그인</span> 해주세요</p>
|
||||
|
||||
<p class="login_tit"><span>외부개발자용 로그인은 <br>셀렉트박스에서 아이디를 선택해 주세요.<br>(개발편의를 위한 아이디 셀렉트 박스)<br>*로그인 후 세션 등록을 꼭 해주세요.</span></p>
|
||||
아이디 선택 : <select id="devIdSelect" style="width: 400px; height: 30px;">
|
||||
<option value="USRCNFRM_00000002940/1/1">아이디1(USRCNFRM_00000002940) 담당자</option>
|
||||
<option value="USRCNFRM_00000002941/1/2">아이디2(USRCNFRM_00000002941) 사용자</option>
|
||||
<option value="USRCNFRM_00000002942/1/3">아이디3(USRCNFRM_00000002942) 사용자</option>
|
||||
<option value="USRCNFRM_00000002943/1/4">아이디4(USRCNFRM_00000002943) 사용자</option>
|
||||
<option value="USRCNFRM_00000002944/1/5">아이디5(USRCNFRM_00000002944) 담당자</option>
|
||||
<option value="USRCNFRM_00000002550/1/6">아이디6(USRCNFRM_00000002550) 담당자</option>
|
||||
<option value="USRCNFRM_00000002542/1/7">아이디7(USRCNFRM_00000002542) 사용자</option>
|
||||
<option value="USRCNFRM_00000002541/1/8">아이디8(USRCNFRM_00000002541) 사용자</option>
|
||||
<option value="USRCNFRM_00000002540/1/9">아이디9(USRCNFRM_00000002540) 담당자</option>
|
||||
<option value="USRCNFRM_00000002533/1/10">아이디10(USRCNFRM_00000002533) 담당자</option>
|
||||
</select><br></br>
|
||||
<div class="login_form">
|
||||
<input type="text" id="id_text" placeholder="아이디를 입력해주세요" readonly="readonly">
|
||||
<input type="password" id="password_text" placeholder="비밀번호를 입력해주세요" readonly="readonly">
|
||||
<div class="btn_wrap">
|
||||
<button type="button" onclick="javascript:actionLogin();" class="btn_login">로그인</button>
|
||||
<button type="button" onclick="window.open('<c:out value='${joinUrl}'/>')" title="새창열림" class="btn_join">회원가입</button>
|
||||
</div>
|
||||
<div class="login_util">
|
||||
<a href="#" target="_blank" title="새창열림" onclick="javascript:usrIdPassFind('id')">아이디 찾기</a>
|
||||
<a href="#" target="_blank" title="새창열림" onclick="javascript:usrIdPassFind('pass')">비밀번호 찾기</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- //cont -->
|
||||
</form:form>
|
||||
@ -1,289 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
|
||||
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
if(${message != null}){
|
||||
alert('${message}');
|
||||
}
|
||||
});
|
||||
function press(event) { if (event.keyCode == 13) actionLogin(); }
|
||||
|
||||
|
||||
function login() {
|
||||
if($('#devIdSelect').val()!=""){
|
||||
|
||||
var id = ($('#devIdSelect').val()).split(':');
|
||||
|
||||
$("#id_text").val(id[0]);
|
||||
$("#password_text").val(id[1]);
|
||||
|
||||
|
||||
$("#id").val(id[0]);
|
||||
$("#password").val(id[1]);
|
||||
|
||||
$("#isSelect").val("Y");
|
||||
|
||||
document.loginForm.action="<c:url value='/web/user/login/actionSecurityLogin.do'/>";
|
||||
document.loginForm.submit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function actionLogin() {
|
||||
/* if (document.loginForm.id_text.value =="") {
|
||||
alert("아이디를 입력하세요");
|
||||
return;
|
||||
} else if (document.loginForm.password_text.value =="") {
|
||||
alert("비밀번호를 입력하세요");
|
||||
return;
|
||||
} else { */
|
||||
//개발 완료시 삭제영역
|
||||
/* const str = $("#devIdSelect").val();
|
||||
const arr = str.split("/");
|
||||
$("#id_text").val(arr[0]);
|
||||
$("#password_text").val(arr[1]); */
|
||||
//개발완료시 삭제 영역 끝
|
||||
|
||||
if( isNotEmpty($('#itnIdSelect').val())){
|
||||
|
||||
var id = ($('#itnIdSelect').val()).split(':')
|
||||
|
||||
$("#id_text").val(id[0]);
|
||||
$("#password_text").val(id[1]);
|
||||
}
|
||||
|
||||
var id = $("#id_text").val();
|
||||
var pw = $("#password_text").val();
|
||||
|
||||
$("#id").val(id);
|
||||
$("#password").val(pw);
|
||||
|
||||
document.loginForm.action="<c:url value='/web/user/login/actionSecurityLogin.do'/>";
|
||||
document.loginForm.submit();
|
||||
|
||||
}
|
||||
|
||||
/* 아이디 비밀번호 찾기 link */
|
||||
function usrIdPassFind(choose){
|
||||
var frm = document.usrForm;
|
||||
var actionUrl;
|
||||
frm.returnSiteCode.value = "<c:out value='${returnSiteCode}'/>";
|
||||
frm.returnSiteUrl.value = "<c:out value='${returnSiteUrl}'/>";
|
||||
|
||||
if(choose == 'id'){
|
||||
actionUrl = "<c:url value='${idFindUrl}'/>";
|
||||
}else{
|
||||
actionUrl = "<c:url value='${pwFindUrl}'/>";
|
||||
}
|
||||
|
||||
frm.action = actionUrl;
|
||||
frm.submit();
|
||||
}
|
||||
</script>
|
||||
<form:form id="loginForm" name="loginForm" method="post" action="/web/user/login/actionSecurityLogin.do">
|
||||
<input type="hidden" name="beforeUrl" value='<c:out value="${beforeUrl}"></c:out>' />
|
||||
<input type="hidden" name="userSe" value="GNR" />
|
||||
<input type="hidden" id="id" name="id">
|
||||
<input type="hidden" id="password" name="password">
|
||||
<input type="hidden" id="isSelect" name="isSelect">
|
||||
<!-- cont -->
|
||||
<div class="cont_wrap" id="sub" style="width: 100%">
|
||||
<div class="cont_tit">
|
||||
<h2>로그인</h2>
|
||||
<div class="sns_go">
|
||||
<button type="button" title="새창열림"><img src="/visitEdu/usr/publish/images/content/facebook_icon.png" alt="페이스북 바로가기"></button>
|
||||
<button type="button" title="새창열림"><img src="/visitEdu/usr/publish/images/content/twitter_icon.png" alt="트위터 바로가기"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="login_wrap">
|
||||
<p class="login_tit">
|
||||
<span>로그인</span>
|
||||
해주세요
|
||||
</p>
|
||||
<kc:profile value="local">
|
||||
개발자 아이디 선택 : <select id="devIdSelect" style="width: 400px; height: 30px;" onchange="login()">
|
||||
<option value="">로그인할 아이디를 선택해주세요.</option>
|
||||
|
||||
<option value="3000118:1">공통 담당자1 (USRCNFRM_00000002620)_우영두</option>
|
||||
<option value="3000116:1">공통 담당자2 (USRCNFRM_00000002611)_여현준</option>
|
||||
<option value="3000119:1">공통 담당자3 (USRCNFRM_00000002614)_원영현</option>
|
||||
<option value="3000122:1">공통 담당자x (USRCNFRM_00000002610)_이준호</option>
|
||||
|
||||
<option value="3000120:1">사용자_김x호(USRCNFRM_00000002612)_안주영</option>
|
||||
<option value="3000117:1">공통 사용자(USRCNFRM_00000002650)_이지우</option>
|
||||
<option value="3000125:1">개발팀 사용자(USRCNFRM_00000002613)_정수빈</option>
|
||||
<option value="3000128:1">개발팀 사용자(USRCNFRM_00000002720)_김지훈</option>
|
||||
<option value="3000127:1">개발팀 사용자(USRCNFRM_00000002630)_이소미</option>
|
||||
<option value="3000126:1">개발팀 사용자(USRCNFRM_00000002710)_최하연</option>
|
||||
<!--
|
||||
<option value="USRCNFRM_00000002620:1">공통 담당자1 (USRCNFRM_00000002620)_우영두</option>
|
||||
<option value="USRCNFRM_00000002611:1">공통 담당자2 (USRCNFRM_00000002611)_여현준</option>
|
||||
<option value="USRCNFRM_00000002614:1">공통 담당자3 (USRCNFRM_00000002614)_원영현</option>
|
||||
<option value="USRCNFRM_00000002610:1">공통 담당자x (USRCNFRM_00000002610)_이준호</option>
|
||||
|
||||
<option value="USRCNFRM_00000002612:1">사용자_김x호(USRCNFRM_00000002612)_안주영</option>
|
||||
<option value="USRCNFRM_00000002650:1">공통 사용자(USRCNFRM_00000002650)_이지우</option>
|
||||
<option value="USRCNFRM_00000002613:1">개발팀 사용자(USRCNFRM_00000002613)_정수빈</option>
|
||||
<option value="USRCNFRM_00000002720:1">개발팀 사용자(USRCNFRM_00000002720)_김지훈</option>
|
||||
<option value="USRCNFRM_00000002630:1">개발팀 사용자(USRCNFRM_00000002630)_이소미</option>
|
||||
<option value="USRCNFRM_00000002710:1">개발팀 사용자(USRCNFRM_00000002710)_최하연</option>
|
||||
-->
|
||||
</select>
|
||||
<br></br>
|
||||
|
||||
아이디 선택 : <select id="itnIdSelect" style="width: 400px; height: 30px;" onchange="actionLogin('Y')">
|
||||
<option value="">로그인할 아이디를 선택해주세요.</option>
|
||||
<option value="rosehips@naver.com:copyright123$">담당자1(USRCNFRM_00000002620)_우영두</option>
|
||||
<option value="yu3145@naver.com:copyright123$">담당자2 (USRCNFRM_00000002611)_여현준</option>
|
||||
<option value="wyh2010@naver.com:copyright123$">담당자3 (USRCNFRM_00000002614)_원영현</option>
|
||||
<option value="tolag3@gmail.com:copyright123$">담당자x (USRCNFRM_00000002610)_이준호</option>
|
||||
|
||||
<option value="peaceack@gmail.com:copyright123$">사용자_김x호(USRCNFRM_00000002612)_안주영</option>
|
||||
<option value="dlwldn1024@gmail.com:copyright123$">사용자_이x우(USRCNFRM_00000002650)_이지우</option>
|
||||
|
||||
<option value="dhgksk99@gmail.com:copyright123$">사용자_정x빈(USRCNFRM_00000002613)_정수빈</option>
|
||||
<option value="rownim@naver.com:copyright123$">사용자_김x훈(USRCNFRM_00000002720)_김지훈</option>
|
||||
<option value="soming90@nate.com:copyright123$">사용자_이x미(USRCNFRM_00000002630)_이소미</option>
|
||||
<option value="chylove0132@gmail.com:copyright123$">사용자_최x연(USRCNFRM_00000002710)_최하연</option>
|
||||
|
||||
<!--
|
||||
<option value="rosehips@naver.com:copyright123$">사용자_곽x태(USRCNFRM_00000002563)_우영두</option>
|
||||
<option value="yu3145@naver.com:copyright123$">담당자2 (USRCNFRM_00000002561)_여현준</option>
|
||||
<option value="wyh2010@naver.com:copyright123$">담당자3 (USRCNFRM_00000002562)_원영현</option>
|
||||
<option value="tolag3@gmail.com:copyright123$">담당자x (USRCNFRM_00000002560)_이준호</option>
|
||||
|
||||
<option value="peaceack@gmail.com:copyright123$">사용자_김x호(USRCNFRM_00000002564)_안주영</option>
|
||||
<option value="dlwldn1024@gmail.com:copyright123$">사용자_이x우(USRCNFRM_00000002570)_이지우</option>
|
||||
|
||||
<option value="dhgksk99@gmail.com:copyright123$">사용자_정x빈(USRCNFRM_00000002585)_정수빈</option>
|
||||
<option value="rownim@naver.com:copyright123$">사용자_김x훈(USRCNFRM_00000002590)_김지훈</option>
|
||||
<option value="soming90@nate.com:copyright123$">사용자_이x미(USRCNFRM_00000002591)_이소미</option>
|
||||
<option value="chylove0132@gmail.com:copyright123$">사용자_최x연(USRCNFRM_00000002592)_최하연</option>
|
||||
-->
|
||||
|
||||
</select>
|
||||
<br></br>
|
||||
</kc:profile>
|
||||
<div class="login_form">
|
||||
<label for="id_text" class="label">아이디 입력</label>
|
||||
<input type="text" id="id_text" placeholder="아이디를 입력해주세요">
|
||||
<label for="password_text" class="label">비밀번호 입력</label>
|
||||
<input type="password" id="password_text" onkeypress="press(event)" placeholder="비밀번호를 입력해주세요">
|
||||
<div class="login_btn_wrap">
|
||||
<button type="button" onclick="javascript:actionLogin();" class="btn_login">로그인</button>
|
||||
<button type="button" onclick="window.open('<c:out value='${joinUrl}'/>')" title="새창열림" class="btn_join">회원가입</button>
|
||||
</div>
|
||||
<div class="login_util">
|
||||
<a href="#" target="_blank" title="새창열림" onclick="javascript:usrIdPassFind('id')">아이디 찾기</a>
|
||||
<a href="#" target="_blank" title="새창열림"onclick="javascript:usrIdPassFind('pass')" >비밀번호 찾기</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<%-- <div class="cont_wrap login_cont" id="sub">
|
||||
<div class="inner">
|
||||
<div class="cont_tit">
|
||||
<h2>로그인3</h2>
|
||||
</div>
|
||||
<fieldset>
|
||||
|
||||
|
||||
<div class="login_wrap">
|
||||
<p class="login_tit">
|
||||
<span>로그인</span>
|
||||
해주세요
|
||||
</p>
|
||||
개발자 아이디 선택 : <select id="devIdSelect" style="width: 400px; height: 30px;" onchange="login()">
|
||||
<option value="">로그인할 아이디를 선택해주세요.</option>
|
||||
<option value="3000118:1">공통 담당자1 (USRCNFRM_00000002620)_우영두</option>
|
||||
<option value="3000116:1">공통 담당자2 (USRCNFRM_00000002611)_여현준</option>
|
||||
<option value="3000119:1">공통 담당자3 (USRCNFRM_00000002614)_원영현</option>
|
||||
<option value="3000122:1">공통 담당자x (USRCNFRM_00000002610)_이준호</option>
|
||||
|
||||
<option value="3000120:1">사용자_김x호(USRCNFRM_00000002612)_안주영</option>
|
||||
<option value="3000117:1">공통 사용자(USRCNFRM_00000002650)_이지우</option>
|
||||
<option value="3000125:1">개발팀 사용자(USRCNFRM_00000002613)_정수빈</option>
|
||||
<option value="3000128:1">개발팀 사용자(USRCNFRM_00000002720)_김지훈</option>
|
||||
<option value="3000127:1">개발팀 사용자(USRCNFRM_00000002630)_이소미</option>
|
||||
<option value="3000126:1">개발팀 사용자(USRCNFRM_00000002710)_최하연</option>
|
||||
|
||||
<!--
|
||||
<option value="USRCNFRM_00000002944:1">공통 담당자1 (USRCNFRM_00000002944)_김하이</option>
|
||||
<option value="USRCNFRM_00000002943:1">공통 담당자1 (USRCNFRM_00000002943)_김부장</option>
|
||||
<option value="USRCNFRM_00000002942:1">공통 담당자1 (USRCNFRM_00000002942)_하하하</option>
|
||||
<option value="USRCNFRM_00000002941:1">공통 담당자1 (USRCNFRM_00000002941)_김위원</option>
|
||||
<option value="USRCNFRM_00000002940:1">공통 담당자1 (USRCNFRM_00000002940)_이준호1</option>
|
||||
<option value="USRCNFRM_00000002560:1">공통 담당자1 (USRCNFRM_00000002560)_이준호</option>
|
||||
<option value="USRCNFRM_00000002561:1">공통 담당자2 (USRCNFRM_00000002561)_여현준</option>
|
||||
<option value="USRCNFRM_00000002562:1">공통 담당자3 (USRCNFRM_00000002562)_원영현</option>
|
||||
<option value="USRCNFRM_00000002563:1">사용자_곽x태(USRCNFRM_00000002563)_우영두</option>
|
||||
<option value="USRCNFRM_00000002564:1">사용자_김x호(USRCNFRM_00000002564)_안주영</option>
|
||||
<option value="USRCNFRM_00000002570:1">공통 사용자(USRCNFRM_00000002570)_이지우</option>
|
||||
<option value="USRCNFRM_00000002585:1">개발팀 사용자(USRCNFRM_00000002585)_정수빈</option>
|
||||
<option value="USRCNFRM_00000002590:1">개발팀 사용자(USRCNFRM_00000002590)_김지훈</option>
|
||||
<option value="USRCNFRM_00000002591:1">개발팀 사용자(USRCNFRM_00000002591)_이소미</option>
|
||||
<option value="USRCNFRM_00000002592:1">개발팀 사용자(USRCNFRM_00000002592)_최하연</option>
|
||||
-->
|
||||
</select>
|
||||
<br></br>
|
||||
|
||||
아이디 선택 : <select id="itnIdSelect" style="width: 400px; height: 30px;" onchange="actionLogin('Y')">
|
||||
<option value="">로그인할 아이디를 선택해주세요.</option>
|
||||
<option value="rosehips@naver.com:copyright123$">강사1(USRCNFRM_00000002620)_우영두</option>
|
||||
<option value="yu3145@naver.com:copyright123$">강사2 (USRCNFRM_00000002611)_여현준</option>
|
||||
<option value="wyh2010@naver.com:copyright123$">강사3 (USRCNFRM_00000002614)_원영현</option>
|
||||
<option value="tolag3@gmail.com:copyright123$">강사4 (USRCNFRM_00000002610)_이준호</option>
|
||||
<option value="peaceack@gmail.com:copyright123$">강사5(USRCNFRM_00000002612)_안주영</option>
|
||||
|
||||
<option value="dlwldn1024@gmail.com:copyright123$">사용자1(USRCNFRM_00000002650)_이지우</option>
|
||||
<option value="dhgksk99@gmail.com:copyright123$">사용자2(USRCNFRM_00000002613)_정수빈</option>
|
||||
<option value="rownim@naver.com:copyright123$">사용자3(USRCNFRM_00000002720)_김지훈</option>
|
||||
<option value="soming90@nate.com:copyright123$">사용자4(USRCNFRM_00000002630)_이소미</option>
|
||||
<option value="chylove0132@gmail.com:copyright123$">사용자5(USRCNFRM_00000002710)_최하연</option>
|
||||
<!--
|
||||
<option value="tolag3@gmail.com:copyright123$">담당자1 (USRCNFRM_00000002560)_이준호</option>
|
||||
<option value="yu3145@naver.com:copyright123$">담당자2 (USRCNFRM_00000002561)_여현준</option>
|
||||
<option value="wyh2010@naver.com:copyright123$">담당자3 (USRCNFRM_00000002562)_원영현</option>
|
||||
<option value="rosehips@naver.com:copyright123$">사용자_곽x태(USRCNFRM_00000002563)_우영두</option>
|
||||
<option value="peaceack@gmail.com:copyright123$">사용자_김x호(USRCNFRM_00000002564)_안주영</option>
|
||||
<option value="dlwldn1024@gmail.com:copyright123$">사용자_이x우(USRCNFRM_00000002570)_이지우</option>
|
||||
<option value="dhgksk99@gmail.com:copyright123$">사용자_정x빈(USRCNFRM_00000002585)_정수빈</option>
|
||||
<option value="rownim@naver.com:copyright123$">사용자_김x훈(USRCNFRM_00000002590)_김지훈</option>
|
||||
<option value="soming90@nate.com:copyright123$">사용자_이x미(USRCNFRM_00000002591)_이소미</option>
|
||||
<option value="chylove0132@gmail.com:copyright123$">사용자_최x연(USRCNFRM_00000002592)_최하연</option>
|
||||
-->
|
||||
</select>
|
||||
<br></br>
|
||||
|
||||
<div class="login_form">
|
||||
<label for="id_text">아이디 입력</label>
|
||||
<input type="text" id="id_text" placeholder="아이디를 입력해주세요">
|
||||
<label for="password_text">비밀번호 입력</label>
|
||||
<input type="password" id="password_text" onkeypress="press(event)" placeholder="비밀번호를 입력해주세요">
|
||||
<div class="btn_wrap">
|
||||
<button type="button" onclick="javascript:actionLogin();" class="btn_login">로그인</button>
|
||||
<button type="button" onclick="window.open('<c:out value='${joinUrl}'/>')" title="새창열림" class="btn_join">회원가입</button>
|
||||
</div>
|
||||
<div class="login_util">
|
||||
<a href="#" target="_black" title="새창열림" onclick="javascript:usrIdPassFind('id')">아이디 찾기</a>
|
||||
<a href="#" target="_black" title="새창열림" onclick="javascript:usrIdPassFind('pass')">비밀번호 찾기</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
</div> --%>
|
||||
<!-- //cont -->
|
||||
</form:form>
|
||||
|
||||
<form id="usrForm" name="usrForm" method="post" action="">
|
||||
<input type="hidden" id="returnSiteCode" name="returnSiteCode" value="" />
|
||||
<input type="hidden" id="returnSiteUrl" name="returnSiteUrl" value="" />
|
||||
</form>
|
||||
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user