본문 바로가기
Framework (Backend)/SpringBoot

(SpringBoot) 관리자 비밀번호 변경하기 : Spring Boot 2.x.x Web Tutorial

by 가우리언 2021. 11. 22.
728x90
반응형

이번에는 관리자의 비밀번호를 변경해볼 것입니다. 이를 위해서 저장프로시저를 2개 생성할 것이고, 관련 코드들을 작성해보겠습니다. 코드들이 이전과 비슷하지만, 조금씩 다들 부분들이 있으니 주의해서 봐주세요.

그리고, 이 튜토리얼의 소스는  https://github.com/gauryan/springboot2-tutorial 에서도 확인할 수 있습니다.

1. 저장 프로시저 (SP_GET_ADMIN) 생성 (1명의 관리자 정보를 가져옴)

CREATE PROCEDURE SP_GET_ADMIN(i_id INT)
BEGIN
  SELECT id, userid, password, nick FROM TB_ADMIN WHERE id = i_id LIMIT 1;
END


mysql> CALL SP_GET_ADMIN(2);
+------+---------+----------+-------+
| id   | userid  | password | nick  |
+------+---------+----------+-------+
|    2 | testid2 | passwd2  | nick2 |
+------+---------+----------+-------+


2. src/main/resources/templates/mgmt/admin/chg_passwd_form.html 파일을 생성한다. 비밀번호 변경하기 위한 폼을 출력한다.

<div class="modal-header">
  <h5 class="modal-title">관리자 비밀번호 변경</h5>
  <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
  <form name="chg_passwd_form" action="/mgmt/admin/chg_passwd" method="post">
    <div class="form-group">
      <label>아이디</label>
      <input type="text" name="userid" class="form-control" readonly required value="${admin.userid}"/>
      <input type="hidden" name="id" value="${admin.id}" />
    </div>
    <div class="form-group">
      <label>비밀번호 <small>(필수)</small></label>
      <input type="password" name="passwd1" class="form-control" required />
    </div>
    <div class="form-group">
      <label>비밀번호 확인 <small>(필수)</small></label>
      <input type="password" name="passwd2" class="form-control" required />
    </div>
    <div class="form-group" style="text-align: right">
      <input class="btn btn-primary" type="submit" value="관리자 비밀번호 변경" />
    </div>
  </form>
</div>

 

3. src/main/resources/mybatis-mapper/AdminMapper.xml에 다음을 추가합니다.

...    
    <select id="getAdmin" resultType="Admin">
        CALL SP_GET_ADMIN(#{id})
    </select>
...

 

4. src/main/java/com/tutorial/xyz/mapper/AdminMapper.java 파일에 다음을 추가한다. 위츼 XML파일을 사용하지 않으려면, @Select 어노테이션의 주석을 풀어주면 됩니다.

  // @Select("SELECT id, userid, password, nick FROM TB_ADMIN WHERE id = #{id}")
  // @Select("CALL SP_GET_ADMIN(#{id})")
  Admin getAdmin(@Param("id") Long id);

 

5. src/main/java/com/tutorial/xyz/controller/mgmt/AdminController.java 파일에 다음을 추가한다. URL에 포함된 변수값(id)을 받기 위해서 @PathVariable 어노테이션을 이용하였다.

  // 관리자 비밀번호 변경 폼
  @GetMapping("/admin/chg_passwd_form/{id}")
  public String chgPasswdForm(@PathVariable("id") Long id, Model model) {
    Admin admin = mapper.getAdmin(id);
    model.addAttribute("admin", admin);
    return "mgmt/admin/chg_passwd_form";
  }

 
6. 이제, 비밀번호변경 버튼을 클릭하면 비밀번호변경을 위한 모달 다이얼로그박스가 나타날 것이다.


7. 실제로 비밀번호를 변경하는 작업을 해보자. 우선 저장 프로시저 (SP_UPDATE_ADMIN_PASSWORD) 생성하자.

CREATE PROCEDURE SP_UPDATE_ADMIN_PASSWORD (
    i_id INT,
    i_password VARCHAR(255))
BEGIN
    UPDATE TB_ADMIN SET password = i_password WHERE id = i_id;
END




mysql> CALL SP_LIST_ADMIN();
+-----+---------+----------+-------+
| sno | userid  | password | nick  |
+-----+---------+----------+-------+
|   1 | testid1 | passwd1  | nick1 |
|   2 | testid2 | passwd2  | nick2 |
|   3 | testid3 | passwd3  | nick3 |
|   4 | testid4 | passwd4  | nick4 |
|   5 | testid5 | passwd5  | nick5 |
|   9 | testid6 | passwd6  | nick6 |
+-----+---------+----------+-------+
 
mysql> CALL SP_UPDATE_ADMIN_PASSWORD (1, 'passwd101');
 
mysql> CALL SP_LIST_ADMIN();
+-----+---------+-----------+-------+
| sno | userid  | password  | nick  |
+-----+---------+-----------+-------+
|   1 | testid1 | passwd101 | nick1 |
|   2 | testid2 | passwd2   | nick2 |
|   3 | testid3 | passwd3   | nick3 |
|   4 | testid4 | passwd4   | nick4 |
|   5 | testid5 | passwd5   | nick5 |
|   9 | testid6 | passwd6   | nick6 |
+-----+---------+-----------+-------+

 

8. src/main/resources/mybatis-mapper/AdminMapper.xml 파일에 다음을 추가한다. AdminMapper.java 에서 @Update 어노테이션을 사용하는 경우에는 설정하지 않아도 된다.

...
    <update id="updateAdminPassword">
        CALL SP_UPDATE_ADMIN_PASSWORD(#{id}, #{password})
    </update>
...

 

9. src/main/java/com/tutorial/xyz/mapper/AdminMapper.java 파일에 다음을 추가한다.

...
  // @Update("CALL SP_UPDATE_ADMIN_PASSWORD(#{id}, #{password})")
  int updateAdminPassword(@Param("id") Long id, @Param("password") String password);
...


10. src/main/java/com/tutorial/xyz/controller/mgmt/AdminController.java 파일에 다음을 추가한다. Form 값을 받아서 처리하는 방법이 여러가지가 있는데, 여기에서는 가장 간편한 @RequestParam 어노테이션을 이용하였다.

...
  // 관리자 비밀번호 수정
  @PostMapping("/admin/chg_passwd")
  public String chg_passwd(@RequestParam("id") Long id, @RequestParam("passwd1") String passwd1, @RequestParam("passwd2") String passwd2) {
    if(!passwd1.equals(passwd2)) {
      return "redirect:/mgmt/admin";
    }
    mapper.updateAdminPassword(id, passwd1);
    return "redirect:/mgmt/admin";
  }
...


11. 비밀번호를 변경해보고, DB의 내용이 잘 반영되었는지 확인해보자.

mysql> CALL SP_LIST_ADMIN();
+-----+---------+-----------+-------+
| sno | userid  | password  | nick  |
+-----+---------+-----------+-------+
|   1 | testid1 | passwd101 | nick1 |
|   2 | testid2 | passwd2   | nick2 |
|   3 | testid3 | passwd3   | nick3 |
|   4 | testid4 | passwd4   | nick4 |
|   5 | testid5 | passwd5   | nick5 |
|   9 | testid6 | passwd106 | nick6 |
+-----+---------+-----------+-------+



728x90
반응형