[ 상태 코드 401, 403 ]
401 인증 안됨
403 권한 없음
출처 https://mangkyu.tistory.com/146
[ 문제 사항 ]
1. 화면을 보고 체크 해보자. - 인증 안됨 (401)
로그인이 안 되었는데 수정/삭제 버튼이 보인다. 고치자
2. 화면을 보고 체크 해보자. - 인증 안됨 (403)
지금 현재 ssar로 로그인 했는데, cos가 쓴 게시글에서 수정/삭제 버튼이 보인다. 고치자
3. BoardController 권한 체크(인증 포함)
이렇게하면 NullPointException이 터질 수 있다
로그인을 안하고 들어오면 세션이 null이잖아.
sessionUser에서 NullPointException이 터지겠지.
이 코드는 무조건 '로그인된 상태'에서 들어와야 함.
[ NullPointException 해결 ]
//내가 쓴 것 1
request.setAttribute() 메서드는 HttpServletRequest 객체에 데이터를 저장하기 위해 사용된다. 이는 컨트롤러에서 뷰로 데이터를 전달하기 위한 방법 "board/detail" 뷰 템플릿에서 ${board}와 ${pageOwner}라는 표현식을 사용하여 컨트롤러에서 설정한 "board"와 "pageOwner" 속성 값을 참조할 수 있다. 이 코드를 써서 머스태치에서 {board}, {pageOwner} 쓰는 것. 해시맵
//쌤 코드 2
PK로 비교
//이렇게 짜도 되나…? 아무튼 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 ]
if 로직까지 넣어주니까 로그인을 안 하면 수정/삭제 버튼이 안나온다.
ssar로 로그인하니 cos가 쓴 건 수정/삭제 버튼이 안나온다!
ssar로 로그인하니까 ssar로 쓴 게시물은 수정/삭제 버튼이 보인다
Share article