728x90
반응형
게시판 글 저장, 수정, 삭제 시 로그인한 사용자의 아이디를 가져와서 글쓴이 아이디와 글수정 아이디로 설정합니다.
BoardController
글 쓰기 페이지 요청, 글 저장 요청, 글 수정 요청, 글 삭제 요청을 처리하는 컨트롤러 메서드에 로그인한 사용자 정보를 세션에서 가져와서 사용자 ID를 추출해서 글쓴이 ID 또는 글수정 ID로 설정합니다.
package board.controller;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import board.dto.BoardDto;
import board.dto.UserDto;
import board.service.BoardService;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class BoardController {
// private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private BoardService boardService;
// (로그인 기능 구현 전) 테스트를 위해 사용자 정보를 세션에 저장
private void makeSessionForTest(HttpSession session) {
UserDto userDto = new UserDto();
userDto.setUserId("tester");
userDto.setUserName("테스터");
userDto.setUserEmail("tester@test.com");
session.setAttribute("user", userDto);
}
@GetMapping("/board/openBoardList.do")
public ModelAndView openBoardList() throws Exception {
ModelAndView mv = new ModelAndView("/board/boardList");
List<BoardDto> list = boardService.selectBoardList();
mv.addObject("list", list);
return mv;
}
@GetMapping("/board/openBoardWrite.do")
public String openBoardWrite(HttpSession session) throws Exception {
// 테스트를 위한 것으로 사용자 정보를 세션에 저장
// 로그인 기능이 구현되면 추가할 필요가 없음
makeSessionForTest(session);
return "/board/boardWrite";
}
@PostMapping("/board/insertBoard.do")
public String insertBoard(BoardDto boardDto, HttpSession session) throws Exception {
// 글쓴이 아이디를 세션에서 가져와서 저장
UserDto userDto = (UserDto)session.getAttribute("user");
boardDto.setCreatedId(userDto.getUserId());
boardService.insertBoard(boardDto);
return "redirect:/board/openBoardList.do";
}
@GetMapping("/board/openBoardDetail.do")
public ModelAndView openBoardDetail(@RequestParam int boardIdx) throws Exception {
ModelAndView mv = new ModelAndView("/board/boardDetail");
BoardDto boardDto = boardService.selectBoardDetail(boardIdx);
mv.addObject("board", boardDto);
return mv;
}
@PostMapping("/board/updateBoard.do")
public String updateBoard(BoardDto boardDto, HttpSession session) throws Exception {
// 글쓴이 아이디를 세션에서 가져와서 저장
UserDto userDto = (UserDto)session.getAttribute("user");
boardDto.setUpdatedId(userDto.getUserId());
boardService.updateBoard(boardDto);
return "redirect:/board/openBoardList.do";
}
@PostMapping("/board/deleteBoard.do")
public String deleteBoard(BoardDto boardDto, HttpSession session) throws Exception {
// 글삭제 아이디를 세션에서 가져와서 저장
UserDto userDto = (UserDto)session.getAttribute("user");
boardDto.setUpdatedId(userDto.getUserId());
boardService.deleteBoard(boardDto.getBoardIdx());
return "redirect:/board/openBoardList.do";
}
}
boardWrite.html
세션에 저장된 사용자 정보(이름과 아이디)를 [[${session.세션객체이름.필드이름}]] 형식으로 화면에 출력합니다.
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>게시판</title>
<link rel="stylesheet" th:href="@{/css/style.css}" />
</head>
<body>
<div class="container">
<h2>게시판 등록</h2>
<form action="/board/insertBoard.do" method="POST" id="frm" name="frm">
<table class="board_detail">
<tr>
<td>글쓴이</td>
<!-- 로그인한 사용자 이름과 아이디를 세션에서 가져와 출력 -->
<td>[[${session.user.userName}]] ([[${session.user.userId}]])</td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" id="title" name="title" /></td>
</tr>
<tr>
<td colspan="2"><textarea id="contents" name="contents"></textarea></td>
</tr>
</table>
<input type="submit" id="submit" value="저장" class="btn" />
</form>
</div>
</body>
</html>
sql-board.xml
글쓴이ID와 글수정ID를 BoardDto 객체의 createdId 필드와 updatedId 필드의 값을 사용하도록 쿼리를 수정합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="board.mapper.BoardMapper">
<select id="selectBoardListForSample" resultType="board.dto.BoardDto">
select board_idx, title, hit_cnt,
date_format(created_dt, '%Y-%m-%d %H:%i:%s') as created_dt
from t_board
where deleted_yn = 'N'
order by board_idx desc
limit 4;
</select>
<select id="selectBoardList" resultType="board.dto.BoardDto">
select board_idx, title, hit_cnt,
date_format(created_dt, '%Y-%m-%d %H:%i:%s') as created_dt
from t_board
where deleted_yn = 'N'
order by board_idx desc
</select>
<insert id="insertBoard" parameterType="board.dto.BoardDto">
insert into t_board (title, contents, created_dt, created_id)
values ( #{title}, #{contents}, now(), #{createdId} )
</insert>
<update id="updateHitCount" parameterType="int">
update t_board
set hit_cnt = hit_cnt + 1
where board_idx = #{boardIdx}
</update>
<select id="selectBoardDetail" parameterType="int" resultType="board.dto.BoardDto">
select board_idx, title, contents, hit_cnt,
date_format(created_dt, '%Y-%m-%d %H:%i:%s') as created_dt,
created_id
from t_board
where deleted_yn = 'N' and board_idx = #{boardIdx}
</select>
<update id="updateBoard" parameterType="board.dto.BoardDto">
update t_board
set title = #{title},
contents = #{contents},
updated_dt = now(),
updated_id = #{updatedId}
where board_idx = #{boardIdx}
</update>
<delete id="deleteBoard" parameterType="int">
update t_board
set deleted_yn = 'Y',
updated_dt = now(),
updated_id = #{updatedId}
where board_idx = #{boardIdx}
</delete>
</mapper>
테스트
글쓰기 페이지에 로그인한 사용자의 이름과 아이디가 출력되는 것을 확인합니다.
상세 페이지에 작성자 항목이 정상적으로 출력되는 것을 확인합니다.
728x90
반응형
'수업자료' 카테고리의 다른 글
20230126 실습내용 (0) | 2023.01.26 |
---|---|
페이징 기능 추가 (0) | 2023.01.17 |
로그인, 로그아웃 기능 추가 (0) | 2023.01.11 |
20230110 실습내용 (0) | 2023.01.10 |
20230106 실습내용 (0) | 2023.01.06 |
댓글