freeBoardContentPwdCheck.do 요청 → DispatcherServlet이 해당 명령어에 맞는 진입 메서드를 BoardController에서 찾아줌
BoardController에서 파라미터로 idx를 전달 받아 ModelAndView 객체에게 add 하고 페이지 이동
@RequestMapping("freeBoardContentPwdCheck.do")
public ModelAndView pwdCheck(@RequestParam(value="idx", defaultValue="0")int idx) {
ModelAndView mav = new ModelAndView();
mav.addObject("idx", idx);
mav.setViewName("board/freeBoardPwdCheck");
return mav;
}
board/freeBoardPwdCheck에서 자바스크립트 이용해서 prompt 띄우고 처리하기
<script>
window.onload = function (){
var resultPwd = window.prompt('비밀번호 확인','게시글 작성 시 입력했던 비밀번호를 입력해주세요.');
if(resultPwd == null || resultPwd.trim()==''){
history.back();
return;
}
// HTML을 JS로 만드는 기법
// <form method="post" action="freeBoardPwdCheckOk.do"></form>
var form = document.createElement('form');
form.method='POST';
form.action='freeBoardPwdCheckOk.do';
// <input type="hidden" name="idx" value="194">
var idxInput = document.createElement('input');
idxInput.type='hidden';
idxInput.name='idx';
idxInput.value=${idx};
// <input type="hidden" name="pwd" value="sh08306524">
var pwdInput = document.createElement('input');
pwdInput.type='hidden';
pwdInput.name='pwd';
pwdInput.value=resultPwd;
// 위에 만들어 놓은 input 태그들을 form의 자식요소로 추가하겠다는 뜻
// <form method="post" action="freeBoardPwdCheckOk.do">
// <input type="hidden" name="idx" value="194">
// <input type="hidden" name="pwd" value="sh08306524">
// </form>
form.appendChild(idxInput);
form.appendChild(pwdInput);
// 화면에 form 붙이기
document.body.appendChild(form);
// form 전송
form.submit();
};
</script>
사용자에게 입력 받은 비밀번호를 post 방식으로 명령어 기반 전달(freeBoardPwdCheckOk.do) → DispatcherServlet에서 해당 명령어에 맞는 진입 메서드를 BoardController에서 찾아줌
hidden으로 넘어온 idx와 pwd 값을 어노테이션 RequestParam을 이용해 받아줌
@RequestMapping("freeBoardPwdCheckOk.do")
public ModelAndView pwdCheckOk(
@RequestParam(value="idx", defaultValue="0")int idx,
@RequestParam(value="pwd", defaultValue="off")String pwd) {
String dbpwd = boardService.freeBoardGetPwd(idx);
String temp = com.beom.javasecur.JavaDataSecurModule.getSHA256(pwd);
ModelAndView mav = new ModelAndView();
String msg = "";
if(temp.equals(dbpwd)) {
msg = "비밀번호 일치";
mav.addObject("msg", msg);
mav.addObject("idx", idx);
mav.setViewName("board/freeBoardPwdCheckMsg");
}else {
msg = "비밀번호 불일치";
mav.addObject("msg", msg);
mav.setViewName("board/freeBoardMsg");
}
return mav;
}
일치 했을 때 idx를 한번 더 넘겨주는 이유는 게시글 내용 확인 시 idx를 @RequestParam으로 받고 있어서 결과 처리 후 이동할 때 쿼리스트링으로 다시 idx를 넘겨주기 위함.
<script>
window.alert('${msg}');
location.href='freeBoardContent.do?idx=${idx}';
</script>