Search
📙

#블로그만들기_13 #게시글 상세보기 화면 권한체크

상태 코드의 이해

401번 응답코드 → 인증 실패 403번 응답코드 → 권한 없음
HTTP응답 코드에 대해서 더 알아보실려면 여기를 클릭

현재 상태

현재 로그인이 되어있지 않은데 수정, 삭제 버튼이 보이는 상황 에러코드 401을 안내해주면 될 것 같다. → 인증 안됨
현재 로그인을 했는데, 다른 사람의 게시글에 수정, 삭제가 보이는 상황 에러코드 403을 안내해주면 된다. → 권한 없음

BoardController 권한 체크 (인증 포함)

게시물 주인 ID와 로그인 사용자 ID를 비교하여서 게시물의 수정 삭제 권한을 허가해줄 로직이 필요하다.
로그인 인증은 아주 자주 사용하니 생각안해도 할 수 있을 정도로 많이 반복해보자. 로직 처리 이후에 mustache 템플릿에 뿌려주는 문법도 잘 익혀야된다.
@RequiredArgsConstructor @Controller public class BoardController { private final BoardRepository boardRepository; private final HttpSession session; @GetMapping("/board/{id}") public String detail(@PathVariable int id, HttpServletRequest request) { // 모델에게 위임하고 상세데이터를 가져온다. BoardResponse.DetailDTO responseDTO = boardRepository.findById(id); // 현재 사용자가 로그인된 사용자인지 체크 (세션과 매칭하는지 체크) User sessionUser = (User) session.getAttribute("sessionUser"); boolean pageOwner; if (sessionUser == null){ //sessionUser에 값을 찾을 수 없다면 로그인하지 않은 사람 pageOwner = false; } else { // 게시물 주인 id와 session 사용자 id를 비교해서, 게시물의 수정 권한이 있는지 체크. int postOwnerId = responseDTO.getUserId(); int sessionUserId = sessionUser.getId(); pageOwner = postOwnerId == sessionUserId; } // mustache에서 아래 키워드와 매핑된 곳에 뿌려줌 request.setAttribute("pageOwner", pageOwner); // request가방에 담아서 화면에 렌더링할 수 있게해준다. // 아래 코드 예시로는 mustache에서 {{board}} 같이 문법을 쓰면 정보를 가져다 쓸 수 있다. request.setAttribute("board", responseDTO); return "board/detail"; }
Java
복사
Mustache 템플릿에 변수 매핑하는 법 매개변수로 HttpServletRequest request객체를 넣는다. 해당 메소드 스코프에서 request.setAttribute (”매핑키값”, 처리된 로직 변수) 로 설정한다. mustache템플릿 문법에 따라서 매핑키값을 호출해주면 로직처리를 자바에서 한 뒤에 다시 반환 해준다.

View 에 Mustache 반복문 적용

로긴사용자와 게시물 사용자가 일치 할 때만 수정, 삭제 버튼이 보이게 하면 된다. Mustache의 조건문을 적용해주면 가능하다. 아까 권한을 검증로직을 처리했던 변수는 pageOwner이다.
Mustache 조건문 {{#변수}}내용 {{/변수}} 이렇게 감싸주면 된다. {{#pageOwner}}내용{{/pageOwner}} <- 이렇게 적용할 것이다.
<!-- pageOwner가 참일경우에 아래 코드가 표시가 된다. --> {{#pageOwner}} <div class="d-flex justify-content-end"> <button class="btn btn-warning me-1">수정</button> <button class="btn btn-danger">삭제</button> </div> {{/pageOwner}}
HTML
복사
테스트 확인1 ssar로 로긴한 상태에서 cos의 게시물에 수정, 삭제를 할 수 없다.
테스트 확인2 ssar로 로그인한 상태에서 자신의 게시물을 수정/삭제 할 수 있다.