
현재 4번 게시글의 작성자는 love 이다. 다른 아이디 ssar 로 로그인 후 /board/4/update-form 주소를 넣으면 수정하기 페이지가 들어가진다.

이것을 인터셉터를 활용해 막아보자.
1. 인터셉터 클래스 만들기
public class ForbiddenInterceptor implements HandlerInterceptor {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HttpSession session = request.getSession();
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = (Board) request.getAttribute("board");
if (sessionUser.getId()!=board.getUser().getId()){
throw new Exception403("권한이 없습니다");
}
}
}
HandlerInterceptor를 구현한 후에 postHandle 를 오버라이드한다.
게시글을 들어간 이후에 board 데이터가 request 객체에 담기기 때문에 postHandle 를 사용한다.
2. Configuration 만들기
@Configuration // ioc 등록
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 인증 체크
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/board/**","/user/**")
.excludePathPatterns("/board/{id:\\d+}");
// 권한 체크
registry.addInterceptor(new ForbiddenInterceptor())
.addPathPatterns("/board/{id:\\d+}/**")
.excludePathPatterns("/board/{id:\\d+}");
}
}

게시글을 들어갔을 때 권한 없음 페이지가 뜬다.
Share article