[Spring Boot 게시판] 28일차

김정현·2022년 11월 7일
0

SPRINGBOOT게시판

목록 보기
28/36

1. 댓글 수정 기능 처리, ReplyModify__submitForm() 오류 수정

1) ReplyController

	@RequestMapping("/usr/reply/doModify")
	@ResponseBody
	public String doModify(int id, String body, String replaceUri) {
		if (Ut.empty(id)) {
			return rq.jsHistoryBack("id가 없습니다");
		}
		if (Ut.empty(body)) {
			return rq.jsHistoryBack("내용을 입력해주세요");
		}
		Reply reply = replyService.getForPrintReply(rq.getLoginedMember(), id);

		if (reply == null) {
			return rq.jsHistoryBack(Ut.f("%d번 댓글은 존재하지 않습니다", id));
		}

		if (reply.isExtra__actorCanModify() == false) {
			return rq.jsHistoryBack("해당 댓글을 삭제할 권한이 없습니다");
		}

		ResultData modifyReplyRd = replyService.modifyReply(id,body);

		if (Ut.empty(replaceUri)) {
			switch (reply.getRelTypeCode()) {
			case "article":
				replaceUri = Ut.f("../article/detail?id=%d", reply.getRelId());
				break;
			}
		}
		return rq.jsReplace(modifyReplyRd.getMsg(), replaceUri);
	}
  • 이전 작성했던 수정 폼에서 데이터를 전송받아
  • 댓글 삭제와 동일하게 권한 체크 후 댓글 수정

2) ReplyRepository

	@Update("""
			UPDATE reply
			SET updateDate = NOW(),
			`body` = #{body}
			WHERE id = #{id}
			""")
	void modifyReply(int id, String body);
  • 댓글을 DB에 업데이트 하는 쿼리문

2. 마이페이지(View)

myPage.jsp

<section class="mt-8 text-xl">
		<div class="container mx-auto px-3">
			<div class="table-box-type-1">
				<table>
						~~~ 생략 ~~~
							<th>이메일</th>
							<td>${rq.loginedMember.email }</td>
						</tr>
						<tr>
							<th></th>
							<td>
								<a href="../member/checkPassword" class="btn btn-active btn-ghost">회원정보 수정 </a>
								<button class="btn-text-link btn btn-active btn-ghost" type="button" onclick="history.back();">뒤								로가기</button>
							</td>
						</tr>
					</tbody>
  • ../member/myPage로 접근시 보여지는 뷰로 로그인된 회원의 정보를 보여줌
  • NeedLoginInterceptor에 위의 uri를 추가하여 로그인된 상태에서만 접근이 가능하게함
  • 회원 정보 수정 버튼 클릭시 바로 회원정보 수정 페이지로 이동이 아닌 비밀번호를 확인하는 페이지로 이동

3. 인터셉터 추가(login,logout), checkPassword, doCheckPassword 추가(회원정보 수정전 비밀번호 체크)

1) MyWebMvcConfigurer

	registry.addPathPatterns("/usr/reactionPoint/doGoodReaction")
            .addPathPatterns("/usr/reactionPoint/doBadReaction")
            .addPathPatterns("/usr/reactionPoint/doCancelGoodReaction")
            .addPathPatterns("/usr/reactionPoint/doCancelBadReaction")
            .addPathPatterns("/usr/reply/doWrite")
            .addPathPatterns("/usr/reply/doDelete")
            .addPathPatterns("/usr/reply/modify")
            .addPathPatterns("/usr/reply/doModify")
            .addPathPatterns("/usr/member/myPage")
            .addPathPatterns("/usr/member/doLogout");
	
	registry.addInterceptor(needLogoutInterceptor)
				.addPathPatterns("/usr/member/login")
				.addPathPatterns("/usr/member/doLogin")
				.addPathPatterns("/usr/member/doJoin");
  • 로그인 상태 / 로그아웃 상태에 따라 uri 접근을 막는 인터셉터 추가

2) 회원정보 수정 전 비밀번호 체크

	@RequestMapping("/usr/member/checkPassword")
	public String showCheckPassword() {		
		return "usr/member/checkPassword";
	}
	
	@RequestMapping("/usr/member/doCheckPassword")
	public String doCheckPassword(String loginPw, String replaceUri) {		
		if(Ut.empty(loginPw)) {
			return rq.jsHistoryBackOnView("비밀번호를 입력하세요.");			
		}

		if(rq.getLoginedMember().getLoginPw().equals(loginPw)==false) {
			return rq.jsHistoryBackOnView("비밀번호가 일치하지 않습니다.");	
		}				
		return "usr/member/modify";
	}
  • myPage에서 회원 번호 수정버튼을 클릭시 /usr/member/checkPassword로 이동하여 먼저 비밀번호 입력 뷰를 보여준다.

  • 비밀번호 입력 뷰에서 입력된 비밀번호와 replaceUri를 /usr/member/doCheckPassword 로 전송하여 비밀번호 체크 후 회원정보 수정뷰로 이동

0개의 댓글