[스프링 게시판] 회원가입 기능5
1. 로그인 상태에서 작성자=닉네임으로 고정
<div class="form-group">
<label>작성자</label>
<c:choose>
<c:when test="${login == null}">
<input type="text" name="writer" class="form-control" placeholder="이름을 입력하세요">
</c:when>
<c:when test="${login != null}">
<input type="text" name="writer" class="form-control" placeholder="${login.nickname}" value="${login.nickname}" readonly>
</c:when>
</c:choose>
</div>
로그인 상태에서 작성자를 고정시켜주기 위해 write.jsp를 수정해주었다. 그리고 로그인,회원가입,글 작성 등을 할 때 필수입력란(제목,작성자,아이디 등)에는 required 태그를 달아주어 반드시 입력하도록 해주었다.
2. 마이페이지 구현
로그인 한 사람의 간단한 회원 정보를 확인하고 수정, 탈퇴할 수 있는 마이페이지를 만들 것이다.
먼저 마이페이지를 보여줄 jsp파일을 만들고, 주소를 받아줄 get 메소드를 컨트롤러에 만들어주었다. 그리고 상단바에서 본인의 닉네임을 클릭하면 마이페이지 화면으로 이동하도록 해주었다.
//MemberController.java
//마이페이지
@RequestMapping(value="/mypage", method = RequestMethod.GET)
public void getMypage() throws Exception{
}
//nav.jsp
<a href="/member/mypage">${login.nickname}님</a>
//mypage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>my page</title>
<link rel="stylesheet"
href="${pageContext.request.contextPath}/resources/css/sb-admin-2.css">
</head>
<body>
<div id="nav">
<%@ include file="../include/nav.jsp"%>
</div>
<table class>
<tr>
<td>아이디</td>
<td>${login.id}</td>
</tr>
<tr>
<td>닉네임</td>
<td>${login.nickname}</td>
</tr>
</table>
<a>회원 탈퇴</a><br/>
<a>회원 정보 수정</a>
</body>
</html>
이제 로그인을 하면 상단 바에 홈/ 글작성/ 닉네임/ 로그아웃 메뉴가 보이며, 닉네임을 누르면 마이페이지로 이동한다. 마이페이지에서는 아이디와 닉네임을 확인할 수 있으며 회원 탈퇴와 정보 수정 기능은 아직 구현하지 않았기 때문에 동작하지 않는다.
3. 탈퇴 기능 구현
구상: 마이페이지 화면에서 회원 탈퇴 메뉴를 누르면 회원 탈퇴 페이지로 이동한다. 본인 확인을 위해 비밀번호를 입력받고, 입력받은 비밀번호가 회원 정보와 일치하지 않으면 그러한 메세지를 출력하고, 일치하면 회원 탈퇴를 진행한다. 탈퇴한 회원의 정보는 DB에서 삭제되며 로그아웃된다.
mapper 작성
<delete id="withdrawal" parameterType="com.board.domain.MemberVO">
delete from tbl_member
where id=#{id}
</delete>
memberDAO,memberDAOImpl 작성
//회원탈퇴
public void withdrawal(MemberVO vo) throws Exception;
//회원 탈퇴
@Override
public void withdrawal(MemberVO vo) throws Exception {
sql.delete(namespace+".withdrawal", vo);
}
MemberService, MemberServiceImpl 작성
//회원 탈퇴
public void withdrawal(MemberVO vo)throws Exception;
@Override
public void withdrawal(MemberVO vo) throws Exception {
dao.withdrawal(vo);
}
MemberController에 GET메소드작성
//회원탈퇴
@RequestMapping(value="withdrawal", method= RequestMethod.GET)
public void getWithdrawal() throws Exception{
}
withdrawal.jsp 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 탈퇴</title>
<link rel="stylesheet"
href="${pageContext.request.contextPath}/resources/css/sb-admin-2.css">
</head>
<body>
<div id="nav">
<%@ include file="../include/nav.jsp"%>
</div>
<form method="post" class="form-horizontal" autocomplete="off">
<div class="form-group">
<label>아이디</label>
<label>${login.id}</label>
</div>
<div class="form-group">
<label>비밀번호</label>
<input type="password" name="passwd" id="passwd" required>
</div>
<button type="submit" class="btn btn-primary">회원 탈퇴</button>
<a href="/member/mypage">취소</a>
</form>
<c:if test="${msg==false}">
<p>비밀번호가 다릅니다.</p>
</c:if>
</body>
</html>
memberController에 POST 메소드 작성
//회원탈퇴
@RequestMapping(value="/withdrawal", method= RequestMethod.POST)
public String submitWithdrawal(HttpSession session, MemberVO vo, RedirectAttributes rttr) throws Exception{
MemberVO member = (MemberVO)session.getAttribute("login");
String origPass = member.getPasswd();
String inputPass = vo.getPasswd();
if(!(inputPass.equals(origPass))) {
rttr.addFlashAttribute("msg",false);
return "redirect:/member/withdrawal";
}
service.withdrawal(member);
session.setAttribute("login", null);
return "redirect:/";
}
폼에서 입력받은 비밀번호와, 현재 로그인중인 회원의 비밀번호를 비교하여 같으면 회원 탈퇴를 진행하고, 다르면 다르다는 메세지를 보낸다. 현재 로그인 중인 회원의 정보는 세션에 담긴 값을 가져와 확인할 수 있다.
RedirectAttributes에 메세지를 담아, 리다이렉트할 때 메세지를 화면 쪽으로 전달한다.
이렇게 회원 탈퇴 화면에서 잘못된 비밀번호를 입력하면 비밀번호가 다르다는 메세지가 출력되며, 올바른 비밀번호를 입력하면 로그아웃되며 회원 정보가 사라진다.
Author And Source
이 문제에 관하여([스프링 게시판] 회원가입 기능5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@syhwang4223/스프링-게시판-회원가입-기능5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)