From 0078c893235f9f1c0a787217a2d838c4193d3323 Mon Sep 17 00:00:00 2001 From: KNKIM Date: Mon, 26 Jul 2021 10:15:04 +0900 Subject: [PATCH] =?UTF-8?q?=EC=86=8C=EC=8A=A4=EC=A0=95=EB=A6=AC=20?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/nlib/bbs/service/impl/BoardDAO.java | 9 +- .../bbs/service/impl/BoardServiceImpl.java | 6 +- .../java/nlib/bbs/web/BoardController.java | 242 +++++++++++++++- src/main/java/nlib/cmm/crypto/AriaCrypto.java | 262 +++++++++--------- .../nlib/sample/web/BarcodeController.java | 208 +++++++------- .../jsp/nlib/cmm/error/accessDenied.jsp | 74 ++--- .../jsp/nlib/cmm/error/bizException.jsp | 78 +++--- .../webapp/WEB-INF/jsp/nlib/user/admin.jsp | 86 +++--- 8 files changed, 591 insertions(+), 374 deletions(-) diff --git a/src/main/java/nlib/bbs/service/impl/BoardDAO.java b/src/main/java/nlib/bbs/service/impl/BoardDAO.java index c05cadff..2664a1f7 100644 --- a/src/main/java/nlib/bbs/service/impl/BoardDAO.java +++ b/src/main/java/nlib/bbs/service/impl/BoardDAO.java @@ -44,7 +44,8 @@ public class BoardDAO extends DataApi } public DataApiResVO selectQnA(DataApiReqVO reqVO) { - return null; + reqVO.setReqUrl(RESOURCE_URI); + return get(reqVO); } public DataApiResVO verifyWriter(DataApiReqVO reqVO) { @@ -52,7 +53,8 @@ public class BoardDAO extends DataApi } public DataApiResVO updateQnA(DataApiReqVO reqVO) { - return null; + reqVO.setReqUrl(RESOURCE_URI); + return post(reqVO); } public DataApiResVO deleteQnA(DataApiReqVO reqVO) { @@ -60,7 +62,8 @@ public class BoardDAO extends DataApi } public DataApiResVO insertQnA(DataApiReqVO reqVO) { - return null; + reqVO.setReqUrl(RESOURCE_URI); + return put(reqVO); } diff --git a/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java b/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java index 5789a5a7..ec6286d2 100644 --- a/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java +++ b/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java @@ -43,11 +43,11 @@ public class BoardServiceImpl implements BoardService } public DataApiResVO selectQnA(DataApiReqVO reqVO) { - return null; + return boardDAO.selectQnA(reqVO); } public DataApiResVO insertQnA(DataApiReqVO reqVO) { - return null; + return boardDAO.insertQnA(reqVO); } public DataApiResVO verifyWriter(DataApiReqVO reqVO) { @@ -55,7 +55,7 @@ public class BoardServiceImpl implements BoardService } public DataApiResVO updateQnA(DataApiReqVO reqVO) { - return null; + return boardDAO.updateQnA(reqVO); } public DataApiResVO deleteQnA(DataApiReqVO reqVO) { diff --git a/src/main/java/nlib/bbs/web/BoardController.java b/src/main/java/nlib/bbs/web/BoardController.java index f7cb0777..425967e3 100644 --- a/src/main/java/nlib/bbs/web/BoardController.java +++ b/src/main/java/nlib/bbs/web/BoardController.java @@ -18,12 +18,15 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; import nlib.bbs.service.BoardService; import nlib.cmm.NlibCommonController; +import nlib.cmm.crypto.AriaCrypto; +import nlib.cmm.crypto.NlibPasswordEncoder; import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiResVO; +import nlib.user.service.NlibLoginVO; +import nlib.util.StringUtil; @Controller public class BoardController extends NlibCommonController @@ -32,6 +35,13 @@ public class BoardController extends NlibCommonController @Resource(name = "boardService") private BoardService boardService; + + @Resource(name = "nlibPasswordEncoder") + private NlibPasswordEncoder nlibPasswordEncoder; + + @Resource(name = "ariaCrypto") + private AriaCrypto ariaCrypto; + @Autowired private AuthenticationManager authenticationManager; @@ -77,8 +87,17 @@ public class BoardController extends NlibCommonController * @return */ @RequestMapping("/board/listQnAs.do") - public String listQnAs(HttpServletRequest req, Authentication authentication, @RequestParam Map commandMap, ModelMap model) { + public String listQnAs(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) { + String searchKeyword = paramMap.get("searchKeyword"); + String pageNo = paramMap.get("pageNo"); + String pageRows = paramMap.get("pageRows"); + + // 반환 정보 + model.addAttribute("pageNo" , pageNo); + model.addAttribute("pageRows" , pageRows); + model.addAttribute("searchKeyword", searchKeyword); + return "nlib/board/listQnAs"; } @@ -98,26 +117,26 @@ public class BoardController extends NlibCommonController log.debug("listQnAs > pageNo = " + pageNo); log.debug("listQnAs > pageRows = " + pageRows); - log.debug("listQnAs > keyword = " + searchKeyword); + log.debug("listQnAs > searchKeyword = " + searchKeyword); //------------------------------- // REQ VO 구성 //------------------------------- DataApiReqVO reqVO = new DataApiReqVO(); - reqVO.setAuthKey(getAuthKey(authentication)); + reqVO.setAuthKey(createAuthKey(req, authentication)); reqVO.setPageNo(pageNo); reqVO.setPageRows(pageRows); // 추가 정보 설정 HashMap info = new HashMap(); - info.put("keyword", searchKeyword); + info.put("searchKeyword", searchKeyword); reqVO.setInfo(info); // 요청 DataApiResVO resVO = boardService.listQnAs(reqVO); - // JSON변환 응답 처리 - return makeResponseEntityJson(resVO); + // JSON변환 응답 처리 + return makeResponseEntityJson(resVO.getList()); } @@ -128,7 +147,48 @@ public class BoardController extends NlibCommonController * @return */ @RequestMapping("/board/selectQnA.do") - public String selectQnA(HttpServletRequest req) { + public String selectQnA(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) { + + // 목록 이동시 전달할 매개변수 + String searchKeyword = paramMap.get("searchKeyword"); + String pageNo = paramMap.get("pageNo"); + String pageRows = paramMap.get("pageRows"); + + // 게시물 번호 + String articleNo = paramMap.get("articleNo"); + + log.debug("selectQnA > pageNo = " + pageNo); + log.debug("selectQnA > pageRows = " + pageRows); + log.debug("selectQnA > searchKeyword = " + searchKeyword); + log.debug("selectQnA > articleNo = " + articleNo); + + //------------------------------- + // REQ VO 구성 + //------------------------------- + DataApiReqVO reqVO = new DataApiReqVO(); + reqVO.setAuthKey(createAuthKey(req, authentication)); + reqVO.setPageNo(pageNo); + reqVO.setPageRows(pageRows); + + // 추가 정보 설정 : 게시판ID, 게시물번호 + HashMap info = new HashMap(); + info.put("boardNo", "QNA"); + info.put("articleNo", articleNo); + reqVO.setInfo(info); + + // 요청 + DataApiResVO resVO = boardService.selectQnA(reqVO); + + // 반환 정보 + model.addAttribute("articleNo" , articleNo); + model.addAttribute("article" , resVO.getInfo()); + model.addAttribute("preArticle" , resVO.getList().get(0)); + model.addAttribute("nextArticle" , resVO.getList().get(1)); + + model.addAttribute("pageNo" , pageNo); + model.addAttribute("pageRows" , pageRows); + model.addAttribute("searchKeyword", searchKeyword); + return "nlib/board/selectQnA"; } @@ -139,13 +199,46 @@ public class BoardController extends NlibCommonController * @return */ @RequestMapping("/board/insertQnAForm.do") - public String insertQnAForm(HttpServletRequest req) { + public String insertQnAForm(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) { + + NlibLoginVO loginVO = getNlibLoginVO(authentication); + model.addAttribute("regUserName", loginVO.getName()); + model.addAttribute("email", loginVO.getEmail()); + return "nlib/board/insertQnAForm"; } @RequestMapping("/board/insertQnA.do") - public String insertQnA(HttpServletRequest req) { - return "nlib/board/insertQnA"; + public String insertQnA(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) { + + NlibLoginVO loginVO = getNlibLoginVO(authentication); + + log.debug("paramMap > " + paramMap); + + String message = null; + String authKey = createAuthKey(req, authentication); + + //------------------------------- + // REQ VO 구성 + //------------------------------- + DataApiReqVO reqVO = new DataApiReqVO(); + reqVO.setAuthKey(authKey); + reqVO.addInfoItem("boardNo" , "QNA"); + reqVO.addInfoItem("title" , paramMap.get("title")); + reqVO.addInfoItem("regUserName" , paramMap.get("regUserName")); + reqVO.addInfoItem("email" , paramMap.get("email")); + reqVO.addInfoItem("contentQeust", paramMap.get("contentQeust")); + + // 요청 + DataApiResVO resVO = boardService.insertQnA(reqVO); + + // 처리결과 확인 + if(!resVO.isSuccess()) { + message = resVO.getResultMessage(); + return "redirect:/board/insertQnAForm.do"; + } + + return "redirect:nlib/board/listQnAs"; } @RequestMapping("/board/verifyWriter.do") @@ -154,13 +247,134 @@ public class BoardController extends NlibCommonController } @RequestMapping("/board/updateQnAForm.do") - public String updateQnAForm(HttpServletRequest req) { + public String updateQnAForm(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) { + + // 목록 이동시 전달할 매개변수 + String searchKeyword = paramMap.get("searchKeyword"); + String pageNo = paramMap.get("pageNo"); + String pageRows = paramMap.get("pageRows"); + + // 게시물 번호 + String articleNo = paramMap.get("articleNo"); + String articlePassword = paramMap.get("articlePassword"); + + log.debug("updateQnAForm > pageNo = " + pageNo); + log.debug("updateQnAForm > pageRows = " + pageRows); + log.debug("updateQnAForm > searchKeyword = " + searchKeyword); + log.debug("updateQnAForm > articleNo = " + articleNo); + log.debug("updateQnAForm > articlePassword = " + articlePassword); + + if(StringUtil.isEmpty(articlePassword)) { + model.addAttribute("message", "비밀빈호가 올바르지 않습니다.(1)"); + return "redirect:/board/selectQnA.do"; + } + + //------------------------------- + // REQ VO 구성 + //------------------------------- + DataApiReqVO reqVO = new DataApiReqVO(); + reqVO.setAuthKey(createAuthKey(req, authentication)); + reqVO.setPageNo(pageNo); + reqVO.setPageRows(pageRows); + + // 추가 정보 설정 : 게시판ID, 게시물번호 + HashMap info = new HashMap(); + info.put("boardNo", "QNA"); + info.put("articleNo", articleNo); + reqVO.setInfo(info); + + // 요청 + DataApiResVO resVO = boardService.selectQnA(reqVO); + + // 비밀번호 확인 + HashMap article = resVO.getInfo(); + if(!articlePassword.equals(article.get("articlePassword"))) { + model.addAttribute("message", "비밀빈호가 올바르지 않습니다.(1)"); + return "redirect:/board/selectQnA.do"; + } + + // 반환 정보 + model.addAttribute("articleNo" , articleNo); + model.addAttribute("article" , resVO.getInfo()); + + // 게시글 비밀번호 처리 + String shaArticlePassword = nlibPasswordEncoder.encode(articlePassword); + String encArticlePassword = ariaCrypto.encode(shaArticlePassword, createAuthKey(req, authentication)); + model.addAttribute("encArticlePassword", encArticlePassword); + + // 검색 정보 + model.addAttribute("pageNo" , pageNo); + model.addAttribute("pageRows" , pageRows); + model.addAttribute("searchKeyword", searchKeyword); + return "nlib/board/updateQnAForm"; } @RequestMapping("/board/updateQnA.do") - public String updateQnA(HttpServletRequest req) { - return "nlib/board/updateQnA"; + public String updateQnA(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) { + + log.debug("paramMap > " + paramMap); + + String message = null; + String authKey = createAuthKey(req, authentication); + + // 목록 이동시 전달할 매개변수 + String searchKeyword = paramMap.get("searchKeyword"); + String pageNo = paramMap.get("pageNo"); + String pageRows = paramMap.get("pageRows"); + + // 게시물 번호 + String articleNo = paramMap.get("articleNo"); + String encArticlePassword = paramMap.get("encArticlePassword"); + String checkArticlePassword = ariaCrypto.decode(encArticlePassword, authKey); + + //------------------------------- + // 비밀번호 유효 체크 + //------------------------------- + // 기존 정보 조회 + DataApiReqVO reqVO = new DataApiReqVO(); + reqVO.setAuthKey(authKey); + reqVO.addInfoItem("articleNo", articleNo); + + DataApiResVO resVO = boardService.selectQnA(reqVO); + String oldArticlePassword = resVO.getInfoItem("articlePassword"); + if(checkArticlePassword == null || !checkArticlePassword.equals(oldArticlePassword)) { + message = "잘못된 접근입니다."; + // TODO 수정화면으로 다시 redirect 시킬것 + return "redirect:/board/updateQnAForm.do"; + } + + //------------------------------- + // REQ VO 구성 + //------------------------------- + DataApiReqVO updateReqVO = new DataApiReqVO(); + updateReqVO.setAuthKey(authKey); + updateReqVO.addInfoItem("boardNo" , "QNA"); + updateReqVO.addInfoItem("articleNo" , articleNo); + updateReqVO.addInfoItem("title" , paramMap.get("title")); + updateReqVO.addInfoItem("regUserName" , paramMap.get("regUserName")); + updateReqVO.addInfoItem("email" , paramMap.get("email")); + updateReqVO.addInfoItem("contentQeust", paramMap.get("contentQeust")); + + // 요청 + DataApiResVO updateResVO = boardService.updateQnA(updateReqVO); + + // 처리결과 확인 + if(!updateResVO.isSuccess()) { + message = updateResVO.getResultMessage(); + return "redirect:/board/updateQnAForm.do"; + } + + // 반환 정보 + model.addAttribute("articleNo" , updateResVO.getInfoItem("articleNo")); // 신규등록된 게시물 ID + model.addAttribute("article" , resVO.getInfo()); + + // 검색 정보 + model.addAttribute("pageNo" , pageNo); + model.addAttribute("pageRows" , pageRows); + model.addAttribute("searchKeyword", searchKeyword); + + return "redirect:nlib/board/selectQnA"; } @RequestMapping("/board/deleteQnA.do") diff --git a/src/main/java/nlib/cmm/crypto/AriaCrypto.java b/src/main/java/nlib/cmm/crypto/AriaCrypto.java index c36e4a66..8d1dee7e 100644 --- a/src/main/java/nlib/cmm/crypto/AriaCrypto.java +++ b/src/main/java/nlib/cmm/crypto/AriaCrypto.java @@ -1,131 +1,131 @@ -package nlib.cmm.crypto; - -import org.apache.tomcat.util.codec.binary.Base64; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; -import egovframework.rte.fdl.cryptography.impl.EgovARIACryptoServiceImpl; -import nlib.sample.web.SampleEncoderController; -import nlib.util.StringUtil; - -/** - *
- * @Class Name : AriaCrypto.java
- * 
- * @Description : 양방향 Aria 알고리즘 암복호화 처리 클래스 (egov Aria 알고리즘 구현체 사용) 
- * 
- * 
- * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
- *
- * 
- * - * @ ------------ -------- --------------------------- - * @ 수정일 수정자 수정내용 - * @ ------------ -------- --------------------------- - * @ 2021. 7. 8. KNKIM 최초 생성 - * - * - * @author 이씨플라자 * DIGITALSHIP KNKIM - * @since 2021. 7. 8. - * @version 1.0 - * - */ -@Component("ariaCrypto") -public class AriaCrypto { - - private static final Logger log = LoggerFactory.getLogger(AriaCrypto.class); - - /** - * 암호처리 시, 기본 키 - */ - @Value("#{properties['crypto.aria.defaultKey']}") - private String ARIA_DEFAULT_KEY; - - /** - * 기본키를 가지고 암호화한다. - * - * @param value - * @return - */ - public String encode(String value) { - log.info("encode : 암호화에 사용할 키 정보가 없으므로 기본키 정보를 사용합니다 : " + ARIA_DEFAULT_KEY); - return encode(value, ARIA_DEFAULT_KEY); - } - - /** - * 전달받은 key(사용자고유번호 혹은 메일주소 등 salt값)로 암호화한다. - * - * @param value - * @param key - * @return - */ - public String encode(String value, String key) { - - if(StringUtil.isEmpty(value)) { - log.error("encode : 암호화할 문자열 정보가 없습니다."); - return null; - } - - if(StringUtil.isEmpty(key)) { - log.error("encode : 암호화에 사용할 키 정보가 없습니다."); - return null; - } - - EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder(); - - String hashedPassword = egovPasswordEncoder.encryptPassword(key); - egovPasswordEncoder.setHashedPassword(hashedPassword); - egovPasswordEncoder.setAlgorithm("SHA-256"); - - EgovARIACryptoServiceImpl egovARIACryptoServiceImpl = new EgovARIACryptoServiceImpl(); - egovARIACryptoServiceImpl.setPasswordEncoder(egovPasswordEncoder); - egovARIACryptoServiceImpl.setBlockSize(1025); - - return Base64.encodeBase64String(egovARIACryptoServiceImpl.encrypt(value.getBytes(), key)); - } - - /** - * 기본키를 가지고 복호화한다. - * - * @param value - * @return - */ - public String decode(String value) { - log.info("decode : 복호화에 사용할 키 정보가 없으므로 기본키 정보를 사용합니다 : " + ARIA_DEFAULT_KEY); - return decode(value, ARIA_DEFAULT_KEY); - } - - /** - * 전달받은 key(사용자고유번호 혹은 메일주소 등 salt값)로 복호화한다. - * @param value - * @param key - * @return - */ - public String decode(String value, String key) { - - if(StringUtil.isEmpty(value)) { - log.error("decode : 복호화할 암호문자열 정보가 없습니다."); - return null; - } - - if(StringUtil.isEmpty(key)) { - log.error("decode : 복호화에 사용할 키 정보가 없습니다."); - return null; - } - - EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder(); - - String hashedPassword = egovPasswordEncoder.encryptPassword(key); - egovPasswordEncoder.setHashedPassword(hashedPassword); - egovPasswordEncoder.setAlgorithm("SHA-256"); - - EgovARIACryptoServiceImpl egovARIACryptoServiceImpl = new EgovARIACryptoServiceImpl(); - egovARIACryptoServiceImpl.setPasswordEncoder(egovPasswordEncoder); - egovARIACryptoServiceImpl.setBlockSize(1025); - - return new String(egovARIACryptoServiceImpl.decrypt(Base64.decodeBase64(value), key)); - } -} +package nlib.cmm.crypto; + +import org.apache.tomcat.util.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; +import egovframework.rte.fdl.cryptography.impl.EgovARIACryptoServiceImpl; +import nlib.cmm.service.NlibProperty; +import nlib.sample.web.SampleEncoderController; +import nlib.util.StringUtil; + +/** + *
+ * @Class Name : AriaCrypto.java
+ * 
+ * @Description : 양방향 Aria 알고리즘 암복호화 처리 클래스 (egov Aria 알고리즘 구현체 사용) 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 7. 8. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 7. 8. + * @version 1.0 + * + */ +@Component("ariaCrypto") +public class AriaCrypto { + + private static final Logger log = LoggerFactory.getLogger(AriaCrypto.class); + + /** + * 암호처리 시, 기본 키 + */ + private static String ARIA_DEFAULT_KEY = NlibProperty.getProperty("crypto.aria.defaultKey"); + + /** + * 기본키를 가지고 암호화한다. + * + * @param value + * @return + */ + public static String encode(String value) { + log.info("encode : 암호화에 사용할 키 정보가 없으므로 기본키 정보를 사용합니다 : " + ARIA_DEFAULT_KEY); + return encode(value, ARIA_DEFAULT_KEY); + } + + /** + * 전달받은 key(사용자고유번호 혹은 메일주소 등 salt값)로 암호화한다. + * + * @param value + * @param key + * @return + */ + public static String encode(String value, String key) { + + if(StringUtil.isEmpty(value)) { + log.error("encode : 암호화할 문자열 정보가 없습니다."); + return null; + } + + if(StringUtil.isEmpty(key)) { + log.error("encode : 암호화에 사용할 키 정보가 없습니다."); + return null; + } + + EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder(); + + String hashedPassword = egovPasswordEncoder.encryptPassword(key); + egovPasswordEncoder.setHashedPassword(hashedPassword); + egovPasswordEncoder.setAlgorithm("SHA-256"); + + EgovARIACryptoServiceImpl egovARIACryptoServiceImpl = new EgovARIACryptoServiceImpl(); + egovARIACryptoServiceImpl.setPasswordEncoder(egovPasswordEncoder); + egovARIACryptoServiceImpl.setBlockSize(1025); + + return Base64.encodeBase64String(egovARIACryptoServiceImpl.encrypt(value.getBytes(), key)); + } + + /** + * 기본키를 가지고 복호화한다. + * + * @param value + * @return + */ + public static String decode(String value) { + log.info("decode : 복호화에 사용할 키 정보가 없으므로 기본키 정보를 사용합니다 : " + ARIA_DEFAULT_KEY); + return decode(value, ARIA_DEFAULT_KEY); + } + + /** + * 전달받은 key(사용자고유번호 혹은 메일주소 등 salt값)로 복호화한다. + * @param value + * @param key + * @return + */ + public static String decode(String value, String key) { + + if(StringUtil.isEmpty(value)) { + log.error("decode : 복호화할 암호문자열 정보가 없습니다."); + return null; + } + + if(StringUtil.isEmpty(key)) { + log.error("decode : 복호화에 사용할 키 정보가 없습니다."); + return null; + } + + EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder(); + + String hashedPassword = egovPasswordEncoder.encryptPassword(key); + egovPasswordEncoder.setHashedPassword(hashedPassword); + egovPasswordEncoder.setAlgorithm("SHA-256"); + + EgovARIACryptoServiceImpl egovARIACryptoServiceImpl = new EgovARIACryptoServiceImpl(); + egovARIACryptoServiceImpl.setPasswordEncoder(egovPasswordEncoder); + egovARIACryptoServiceImpl.setBlockSize(1025); + + return new String(egovARIACryptoServiceImpl.decrypt(Base64.decodeBase64(value), key)); + } +} diff --git a/src/main/java/nlib/sample/web/BarcodeController.java b/src/main/java/nlib/sample/web/BarcodeController.java index 109c6353..8d37dbaa 100644 --- a/src/main/java/nlib/sample/web/BarcodeController.java +++ b/src/main/java/nlib/sample/web/BarcodeController.java @@ -1,104 +1,104 @@ -package nlib.sample.web; - -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; - -import javax.annotation.Resource; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.MediaType; -import org.springframework.security.access.annotation.Secured; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -import nlib.cmm.qrcode.QRCodeUtil; -import nlib.user.service.NlibLoginVO; -import nlib.util.StringUtil; - -@Controller -public class BarcodeController { - - private static final Logger log = LoggerFactory.getLogger(BarcodeController.class); - - /** QRCodeService */ - @Resource(name = "qrCodeService") - private QRCodeUtil qrCodeService; - - /** - * 샘플 : 회원정보를 입력받을 수 있는 폼을 구성하여 표출한다. - * - * @param request - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value="/sample/barcode/getMemberQRCodeForm.do", produces=MediaType.IMAGE_JPEG_VALUE) - @Secured("ROLE_ADMIN") - public String getMemberQRCodeForm(@ModelAttribute("loginVO") NlibLoginVO loginVO, ModelMap model) throws Exception { - - log.debug("getMemberQRCodeForm : loginVO=" + loginVO.toString()); - - if(StringUtil.isEmpty(loginVO.getUniqId())) loginVO.setUniqId("USER0001-000001"); - if(StringUtil.isEmpty(loginVO.getEmail())) loginVO.setEmail("myid@digitalship.co.kr"); - if(StringUtil.isEmpty(loginVO.getName())) loginVO.setName("홍길동"); - - model.addAttribute("loginVO", loginVO); - - return "nlib/sample/getMemberInfoFromQRCode"; - } - - /** - * 샘플 : 입력받은 회원정보를 가지고 QR 2D 바코드를 생성하는 예를 보여준다. - * 결과값은 JPG 바코드 이미지 이다. (Zxing Lib 사용) - * - * @param request - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value="/sample/barcode/getMemberQRCode.do", produces=MediaType.IMAGE_JPEG_VALUE) - public @ResponseBody byte[] getMemberQRCode(@ModelAttribute("loginVO") NlibLoginVO loginVO, HttpServletRequest request, HttpServletResponse response) throws Exception { - - log.debug("getMemberQRCode : loginVO=" + loginVO.toString()); - - BufferedImage bufferedImage = qrCodeService.generateMemberQRCodeImage(loginVO); - - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - ImageIO.write( bufferedImage , "jpg", byteArrayOutputStream); - byte[] bs = byteArrayOutputStream.toByteArray(); - response.setContentLength(bs.length); - - return byteArrayOutputStream.toByteArray(); - } - - - /** - * 샘플 : 회원정보 QR 2D 바코드 내용을 입력받아 사용자VO 정보를 추출하는 예를 보여준다. - * - * @param request - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value="/sample/barcode/getMemberInfoFromQRCode.do") - public String getMemberInfoFromQRCode(@RequestParam String barcodeText, ModelMap model) throws Exception { - - log.debug("getMemberInfoFromQRCode : barcodeText=" + barcodeText); - - NlibLoginVO loginVO = qrCodeService.getMemberInfoFromQRCode(barcodeText); - log.debug("getMemberInfoFromQRCode : loginVO=" + loginVO.toString()); - - model.addAttribute("loginVO", loginVO); - - return "nlib/sample/getMemberInfoFromQRCode"; - } -} +package nlib.sample.web; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.security.access.annotation.Secured; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import nlib.cmm.qrcode.QRCodeUtil; +import nlib.user.service.NlibLoginVO; +import nlib.util.StringUtil; + +@Controller +public class BarcodeController { + + private static final Logger log = LoggerFactory.getLogger(BarcodeController.class); + + /** QRCodeService */ + @Resource(name = "qrCodeService") + private QRCodeUtil qrCodeService; + + /** + * 샘플 : 회원정보를 입력받을 수 있는 폼을 구성하여 표출한다. + * + * @param request + * @param response + * @return + * @throws Exception + */ + @RequestMapping(value="/sample/barcode/getMemberQRCodeForm.do", produces=MediaType.IMAGE_JPEG_VALUE) + @Secured("ROLE_ADMIN") + public String getMemberQRCodeForm(@ModelAttribute("loginVO") NlibLoginVO loginVO, ModelMap model) throws Exception { + + log.debug("getMemberQRCodeForm : loginVO=" + loginVO.toString()); + + if(StringUtil.isEmpty(loginVO.getUniqId())) loginVO.setUniqId("USER0001-000001"); + if(StringUtil.isEmpty(loginVO.getEmail())) loginVO.setEmail("myid@digitalship.co.kr"); + if(StringUtil.isEmpty(loginVO.getName())) loginVO.setName("홍길동"); + + model.addAttribute("loginVO", loginVO); + + return "nlib/sample/getMemberInfoFromQRCode"; + } + + /** + * 샘플 : 입력받은 회원정보를 가지고 QR 2D 바코드를 생성하는 예를 보여준다. + * 결과값은 JPG 바코드 이미지 이다. (Zxing Lib 사용) + * + * @param request + * @param response + * @return + * @throws Exception + */ + @RequestMapping(value="/sample/barcode/getMemberQRCode.do", produces=MediaType.IMAGE_JPEG_VALUE) + public @ResponseBody byte[] getMemberQRCode(@ModelAttribute("loginVO") NlibLoginVO loginVO, HttpServletRequest request, HttpServletResponse response) throws Exception { + + log.debug("getMemberQRCode : loginVO=" + loginVO.toString()); + + BufferedImage bufferedImage = qrCodeService.generateMemberQRCodeImage(loginVO); + + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ImageIO.write( bufferedImage , "jpg", byteArrayOutputStream); + byte[] bs = byteArrayOutputStream.toByteArray(); + response.setContentLength(bs.length); + + return byteArrayOutputStream.toByteArray(); + } + + + /** + * 샘플 : 회원정보 QR 2D 바코드 내용을 입력받아 사용자VO 정보를 추출하는 예를 보여준다. + * + * @param request + * @param response + * @return + * @throws Exception + */ + @RequestMapping(value="/sample/barcode/getMemberInfoFromQRCode.do") + public String getMemberInfoFromQRCode(@RequestParam String barcodeText, ModelMap model) throws Exception { + + log.debug("getMemberInfoFromQRCode : barcodeText=" + barcodeText); + + NlibLoginVO loginVO = qrCodeService.getMemberInfoFromQRCode(barcodeText); + log.debug("getMemberInfoFromQRCode : loginVO=" + loginVO.toString()); + + model.addAttribute("loginVO", loginVO); + + return "nlib/sample/getMemberInfoFromQRCode"; + } +} diff --git a/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/accessDenied.jsp b/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/accessDenied.jsp index 79323da1..62a8dc1b 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/accessDenied.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/accessDenied.jsp @@ -1,38 +1,38 @@ -<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> - - - - - -<spring:message code="title.html"/> - - - - -
-

-
- -

${pageTitle}

- -
-
-
-

-

${pageTitle}

- -
-
-
-
-
- - +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> + + + + + +<spring:message code="title.html"/> + + + + +
+

+
+ +

${pageTitle}

+ +
+
+
+

+

${pageTitle}

+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/bizException.jsp b/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/bizException.jsp index 4b474248..f26a363d 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/bizException.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/cmm/error/bizException.jsp @@ -1,39 +1,39 @@ -<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> - - - - - -<spring:message code="title.html"/> - - - - - -
-

-
- -

${pageTitle}

- -
-
-
-

-

${pageTitle}

- -
-
-
-
-
- - - +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> + + + + + +<spring:message code="title.html"/> + + + + + +
+

+
+ +

${pageTitle}

+ +
+
+
+

+

${pageTitle}

+ +
+
+
+
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/nlib/user/admin.jsp b/src/main/webapp/WEB-INF/jsp/nlib/user/admin.jsp index 17c02276..eee727ff 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/user/admin.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/user/admin.jsp @@ -1,43 +1,43 @@ -<% -/** - *
- * @Class Name : getSampleInfo.jsp
- * 
- * @Description : RESTful API 호출 샘플
- * 
- * 
- * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
- *
- * 
- * - * @ ------------ -------- --------------------------- - * @ 수정일 수정자 수정내용 - * @ ------------ -------- --------------------------- - * @ 2021. 6. 15. KNKIM 최초 생성 - * - * - * @author 이씨플라자 * DIGITALSHIP KNKIM - * @since 2021. 6. 15. - * @version 1.0 - * - */ - %> -<%@ page language="java" contentType="text/html; charset=UTF-8" %> - - 결과 - - - - -${pageTitle} - - - - - - -All - - - +<% +/** + *
+ * @Class Name : getSampleInfo.jsp
+ * 
+ * @Description : RESTful API 호출 샘플
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 6. 15. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 6. 15. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + - 결과 + + + + +${pageTitle} + + + + + + +All + + +