이번에는 관리자의 비밀번호를 변경해볼 것입니다. 이를 위해서 저장프로시저를 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 |
+-----+---------+-----------+-------+
'Framework (Backend) > SpringBoot' 카테고리의 다른 글
(SpringBoot) 관리자 삭제하기 : Spring Boot 2.x.x Web Tutorial (0) | 2021.11.22 |
---|---|
(SpringBoot) 관리자 수정하기 : Spring Boot 2.x.x Web Tutorial (0) | 2021.11.22 |
(SpringBoot) 관리자 추가하기 : Spring Boot 2.x.x Web Tutorial (0) | 2021.11.21 |
(SpringBoot) 관리자 목록 보여주기 : Spring Boot 2.x.x Web Tutorial (0) | 2021.11.19 |
Spring 프로젝트 생성하기 : Spring Boot 2.x.x Web Tutorial (0) | 2021.11.17 |