386 lines
13 KiB
Java
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";
|
|
}
|
|
|
|
|
|
} |