...
// 회원 탈퇴
@PostMapping("/secession")
public String secession(String memberPw
, @SessionAttribute("loginMember") Member loginMember
, RedirectAttributes ra
, SessionStatus status
, HttpServletResponse resp) {
// String memberPw : 입력한 비밀번호
// SessionStatus status : 세션 관리 객체
// HttpServletResponse resp : 서버 -> 클라이언트 응답하는 방법 제공 객체
// RedirectAttributes ra : 리다이렉트 시 request로 값 전달하는 객체
// 1. 로그인한 회원의 회원 번호 얻어오기
// @SessionAttribute("loginMember") Member loginMember
int memberNo = loginMember.getMemberNo();
// 2. 회원 탈퇴 서비스 호출
// - 비밀번호가 일치하면 MEMBER_DEL_FL -> 'Y'로 바꾸고 1 반환
// - 비밀번호가 일치하지 않으면 -> 0 반환
int result = service.secession(memberPw, memberNo);
String path = "redirect:";
String message = null;
// 3. 탈퇴 성공 시
if(result > 0) {
// - message : 탈퇴되었습니다.
message = "탈퇴되었습니다.";
// - 메인 페이지로 리다이렉트
path += "/";
// - 로그아웃
status.setComplete();
// + 쿠키 삭제
Cookie cookie = new Cookie("saveId", "");
// 같은 쿠키가 이미 존재하면 덮어쓰기 된다.
cookie.setMaxAge(0); // 0초 생존 -> 삭제
cookie.setPath("/"); // 요청 시 쿠키가 첨부되는 경로
resp.addCookie(cookie); // 요청 객체를 통해서 클라이언트에게 전달
// -> 클라이언트 컴퓨터에 파일로 생성
// 4. 탈퇴 실패 시
} else {
// - message : 현재 비밀번호가 일치하지 않습니다.
message = "현재 비밀번호가 일치하지 않습니다.";
// - 회원 탈퇴 페이지로 리다이렉트
path += "secession";
}
ra.addFlashAttribute("message", message);
return path;
}
...
...
/** 회원 탈퇴 서비스
* @param memberPw
* @param memberNo
* @return result
*/
int secession(String memberPw, int memberNo);
...
...
// 회원 탈퇴 서비스
@Transactional(rollbackFor = {Exception.class})
@Override
public int secession(String memberPw, int memberNo) {
// 1. 회원 번호가 일치하는 회원의 비밀번호 조회
String encPw = dao.selectEncPw(memberNo);
// 2. 비밀번호가 일치하면
if(bcrypt.matches(memberPw, encPw)) {
// MEMBER_DEL_FL -> 'Y'로 바꾸고 1 반환
return dao.secession(memberNo);
}
return 0;
}
...
...
/** 회원 탈퇴
* @param memberNo
* @return result
*/
public int secession(int memberNo) {
// sqlSessionTemplate : 마이바티스 + DBCP + close 자동 + 트랜잭션 처리
return sqlSession.update("myPageMapper.secession", memberNo);
}
...
...
<!-- 회원 탈퇴 -->
<update id="secession" parameterType="_int">
UPDATE MEMBER SET
MEMBER_DEL_FL = 'Y'
WHERE MEMBER_NO = #{memberNo}
</update>
...
비밀번호 input 창에 현재 비밀번호를 작성하고,
'위 약관에 동의합니다' 체크박스를 체크한 뒤 '탈퇴' 버튼을 클릭하면 회원 탈퇴가 정상적으로 진행된다. 😉