logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

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

#블로그만들기_13 #게시글 상세보기 화면 권한체크
SpringWebApp
성훈 김
2024년 2월 9일
목차

1️⃣ 상태 코드의 이해

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

2️⃣ 현재 상태

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

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

💡
🔹 게시물 주인 ID와 로그인 사용자 ID를 비교하여서 게시물의 수정 삭제 권한을 허가해줄 로직이 필요하다.
notion image
notion image
 
 
 
💡
🔹 로그인 인증은 아주 자주 사용하니 생각안해도 할 수 있을 정도로 많이 반복해보자. 🔹 로직 처리 이후에 mustache 템플릿에 뿌려주는 문법도 잘 익혀야된다.
Java
@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";
    }
 
 
Mustache 템플릿에 변수 매핑하는 법 🔹 매개변수로 HttpServletRequest request객체를 넣는다. 🔹 해당 메소드 스코프에서 request.setAttribute (”매핑키값”, 처리된 로직 변수) 로 설정한다. 🔹 mustache템플릿 문법에 따라서 매핑키값을 호출해주면 로직처리를 자바에서 한 뒤에 다시 반환 해준다.
 
 

3️⃣ View 에 Mustache 반복문 적용

💡
🔹 로긴사용자와 게시물 사용자가 일치 할 때만 수정, 삭제 버튼이 보이게 하면 된다. 🔹 Mustache의 조건문을 적용해주면 가능하다. 🔹 아까 권한을 검증로직을 처리했던 변수는 pageOwner이다.
Mustache 조건문 🔹 {{#변수}}내용 {{/변수}} 이렇게 감싸주면 된다. 🔹 {{#pageOwner}}내용{{/pageOwner}} <- 이렇게 적용할 것이다.
HTML
<!-- 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}}
 
 
💡
테스트 확인1 🔹 ssar로 로긴한 상태에서 cos의 게시물에 수정, 삭제를 할 수 없다.
notion image
 
💡
테스트 확인2 🔹 ssar로 로그인한 상태에서 자신의 게시물을 수정/삭제 할 수 있다.
notion image