diff --git a/pom.xml b/pom.xml index f61edf18..1e1a6072 100644 --- a/pom.xml +++ b/pom.xml @@ -538,6 +538,13 @@ JSON-java 1 + + + kr.co.linkhub + barocert-sdk + 1.5.0 + + diff --git a/src/main/java/kcc/let/uat/uia/web/SocialCertController.java b/src/main/java/kcc/let/uat/uia/web/SocialCertController.java new file mode 100644 index 00000000..0039287a --- /dev/null +++ b/src/main/java/kcc/let/uat/uia/web/SocialCertController.java @@ -0,0 +1,188 @@ +package kcc.let.uat.uia.web; + +import org.apache.poi.poifs.crypt.Decryptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.barocert.BarocertException; +import com.barocert.kakaocert.KakaocertService; +import com.barocert.navercert.NavercertService; + +/** +* @packageName : kcc.let.uat.uia.web +* @fileName : SocialCertController.java +* @author : JunHo Lee +* @date : 2024.11.21 +* @description : 소셜 로그인(네이버, 카카오) +* =========================================================== +* DATE AUTHOR NOTE +* ----------------------------------------------------------- +* 2024.11.21 JunHo Lee 최초 생성 +*/ +@Controller +public class SocialCertController { + + @Autowired + private NavercertService navercertService; + + @Autowired + private KakaocertService kakaocertService; + + @Value("#{NAVER_CONFIG.ClientCode}") + private String NaverClientCode; + + @Value("#{KAKAO_CONFIG.ClientCode}") + private String KakaoClientCode; + + /** + * 본인인증 요청 + * + * @param clientCode + * 이용기관코드 + * @param identity + * 본인인증 요청정보 + * @return ResponseVerify + * 본인인증 요청 응답정보 + * @throws BarocertException + */ + @RequestMapping(value = "/web/user/cert/nCert.do") + public String requestIdentity(Model m) throws BarocertException { + + // 본인인증 요청 정보 객체 + com.barocert.navercert.identity.Identity identity = new com.barocert.navercert.identity.Identity(); + + // 수신자 휴대폰번호 - 11자 (하이픈 제외) + identity.setReceiverHP(navercertService.encrypt("01030266269")); + // 수신자 성명 - 80자 + identity.setReceiverName(navercertService.encrypt("이준호")); + // 수신자 생년월일 - 8자 (yyyyMMdd) + identity.setReceiverBirthday(navercertService.encrypt("19890202")); + + // 고객센터 연락처 - 최대 12자 + identity.setCallCenterNum("1600-9854"); + // 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능 + identity.setExpireIn(1000); + + // AppToApp 인증요청 여부 + // true - AppToApp 인증방식, false - 푸시(Push) 인증방식 + identity.setAppUseYN(false); + + try { + com.barocert.navercert.identity.IdentityReceipt request = navercertService.requestIdentity(NaverClientCode, identity); + +// Boolean test = navercertService.isUseStaticIP(); + + System.out.println("ReceiptID :: " + request.getReceiptID()); + System.out.println("Scheme :: " + request.getScheme()); + System.out.println("MarketUrl :: " + request.getMarketUrl()); + + + + /** + * 본인인증 서명검증 + * 인증되었을경우 State : 1 + * 인증안되었을경우 State : 0 + */ +// if(status.getState() == 0) { +// +// }else if(status.getState() == 1) { +// +// } + + + //서명이 되지 않았을경우 + com.barocert.navercert.identity.IdentityStatus status = navercertService.getIdentityStatus(NaverClientCode, request.getReceiptID()); + + //서명이 되었을경우 + com.barocert.navercert.identity.IdentityStatus status2 = navercertService.getIdentityStatus(NaverClientCode, request.getReceiptID()); + + com.barocert.navercert.identity.IdentityResult result = navercertService.verifyIdentity(NaverClientCode, request.getReceiptID()); + + System.out.println("Ci :: " + result.getCi()); + System.out.println("ReceiptID :: " + result.getReceiptID()); + System.out.println("ReceiverDay :: " + result.getReceiverDay()); + System.out.println("ReceiverEmail :: " + result.getReceiverEmail()); + System.out.println("ReceiverForeign :: " + result.getReceiverForeign()); + System.out.println("ReceiverGender :: " + result.getReceiverGender()); + System.out.println("ReceiverHP :: " + result.getReceiverHP()); + System.out.println("ReceiverName :: " + result.getReceiverName()); + System.out.println("ReceiverYear :: " + result.getReceiverYear()); + System.out.println("SignedData :: " + result.getSignedData()); + System.out.println("State :: " + result.getState()); + + + m.addAttribute("result", result); + } catch (BarocertException ne) { + m.addAttribute("Exception", ne); + return "exception"; + } + + return "uat/uia/NCert"; + } + +// @RequestMapping(value = "navercert/requestIdentity", method = RequestMethod.GET) + @RequestMapping(value = "/web/user/cert/kCert.do") + public String requestIdentity_k(Model m) throws BarocertException { + + // 본인인증 요청 정보 객체 + com.barocert.kakaocert.identity.Identity identity = new com.barocert.kakaocert.identity.Identity(); + + // 수신자 휴대폰번호 - 11자 (하이픈 제외) + identity.setReceiverHP(kakaocertService.encrypt("01012341234")); + // 수신자 성명 - 80자 + identity.setReceiverName(kakaocertService.encrypt("홍길동")); + // 수신자 생년월일 - 8자 (yyyyMMdd) + identity.setReceiverBirthday(kakaocertService.encrypt("19700101")); + + // 인증요청 메시지 제목 - 최대 40자 + identity.setReqTitle("본인인증 요청 메시지 제목"); + // 커스텀 메시지 - 최대 500자 + identity.setExtraMessage(kakaocertService.encrypt("본인인증 커스텀 메시지")); + // 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능 + identity.setExpireIn(1000); + // 서명 원문 - 최대 40자 까지 입력가능 + identity.setToken(kakaocertService.encrypt("본인인증 요청 원문")); + + // AppToApp 인증요청 여부 + // true - AppToApp 인증방식, false - Talk Message 인증방식 + identity.setAppUseYN(false); + + + try { + com.barocert.kakaocert.identity.IdentityReceipt result = kakaocertService.requestIdentity(KakaoClientCode, identity); + m.addAttribute("result", result); + } catch (BarocertException ke) { + m.addAttribute("Exception", ke); + return "exception"; + } + + return "uat/uia/KCert"; + } + + + + private String decryptNaver() { + + //복호화 키 + String secretKey = "LqZ8a…"; + // 초기화 벡터 (고정값) + String iv = "6C2Syq8t…"; + // 암호문 + String cipherText = "6MXhzI8yDVdCDktJ/Qdz9S…"; + + try { + // 복호화 +// Decryptor decryptor = new Decryptor(); +// String decryptedCI = decryptor.decrypt(secretKey, iv, cipherText); +// System.out.println(decryptedCI); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +} + + diff --git a/src/main/java/seed/common/web/CommonController.java b/src/main/java/seed/common/web/CommonController.java index c93dfacf..1ef85255 100644 --- a/src/main/java/seed/common/web/CommonController.java +++ b/src/main/java/seed/common/web/CommonController.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; +import javax.annotation.Resource; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -45,12 +46,9 @@ import org.springframework.web.servlet.ModelAndView; import com.google.gson.Gson; -import seed.manager.site.service.ManagerSiteManagerService; -import seed.manager.site.service.ManagerSiteMenuManagerService; -import seed.manager.site.service.ManagerSiteMenuService; -import seed.manager.site.service.ManagerSiteService; -import seed.manager.smartmenu.service.ManagerSmartMenuManagerService; -import seed.manager.smartmenu.service.ManagerSmartMenuSetService; +import kcc.com.cmm.service.EgovFileMngService; +import kcc.com.cmm.service.EgovFileMngUtil; +import kcc.com.cmm.service.FileVO; import seed.common.service.CommonErrorLogsService; import seed.common.service.CommonFileDownLoadService; import seed.common.service.CommonFileService; @@ -77,11 +75,17 @@ import seed.manager.popup.service.ManagerPopupSetService; import seed.manager.quick.service.ManagerQuickDataService; import seed.manager.quick.service.ManagerQuickManagerService; import seed.manager.quick.service.ManagerQuickSetService; +import seed.manager.site.service.ManagerSiteManagerService; +import seed.manager.site.service.ManagerSiteMenuManagerService; +import seed.manager.site.service.ManagerSiteMenuService; +import seed.manager.site.service.ManagerSiteService; +import seed.manager.smartmenu.service.ManagerSmartMenuManagerService; +import seed.manager.smartmenu.service.ManagerSmartMenuSetService; import seed.manager.survey.service.ManagerSurveyManagerService; import seed.manager.survey.service.ManagerSurveySetService; -import seed.manager.visual.service.ManagerVisualRelationDataService; import seed.manager.visual.service.ManagerVisualDataService; import seed.manager.visual.service.ManagerVisualManagerService; +import seed.manager.visual.service.ManagerVisualRelationDataService; import seed.manager.visual.service.ManagerVisualRelationIconService; import seed.manager.visual.service.ManagerVisualRelationSetService; import seed.manager.visual.service.ManagerVisualSetService; @@ -259,9 +263,18 @@ public class CommonController { @Autowired private ServletContext servletContext; - @Value("#{config['root.path']}") + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileMngService; + + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileUtil; + +// @Value("#{config['root.path']}") +// private String rootPath; + @Value("#{globalSettings['root.path']}") private String rootPath; + @Value("#{config['message.file.size']}") private String messageFileSize; @@ -3827,7 +3840,8 @@ public class CommonController { @RequestMapping(value="/common/proc/{siteIdx}/editor/editorFileReg.do", method=RequestMethod.POST) public ModelAndView setEditorFileReg(HttpSession session, Map map, MultipartFile up_file, - @PathVariable(value="siteIdx") String siteIdx){ + @PathVariable(value="siteIdx") String siteIdx + , final MultipartHttpServletRequest multiRequest) throws Exception{ SimpleDateFormat sdfFormat = new SimpleDateFormat("yyyyMMddHHmmss"); @@ -3847,32 +3861,45 @@ public class CommonController { try{ //오늘날짜로 폴더 생성(MD5로 폴더 변환하여 생성) - SeedUtils.setSeedMkDirs(rootPath + "/" + siteIdx + "/upload/editor"); - - String reFileName = "editorImg_" + sdfFormat.format(new Date()) + "_" + SeedUtils.getSeedMD5Code(String.valueOf(SeedUtils.getRandom(999,1))); - - File makeFile = new File(rootPath + "/" + siteIdx + "/upload/editor/" + - reFileName + up_file.getOriginalFilename().substring(up_file.getOriginalFilename().lastIndexOf("."))); - up_file.transferTo(makeFile); +// SeedUtils.setSeedMkDirs(rootPath + "/" + siteIdx + "/upload/editor"); +// +// String reFileName = "editorImg_" + sdfFormat.format(new Date()) + "_" + SeedUtils.getSeedMD5Code(String.valueOf(SeedUtils.getRandom(999,1))); +// +// File makeFile = new File(rootPath + "/" + siteIdx + "/upload/editor/" + +// reFileName + up_file.getOriginalFilename().substring(up_file.getOriginalFilename().lastIndexOf("."))); +// up_file.transferTo(makeFile); //FTP 전송 - SeedFtpType seedFtpType = new SeedFtpType(); - //WEB 서버의 경로 - seedFtpType.setDestFilePath(siteIdx + "/upload/editor"); - //WAS 서버의 경로 - seedFtpType.setSrcFilePath(rootPath + "/" + siteIdx + "/upload/editor"); - //WAS 파일명 - seedFtpType.setFileName(reFileName + up_file.getOriginalFilename().substring(up_file.getOriginalFilename().lastIndexOf("."))); - //파일 전송 타입 regFile=WEB 서버에 파일전송, delFile=WEB 서버에 파일삭제 - seedFtpType.setFtpType("regFile"); - seedFtpType.setSeedFtp(); +// SeedFtpType seedFtpType = new SeedFtpType(); +// //WEB 서버의 경로 +// seedFtpType.setDestFilePath(siteIdx + "/upload/editor"); +// //WAS 서버의 경로 +// seedFtpType.setSrcFilePath(rootPath + "/" + siteIdx + "/upload/editor"); +// //WAS 파일명 +// seedFtpType.setFileName(reFileName + up_file.getOriginalFilename().substring(up_file.getOriginalFilename().lastIndexOf("."))); +// //파일 전송 타입 regFile=WEB 서버에 파일전송, delFile=WEB 서버에 파일삭제 +// seedFtpType.setFtpType("regFile"); +// seedFtpType.setSeedFtp(); map.put("success", "1"); - map.put("url", "/site/"+siteIdx+"/upload/editor/"+reFileName + up_file.getOriginalFilename().substring(up_file.getOriginalFilename().lastIndexOf("."))); + +// + + String atchFileId = ""; + String isThumbFile = ""; + final Map files = multiRequest.getFileMap(); + if (!files.isEmpty()) { + + List result = fileUtil.parseFileInf(files, "EDT_", 0, atchFileId, "", isThumbFile); + + atchFileId = fileMngService.insertFileInfs(result); + map.put("url", "/uss/ion/pwm/getImage.do"+"?atchFileId="+atchFileId+"&fileSn="); + } + map.put("alt", up_file.getOriginalFilename().toString()); map.put("title", up_file.getOriginalFilename().toString().substring(0, up_file.getOriginalFilename().toString().lastIndexOf("."))); - }catch(IOException e){ + }catch(Exception e){ log.error("CHECK ERROR:",e); } diff --git a/src/main/webapp/META-INF/context.xml b/src/main/webapp/META-INF/context.xml index b107e4cb..7c880530 100644 --- a/src/main/webapp/META-INF/context.xml +++ b/src/main/webapp/META-INF/context.xml @@ -32,4 +32,6 @@ url="jdbc:oracle:thin:@192.168.0.60:1523/XE" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" /> + + diff --git a/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml b/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml index f5f07e91..5d94c62f 100644 --- a/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml +++ b/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml @@ -4,10 +4,13 @@ xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" - xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation=" + http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd + http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd"> @@ -105,4 +108,40 @@ + + + + + + + KOFAIR_BC + r5fQ5qFzWzolkxMBpXyOXwy1L17RJN01tjotQ7Kzhuk= + 024110000010 + true + true + + + + + + + + + + + KOFAIR_BC + r5fQ5qFzWzolkxMBpXyOXwy1L17RJN01tjotQ7Kzhuk= + 024110000009 + true + true + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/uat/uia/KCert.jsp b/src/main/webapp/WEB-INF/jsp/uat/uia/KCert.jsp new file mode 100644 index 00000000..04a2f03a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/uat/uia/KCert.jsp @@ -0,0 +1,9 @@ +<%@ 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="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%> + +kakaoCert \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/uat/uia/NCert.jsp b/src/main/webapp/WEB-INF/jsp/uat/uia/NCert.jsp new file mode 100644 index 00000000..cc7be38f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/uat/uia/NCert.jsp @@ -0,0 +1,20 @@ +<%@ 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="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%> + +
+

Response

+
+
+ ${requestScope['javax.servlet.forward.request_uri']} +
    +
  • 접수아이디 (ReceiptID) : ${result.receiptID}
  • +
  • 앱스킴 (Scheme) : ${result.scheme}
  • +
  • 앱다운로드URL (MarketURL) : ${result.marketUrl}
  • +
+
+
\ No newline at end of file