itsm_ysm/src/main/java/nlib/bbs/web/BoardController.java
2021-07-26 10:15:04 +09:00

386 lines
13 KiB
Java

package nlib.bbs.web;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
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 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
{
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
@Resource(name = "boardService")
private BoardService boardService;
@Resource(name = "nlibPasswordEncoder")
private NlibPasswordEncoder nlibPasswordEncoder;
@Resource(name = "ariaCrypto")
private AriaCrypto ariaCrypto;
@Autowired
private AuthenticationManager authenticationManager;
/**
* 공지사항 목록 조회한다.
*
* @param req
* @return
*/
@SuppressWarnings("deprecation")
@RequestMapping("/board/listNotices.do")
public String listNotices(HttpServletRequest req) {
return "nlib/board/listNotices";
}
/**
* 공지사항 상세 내용 조회한다.
* @param req
* @return
*/
@RequestMapping("/board/selectNotice.do")
public String selectNotice(HttpServletRequest req) {
return "nlib/board/selectNotice";
}
/**
* FAQ 목록 조회한다.
*
* @param req
* @return
*/
@RequestMapping("/board/listFAQs.do")
public String listFAQs(HttpServletRequest req) {
return "nlib/board/listFAQs";
}
/**
* 묻고답하기 목록 조회 화면을 구성한다.
*
* @param req
* @return
*/
@RequestMapping("/board/listQnAs.do")
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";
}
/**
* 묻고답하기 목록 조회한다.
*
* @param req
* @return
*/
@RequestMapping(value="/board/listQnAsAjax.do")
public ResponseEntity<String> listQnAsAjax(HttpServletRequest req,
Authentication authentication, @RequestBody Map<String, String> paramMap) {
String searchKeyword = paramMap.get("searchKeyword");
String pageNo = paramMap.get("pageNo");
String pageRows = paramMap.get("pageRows");
log.debug("listQnAs > pageNo = " + pageNo);
log.debug("listQnAs > pageRows = " + pageRows);
log.debug("listQnAs > searchKeyword = " + searchKeyword);
//-------------------------------
// REQ VO 구성
//-------------------------------
DataApiReqVO reqVO = new DataApiReqVO();
reqVO.setAuthKey(createAuthKey(req, authentication));
reqVO.setPageNo(pageNo);
reqVO.setPageRows(pageRows);
// 추가 정보 설정
HashMap<String, Object> info = new HashMap<String, Object>();
info.put("searchKeyword", searchKeyword);
reqVO.setInfo(info);
// 요청
DataApiResVO resVO = boardService.listQnAs(reqVO);
// JSON변환 응답 처리
return makeResponseEntityJson(resVO.getList());
}
/**
* 묻고답하기 상세 내용 조회한다.
*
* @param req
* @return
*/
@RequestMapping("/board/selectQnA.do")
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";
}
/**
* 묻고답하기 글작성화면을 표출한다.
*
* @param req
* @return
*/
@RequestMapping("/board/insertQnAForm.do")
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, 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")
public String verifyWriter(HttpServletRequest req) {
return "nlib/board/verifyWriter";
}
@RequestMapping("/board/updateQnAForm.do")
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, 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")
public String deleteQnA(HttpServletRequest req) {
return "nlib/board/deleteQnA";
}
}