TIL 0702

먼지·2024년 7월 2일

Today I Learned

목록 보기
89/89
post-thumbnail

kr.spring.board.controller

Board controller

글 수정하기

@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";
	}

kr.spring.board.dao

Board Mapper

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);

Board Mapper XML

<!-- 게시글 수정하기 -->
	<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>

kr.spring.interceptor

Writer Check Interceptor

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;
	}
}

kr.spring.config

AppConfig

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");
	}


profile
Lucky Things🍀

0개의 댓글