
@PostMapping("/board/update")
public String submitUpdate(@Valid BoardVO boardVO, BindingResult result, HttpSession session,HttpServletRequest request,Model model) throws IllegalStateException, IOException {
log.debug("<< 글 업데이트 >> : " + boardVO);
if(result.hasErrors()) {
// title, content 가 입력되지 않아서 유효성 체크에 걸리면 파일 정보를 잃어버린다.
BoardVO vo = boardService.selectBoard(boardVO.getBoard_num());
boardVO.setFilename(vo.getFilename());
return "boardModify";
}
BoardVO db_board = boardService.selectBoard(boardVO.getBoard_num());
boardVO.setFilename(FileUtil.createFile(request, boardVO.getUpload()));
// IP 세팅하기
boardVO.setIp(request.getRemoteAddr());
boardService.updateBoard(boardVO);
if(boardVO.getUpload() != null && !boardVO.getUpload().isEmpty()) {
FileUtil.removeFile(request, db_board.getFilename());
}
// UI 문구 처리
model.addAttribute("message","글 수정이 완료되었습니다.");
model.addAttribute("url", request.getContextPath()+"/board/detail?board_num="+boardVO.getBoard_num());
return "common/resultAlert";
}
@GetMapping("/board/delete")
public String submitDelete(long board_num, HttpServletRequest request, Model model) {
log.debug("<< 게시판 글 삭제 >> :" + board_num);
// db에 저장된 파일 정보 구하기
BoardVO db_board = boardService.selectBoard(board_num);
// 글 삭제
boardService.deleteBoard(board_num);
if(db_board.getFilename() != null) {
FileUtil.removeFile(request, db_board.getFilename());
}
// UI 문구 처리
model.addAttribute("message","글 수정이 완료되었습니다.");
model.addAttribute("url", request.getContextPath()+"/board/list");
return "common/resultAlert";
}
public List<BoardVO> selectList(Map<String, Object> map);
public Integer selectRowCount(Map<String, Object> map); // integer, int 상관 없음
public void insertBoard(BoardVO board);
@Select("SELECT * FROM spboard JOIN spmember USING(mem_num) LEFT OUTER JOIN spmember_detail USING(mem_num) WHERE board_num=#{board_num}")
public BoardVO selectBoard(Long board_num);
@Update("UPDATE spboard SET hit=hit+1 WHERE board_num=#{board_num}")
public void updateHit(Long board_num);
public void updateBoard(BoardVO board);
@Delete("DELETE FROM spboard WHERE board_num=#{board_num}")
public void deleteBoard(Long board_num);
@Update("UPDATE spboard SET filename='' WHERE board_num=#{board_num}")
public void deleteFile(Long board_num);
<!-- 게시글 수정하기 -->
<update id="updateBoard" parameterType="boardVO">
UPDATE spboard SET
<if test="filename != null">
filename = #{filename},
</if>
title =#{title},
content = #{content},
ip = #{ip},
modify_date = SYSDATE
WHERE board_num = #{board_num}
</update>
package kr.spring.interceptor;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import kr.spring.board.service.BoardService;
import kr.spring.board.vo.BoardVO;
import kr.spring.member.vo.MemberVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WriterCheckInterceptor implements HandlerInterceptor{
@Autowired
private BoardService boardService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
log.debug("<< 로그인 회원 번호와 작성자 회원 번호 일치 여부 체크 >>");
// 로그인 회원 번호 구하기
HttpSession session = request.getSession();
MemberVO user = (MemberVO)session.getAttribute("user");
// 작성자 회원 번호 구하기 - input hidden 이걸로 보낸 board_num을 이용한다
long board_num = Long.parseLong(request.getParameter("board_num"));
BoardVO board = boardService.selectBoard(board_num);
if(user != null) {
log.debug("<< 로그인 회원 번호 >>" + user.getMem_num());
log.debug("<< 작성자 회원 번호 >>" + board.getMem_num());
}
// 로그인 회원번호와 작성자 회원 번호 일치 여부 체크
if(user == null || user.getMem_num() != board.getMem_num()) {
log.debug("<< 로그인 회원 번호와 작성자 회원 번호 불일치 >>");
request.setAttribute("accessMsg", "로그인 아이디와 작성자 아이디 불일치 ");
request.setAttribute("accessBtn", "게시판 목록");
request.setAttribute("accessUrl", request.getContextPath()+"/board/list");
// forward 방식으로 화면 호출하기
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/common/notice.jsp");
dispatcher.forward(request, response);
return false;
}
log.debug("<< 로그인 회원번호와 작성자 회원번호 일치 >>");
return true;
}
}
writer Check 추가해주기
private WriterCheckInterceptor writerCheck;
@Bean
public WriterCheckInterceptor interceptor4() {
writerCheck = new WriterCheckInterceptor();
return writerCheck;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// Writer Check Interceptor 설정하기
registry.addInterceptor(writerCheck).addPathPatterns("/board/update")
.addPathPatterns("/board/delete");
}

