블로그 프로젝트 v1 - 게시글 상세보기 화면 권한 체크

Feb 21, 2024
블로그 프로젝트 v1 - 게시글 상세보기 화면 권한 체크

[ 상태 코드 401, 403 ]

notion image
💡
401 인증 안됨 403 권한 없음
출처 https://mangkyu.tistory.com/146
 

[ 문제 사항 ]

1. 화면을 보고 체크 해보자. - 인증 안됨 (401)

notion image
로그인이 안 되었는데 수정/삭제 버튼이 보인다. 고치자
 

2. 화면을 보고 체크 해보자. - 인증 안됨 (403)

notion image
지금 현재 ssar로 로그인 했는데, cos가 쓴 게시글에서 수정/삭제 버튼이 보인다. 고치자
 

3. BoardController 권한 체크(인증 포함)

notion image
notion image
 
notion image
이렇게하면 NullPointException이 터질 수 있다
💡
로그인을 안하고 들어오면 세션이 null이잖아. sessionUser에서 NullPointException이 터지겠지. 이 코드는 무조건 '로그인된 상태'에서 들어와야 함.
 

[ NullPointException 해결 ]

notion image
//내가 쓴 것 1
notion image
request.setAttribute() 메서드는 HttpServletRequest 객체에 데이터를 저장하기 위해 사용된다. 이는 컨트롤러에서 뷰로 데이터를 전달하기 위한 방법 "board/detail" 뷰 템플릿에서 ${board}와 ${pageOwner}라는 표현식을 사용하여 컨트롤러에서 설정한 "board"와 "pageOwner" 속성 값을 참조할 수 있다. 이 코드를 써서 머스태치에서 {board}, {pageOwner} 쓰는 것. 해시맵
 

notion image
//쌤 코드 2
 
💡
PK로 비교

 
notion image
//이렇게 짜도 되나…? 아무튼 try-catch로 묶는게 좋다
 
@GetMapping("/board/{id}") public String detail(@PathVariable int id, HttpServletRequest request) { // 1. 모델 진입 - 상세보기 데이터 가져오기 BoardResponse.DetailDTO responseDTO = boardRepository.findById(id); // 2. 페이지 주인 여부 체크 (board의 userId와 sessionUser의 id를 비교) User sessionUser = (User) session.getAttribute("sessionUser"); boolean pageOwner; if(sessionUser == null){ pageOwner = false; }else{ int 게시글작성자번호 = responseDTO.getUserId(); int 로그인한사람의번호 = sessionUser.getId(); pageOwner = 게시글작성자번호 == 로그인한사람의번호; } request.setAttribute("board", responseDTO); request.setAttribute("pageOwner", pageOwner); return "board/detail"; }
//쌤 코드 3
짜는 방법은 이렇게 다양하다. (여기 적힌 것만 3개...)
 

[ detail.mustache ]

notion image
 

 
notion image
if 로직까지 넣어주니까 로그인을 안 하면 수정/삭제 버튼이 안나온다.
 

 
notion image
ssar로 로그인하니 cos가 쓴 건 수정/삭제 버튼이 안나온다!
 

 
notion image
ssar로 로그인하니까 ssar로 쓴 게시물은 수정/삭제 버튼이 보인다
 
Share article

codingb