[Spring] 인터셉터 활용하기 3 권한 체크

류재성's avatar
Mar 20, 2024
[Spring] 인터셉터 활용하기 3 권한 체크
 
notion image
 
현재 4번 게시글의 작성자는 love 이다. 다른 아이디 ssar 로 로그인 후 /board/4/update-form 주소를 넣으면 수정하기 페이지가 들어가진다.
 
notion image
 
이것을 인터셉터를 활용해 막아보자.
 

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+}"); } }
 
 
notion image
 
게시글을 들어갔을 때 권한 없음 페이지가 뜬다.
Share article
RSSPowered by inblog