SPRING

[spring]회원정보 수정 - 비밀번호 체크하기

라텐느 2024. 10. 13. 23:47

회원정보를 수정하거나 로그인할때 비밀번호가 일치하는지 확인하는 로직이다. 민감한 정보를 확인할 때 많이 쓰인다.

	@RequestMapping("/CheckPassword")
	public ModelAndView checkPassword(String userid, String inputPassword) {
	    // DB에서 사용자 정보 조회
	    UserVo user = userMapper.getUser(userid);
	    ModelAndView mv = new ModelAndView();
	    
	    // 입력된 비밀번호가 null이거나 비어있는 경우
	    if (inputPassword == null || inputPassword.isEmpty()) {
	        mv.setViewName("users/checkPassword1");
	        return mv;
	    }
	    
	    // 입력된 비밀번호와 DB의 비밀번호를 비교
	    if (user.getPasswd().equals(inputPassword)) {
	        // 비밀번호가 일치하면 수정 페이지로 이동
	        mv.setViewName("redirect:/Users/UpdateForm?userid=" + userid);
	    } else {
	        // 비밀번호가 틀리면 오류 메시지와 함께 비밀번호 확인 페이지로 다시 이동
	        mv.setViewName("users/checkPassword");
	        mv.addObject("error", "비밀번호가 일치하지 않습니다.");
	    }

	    return mv;
	}
  • 매개변수: 요청으로부터 userid와 inputPassword를 받는다.
  • 비밀번호가 일치하지 않는 경우, users폴더의 checkPassword을 html로 보여주고, 비밀번호가 일치하지 않는다는 오류 메시지를 추가한다.userid는 히든 필드로 전송되고, 비밀번호 입력 필드는 inputPassword라는 이름을 가진다.
💡     // 입력된 비밀번호가 null이거나 비어있는 경우
    if (inputPassword == null || inputPassword.isEmpty()) {
        mv.setViewName("users/checkPassword1");
        return mv;
    }

이 부분을 안넣으면 비밀번호 체크화면을 키자마자 바로 "비밀번호가 일치하지 않습니다." 오류가 뜨는데, 처음에는 왜 이렇게 되는지 몰라서 좀 헤메었다. 그런데 inputPassword을 sysout 했을때 null이 먼저 뜨길래 위 로직을 추가했다. 계속 쳐다보고 있는다고 해결되는 것도 없고 한숨 돌리고 나서야 어떻게 수정하면 될지 보였다.

 

  <main>
    <h2>비밀번호 확인</h2>
    <form action="/Users/CheckPassword" method="POST">
      <input type="hidden" name="userid" value="${param.userid}" />
      <table>
        <tr>
          <td>비밀번호</td>
          <td><input type="password" name="inputPassword" required /></td>
        </tr>
        <tr>
          <td colspan="2">
            <input type="submit" value="확인" id="check"/>
          </td>
        </tr>
        
      </table>
    </form>
   <script>
      // 서버에서 전달된 error 메시지가 있을 경우 alert로 출력
      <% if (request.getAttribute("error") != null) { %>
        alert("<%= request.getAttribute("error") %>");
      <% } %>
    </script>
  </main>

 

  • userid가 없으면 서버는 어떤 사용자의 비밀번호를 확인해야 하는지 알 수 없으므로,  hidden으로 불러온다
  • error속성을 불러와서 비밀번호가 일치하지 않을 경우 error메시지를 출력한다.