24. 인터셉터v4

송민경's avatar
Mar 15, 2024
24. 인터셉터v4

1. Interceptor

notion image

1) 정의

  • 스프링 MVC에서 컨트롤러가 요청을 처리하기 전이나 후에 실행되는 코드 조각
  • 요청 전처리나 후처리 작업을 수행하거나, 특정 조건에 따라 요청을 중단시키는 등의 역할
  • 컨트롤러에 직접 적용되는 필터와 유사하지만 세밀한 작업을 수행

2) 작업

  • 인증 및 권한 확인 : 사용자의 인증 여부를 확인, 사용자가 요청한 작업에 대한 권한 확인
  • 요청 전처리 및 후처리 : 요청이 컨트롤러에 도달하기 전에 특정 작업을 수행
or 컨트롤러가 요청을 처리한 후에 추가적인 작업을 수행
  • 로깅 및 모니터링 : 요청과 응답에 대한 정보를 기록
or 시스템의 상태를 모니터링하는 등의 작업을 수행
  • 캐시 제어 : 요청에 대한 캐시를 확인, 캐시를 사용할지 여부를 결정

3) 메소드

  • preHandle() : 컨트롤러가 요청을 처리하기 전에 실행되는 메소드
요청을 중단시키고 싶을 경우 false를 반환 (session이 없을 때)
  • postHandle() : 컨트롤러가 요청을 처리한 후에 실행되는 메소드
view가 렌더링되기 전에 수행, 주로 모델에 데이터를 추가하거나 로깅을 수행
  • afterCompletion() : 뷰가 렌더링된 후에 실행되는 메소드
요청을 처리하는 동안 발생한 예외 등의 정리 작업을 수행

2. Interceptor 적용하기

notion image
 
  • LoginInterceptor 를 HandlerInterceptor를 implements해서 만들기
package shop.mtcoding.blog._core.intercepter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import org.springframework.web.servlet.HandlerInterceptor; import shop.mtcoding.blog._core.errors.exception.Exception401; import shop.mtcoding.blog.user.User; public class LoginInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle............"); HttpSession session = request.getSession(); User sessionUser = (User) session.getAttribute("sessionUser"); if(sessionUser == null){ throw new Exception401("로그인 하셔야 해요"); } return true; } }
 
  • WebMvcConfig 를 WebMvcConfigurer 를 implements해서 만들기
package shop.mtcoding.blog._core.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import shop.mtcoding.blog._core.intercepter.LoginInterceptor; @Configuration // IoC 등록 public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/board/**", "/user/**") .excludePathPatterns("/board/{id:\\d+}"); } }
notion image
Share article

vosw1