구조 설명


절차 트레이닝

  1. freeBoardContentPwdCheck.do 요청 → DispatcherServlet이 해당 명령어에 맞는 진입 메서드를 BoardController에서 찾아줌

  2. 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;
    	}
    
  3. 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>
    
  4. 사용자에게 입력 받은 비밀번호를 post 방식으로 명령어 기반 전달(freeBoardPwdCheckOk.do) → DispatcherServlet에서 해당 명령어에 맞는 진입 메서드를 BoardController에서 찾아줌

  5. 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;
    	}
    
  6. 일치 했을 때 idx를 한번 더 넘겨주는 이유는 게시글 내용 확인 시 idx를 @RequestParam으로 받고 있어서 결과 처리 후 이동할 때 쿼리스트링으로 다시 idx를 넘겨주기 위함.

    <script>
    	window.alert('${msg}');
    	location.href='freeBoardContent.do?idx=${idx}';
    </script>