v6
★ PART · BOARD

안전한 게시판

회원과 게시판 — 읽기 자료

📍 지금 어디를 만지고 있나요?
브라우저
회원과 게시판
DB

핵심 용어

인증 (Authentication)누구인지 확인 (로그인).
인가 (Authorization)권한 확인 (이 사람이 이 작업을 할 수 있나?).
ALTER TABLE ADD COLUMN운영 중 테이블에 컬럼 추가. DEFAULT 절로 기존 row 도 채움.

1. 문제

전 차시까지의 답답함

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

2. 새 도구

ALTER ADD created_at + 인가

ALTER TABLE myboard ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP ② 작성자 문자열과 세션 사용자 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 — 실용 가능한 게시판.