★ PART · BOARD

안전한 게시판

Spring 기초
SMHRD

학습 목표

1. 문제

v5 의 두 가지 답답함 — ① 누구나 남의 글을 수정·삭제 가능. ② myboard 에 작성일 컬럼이 없어 「언제 쓴 글인지」 표시할 수 없음.

2. 새 도구

ALTER ADD created_at + 인가: 운영 중인 myboard 에 created_at 컬럼을 ADD. DEFAULT CURRENT_TIMESTAMP 로 기존 row 도 채움. 이어서 작성자 문자열과 세션 ID 비교로 본인 확인.

3. 코드

-- 스키마 진화 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>

4. 정리

5. Before / After

전 차시

v5 의 위험 — 누구나 남의 글을 수정·삭제 가능. 본인 확인이 필요.

이번 차시

본인 글만 수정·삭제 가능. v6 — 실용 가능한 게시판.

학습 확인 체크리스트