소스정리 커밋

This commit is contained in:
KNKIM 2021-07-26 10:15:04 +09:00
parent bc2f6ebe0c
commit 0078c89323
8 changed files with 591 additions and 374 deletions

View File

@ -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);
}

View File

@ -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) {

View File

@ -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<String, String> commandMap, ModelMap model) {
public String listQnAs(HttpServletRequest req, Authentication authentication, @RequestParam Map<String, String> 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<String, Object> info = new HashMap<String, Object>();
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<String, String> 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<String, Object> info = new HashMap<String, Object>();
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<String, String> 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<String, String> 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<String, String> 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<String, Object> info = new HashMap<String, Object>();
info.put("boardNo", "QNA");
info.put("articleNo", articleNo);
reqVO.setInfo(info);
// 요청
DataApiResVO resVO = boardService.selectQnA(reqVO);
// 비밀번호 확인
HashMap<String, Object> 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<String, String> 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")

View File

@ -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;
/**
* <pre>
* @Class Name : AriaCrypto.java
*
* @Description : 양방향 Aria 알고리즘 암복호화 처리 클래스 (egov Aria 알고리즘 구현체 사용)
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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;
/**
* <pre>
* @Class Name : AriaCrypto.java
*
* @Description : 양방향 Aria 알고리즘 암복호화 처리 클래스 (egov Aria 알고리즘 구현체 사용)
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 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));
}
}

View File

@ -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";
}
}

View File

@ -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" %>
<c:set var="pageTitle"><spring:message code="comCmmErr.accessDenied.code"/></c:set><!-- 사용자접근권한 에러 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><spring:message code="title.html"/></title>
<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
<script language="javascript">
function fncGoAfterErrorPage(){
history.back(-2);
}
</script>
</head>
<body>
<div style="width: 1000px; margin: 50px auto 50px;">
<p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
<div style="border: ppx solid #666; padding: 20px;">
<!-- Xss(Cross Site Scripting) Error -->
<p style="color:red; margin-bottom: 8px; ">${pageTitle}</p>
<div class="boxType1" style="width: 700px;">
<div class="box">
<div class="error">
<p class="title"><spring:message code="comCmmErr.accessDenied.title" /></p><!-- 현재 페이지에 대한 접근권한이 없습니다! -->
<p class="cont mb20">${pageTitle}<br /></p>
<span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
</div>
</div>
</div>
</div>
</div>
</body>
<%@ 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" %>
<c:set var="pageTitle"><spring:message code="comCmmErr.accessDenied.code"/></c:set><!-- 사용자접근권한 에러 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><spring:message code="title.html"/></title>
<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
<script language="javascript">
function fncGoAfterErrorPage(){
history.back(-2);
}
</script>
</head>
<body>
<div style="width: 1000px; margin: 50px auto 50px;">
<p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
<div style="border: ppx solid #666; padding: 20px;">
<!-- Xss(Cross Site Scripting) Error -->
<p style="color:red; margin-bottom: 8px; ">${pageTitle}</p>
<div class="boxType1" style="width: 700px;">
<div class="box">
<div class="error">
<p class="title"><spring:message code="comCmmErr.accessDenied.title" /></p><!-- 현재 페이지에 대한 접근권한이 없습니다! -->
<p class="cont mb20">${pageTitle}<br /></p>
<span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -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" %>
<c:set var="pageTitle"><spring:message code="comCmmErr.bizException.code"/></c:set><!-- 비즈니스로직처리 에러 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><spring:message code="title.html"/></title>
<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
<script language="javascript">
function fncGoAfterErrorPage(){
history.back(-2);
}
</script>
</head>
<body>
<div style="width: 1000px; margin: 50px auto 50px;">
<p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
<div style="border: ppx solid #666; padding: 20px;">
<!-- Xss(Cross Site Scripting) Error -->
<p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
<div class="boxType1" style="width: 700px;">
<div class="box">
<div class="error">
<p class="title"><spring:message code="comCmmErr.bizException.title" /></p><!-- 비즈니스 로직 처리 중 발생했습니다! -->
<p class="cont mb20">${pageTitle}<br /></p>
<span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<%@ 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" %>
<c:set var="pageTitle"><spring:message code="comCmmErr.bizException.code"/></c:set><!-- 비즈니스로직처리 에러 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><spring:message code="title.html"/></title>
<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
<script language="javascript">
function fncGoAfterErrorPage(){
history.back(-2);
}
</script>
</head>
<body>
<div style="width: 1000px; margin: 50px auto 50px;">
<p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
<div style="border: ppx solid #666; padding: 20px;">
<!-- Xss(Cross Site Scripting) Error -->
<p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
<div class="boxType1" style="width: 700px;">
<div class="box">
<div class="error">
<p class="title"><spring:message code="comCmmErr.bizException.title" /></p><!-- 비즈니스 로직 처리 중 발생했습니다! -->
<p class="cont mb20">${pageTitle}<br /></p>
<span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,43 +1,43 @@
<%
/**
* <pre>
* @Class Name : getSampleInfo.jsp
*
* @Description : RESTful API 호출 샘플
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<c:set var="pageTitle"><spring:message code="nlib.title"/> - 결과</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
</script>
</head>
<body>
All
</body>
</html>
<%
/**
* <pre>
* @Class Name : getSampleInfo.jsp
*
* @Description : RESTful API 호출 샘플
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<c:set var="pageTitle"><spring:message code="nlib.title"/> - 결과</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
</script>
</head>
<body>
All
</body>
</html>