탈퇴 또는 수정할 때 본인이 맞는지 비밀번호를 한번더 확인하는 과정 필요
input 태그의 disabled 속성 : 화면에 나타나지만 전송될 때는 제외시킴
remove.jsp
<!-- Forms -->
<div class="row">
<h4 class="center-align">회원탈퇴</h4>
<hr style="margin-bottom: 50px;">
<form id="frm" class="col s12 l6 offset-l3" action="/member/remove" method="post">
<div class="row">
<div class="input-field col s12">
<i class="material-icons prefix">assignment_ind</i> <input type="text" value="${memberVO.id}" id="member_id" class="validate" **disabled**> <label for="member_id">아이디</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<i class="material-icons prefix">lock</i> <input type="password" name="passwd" id="password" class="validate"> <label for="password">비밀번호</label>
</div>
</div>
<div class="row center-align">
<button type="submit" class="btn waves-effect waves-light">
탈퇴하기 <i class="material-icons right">directions_run</i>
</button>
</div>
</form>
</div>
<!-- end of Forms -->
// in remove.jsp
<script>
var frm = document.querySelector('#frm');
frm.addEventListener('submit', function(event) {
// 기본동작이 있는 대표적인 태그 2개 : a 태그, form 태그
event.preventDefault(); // 기본동작 막기
var isRemove = confirm('정말 회원탈퇴 하시겠습니까?'); // yes - true, no - false
if (!isRemove) { // isRemove == false
return;
}
frm.submit(); // 액션 속성을 요청함
});
</script>
memberController.java
// 회원탈퇴
@GetMapping("/member/remove")
public String remove() {
// 회원탈퇴 폼으로 보내버리기~.~
// 클릭하자마자 삭제해줄 수도 있지만 보안상 한번더 거치기(본인확인)
// 본인확인 -> 패스워드 입력
return "member/remove";
}
@PostMapping("/member/remove")
public ResponseEntity<String> remove(String passwd, HttpSession session) {
MemberVO memberVO = (MemberVO) session.getAttribute("memberVO");
boolean isSamePasswd = BCrypt.checkpw(passwd, memberVO.getPasswd());
// 회원정보 불일치하는 경우
if (!isSamePasswd) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/html; charset=utf-8"); // == setContentType
String str = Script.back("패스워드가 일치하지 않습니다!");
return new ResponseEntity<String>(str, headers, HttpStatus.OK);
}
// 회원탈퇴 (삭제) 처리
memberService.removeMemberById(memberVO.getId()); // 테이블 레코드 삭제
**session.invalidate(); // 세션도 날려야함**
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/html; charset=utf-8");
String str = Script.href("회원탈퇴가 정상적으로 처리 되었습니다.", "/");
return new ResponseEntity<String>(str, headers, HttpStatus.OK);
}