home.jsp 파일에 로그인이 되어 있는 상태에서만 할 수 있도록 회원 탈퇴 요청을 생성
<a href="user/secession"><h3 class="box-title">회원탈퇴</h3></a>
HomeController 클래스에 회원탈퇴 요청이 왔을 때 비밀번호 입력 페이지로 이동하는 메소드를 작성
@RequestMapping(value = "user/secession", method = RequestMethod.GET)
public String pwinput(Model model, HttpSession session) {
if (session.getAttribute("user") == null) {
return "redirect:user/login";
} else {
return "user/secession";
}
}
user 디렉토리에 비밀번호 입력 페이지(secession)를 생성하고 작성
user 디렉토리에 비밀번호 입력 페이지(secession)를 생성하고 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../include/header.jsp"%>
<div class="container">
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<div class="login-box well">
<form accept-charset="UTF-8" role="form" method="post"
action="secession">
<legend>비밀번호 입력</legend>
<div style='color: red'>${msg}</div>
<div class="form-group">
<label for="password">비밀번호 </label> <input type="password"
name="pw" id="pw" placeholder="비밀번호를 입력하세요" class="formcontrol" />
</div>
<div class="form-group">
<input type="submit"
class="btn btn-primary btn-login-submit btn-block m-t-md"
value="비밀번호 확인" />
</div>
<div class="form-group">
<a href="../" class="btn btn-success btn-block m-tmd">메인으로</a>
</div>
</form>
</div>
</div>
<div class="col-md-4"></div>
</div>
</div>
<%@ include file="../include/footer.jsp"%>
user.xml 파일에 회원탈퇴 처리를 위한 SQL을 작성
<!-- 회원탈퇴 처리를 위한 sql -->
<delete id="secession" parameterType="java.lang.String">
delete from springuser
where email = #{email}
</delete>
UserDao 클래스에 회원탈퇴 처리를 위한 메소드를 구현
public int secession(String email) {
return sqlSession.update("user.secession", email);
}
UserService 인터페이스에 회원탈퇴 처리를 위한 메소드를 선언
public int secession(HttpServletRequest request);
UserServiceImpl 클래스에 회원탈퇴 처리를 위한 메소드를 구현
@Override
public int secession(HttpServletRequest request) {
int result = -1;
String pw = request.getParameter("pw");
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
User loginUser = userDao.login(user);
if (loginUser != null) {
if (BCrypt.checkpw(pw, loginUser.getPw())) {
loginUser.setPw(null);
} else {
loginUser = null;
}
}
if (loginUser != null) {
result = userDao.secession(user.getEmail());
}
return result;
}
UserController 클래스에 회원탈퇴 처리를 위한 메소드를 구현
@RequestMapping(value = "user/secession", method = RequestMethod.POST)
public String secession(HttpServletRequest request, Model model, RedirectAttributes attr) {
int r = userService.secession(request);
if (r >= 0) {
request.getSession().removeAttribute("user");
attr.addFlashAttribute("secession", "success");
return "redirect:/";
} else {
attr.addFlashAttribute("msg", "비밀번호가 잘못되었습니다.");
return "redirect:secession";
}
}
home.jsp 파일에 회원탈퇴 처리 후 메시지를 출력하는 코드를 작성
<c:if test="${secession != null }">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(function() {
$("#dialog-update").dialog({
resizable : false,
height : "auto",
width : 400,
modal : true,
buttons : {
"닫기" : function() {
$(this).dialog("close");
},
}
});
});
</script>
</c:if>
<div id="dialog-update" title="회원탈퇴" style="display: none">
<p>
<span class="ui-icon ui-icon-alert" style="float: left; margin: 12px 12px 20px 0;"></span>
회원 탈퇴에 성공하셨습니다.
</p>
</div>