회원과 게시판 — 읽기 자료
v5 의 두 가지 답답함 — ① 누구나 남의 글을 수정·삭제 가능. ② myboard 에 작성일이 없어 「언제 쓴 글인지」 표시할 수 없음.
① ALTER TABLE myboard ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP ② 작성자 문자열과 세션 사용자 ID 비교.
-- 스키마 변경
ALTER TABLE myboard
ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP;
// com.smhrd.domain.Board (createdAt 필드 합류)
@Data @AllArgsConstructor @NoArgsConstructor
public class Board {
private int num;
private String title;
private String writer;
private String content;
private LocalDateTime createdAt; // ← v6 추가
}
@PostMapping("/board/update")
public String update(Board b, HttpSession session) {
Member u = (Member) session.getAttribute("loginUser");
Board original = service.selectOne(b.getNum());
// 본인 확인 (인가)
if (!original.getWriter().equals(u.getId())) {
return "redirect:/board/view?num=" + b.getNum() + "&err=forbidden";
}
service.update(b, u.getId());
return "redirect:/board/view?num=" + b.getNum();
}
@PostMapping("/board/delete")
public String delete(@RequestParam int num, HttpSession session) {
Member u = (Member) session.getAttribute("loginUser");
Board original = service.selectOne(num);
if (!original.getWriter().equals(u.getId())) {
return "redirect:/board/view?num=" + num + "&err=forbidden";
}
service.delete(num, u.getId());
return "redirect:/board/list";
}
<!-- view.jsp 에서 -->
<p>작성자: ${board.writer} | 작성일: ${board.createdAt}</p>
<c:if test="${board.writer == sessionScope.loginUser.id}">
<a href="/board/edit?num=${board.num}">수정</a>
<form action="/board/delete" method="post" style="display:inline;">
<input type="hidden" name="num" value="${board.num}">
<button>삭제</button>
</form>
</c:if>
ALTER ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMPwriter.equals(u.getId())v5 의 위험 — 누구나 남의 글을 수정·삭제 가능. 본인 확인이 필요.
본인 글만 수정·삭제 가능. v6 — 실용 가능한 게시판.