-
Spring Boot: Interceptor 인터셉터Spring Boot 🍃 2023. 12. 5. 00:01
인터셉터
-
스프링에서 제공하는 공통처리 기능
-
Filter와 매우 유사한 형태로 존재한다.
Filter와 차이점은 Filter는 Web Application에 등록되고 Interceptor는 Spring Context에 등록 된다는 점이다.
-
실제 매핑된 Handler 정보 확인 가능
-
조금 더 상세한 조건식과, 세부적인 스펙(pre, post, after)을 통해 구체적인 시점에 구체적인 동작이 가능하다.
-
AOP와 유사한 기능을 제공할 수 있으며,
AOP와 비교한다면 AOP는 인터셉터보다 더 구체적인 조건( 어노테이션, 파라미터, 주소 등 )과 동작 위치(After Throwing 등)을 갖는다.
-
logging을 하는데에 사용되기도 하지만 , 주로
인증 단계
를 처리한다. 이를 선/후 처리 함으로써 Service business logic과 분리 시킨다.
HandlerInterceptor
컨트롤러(Controller)의 메서드 실행 전후에 특정한 작업을 수행할 수 있게 해준다.
preHandle()
컨트롤러의
메서드가 실행되기 전에 호출
된다.preHandler()을 사용하여 요청의
전처리 작업
을 수행할 수 있다.예를 들어, 특정한 조건을 검사하거나 인증/인가 절차를 수행할 수 있다. 이 메서드가 false를 반환하면 요청의 처리가 중단되고 컨트롤러 메서드는 실행되지 않는다.
postHandle()
컨트롤러의
메서드 실행 후
,뷰(View)가 렌더링 되기 전
에 호출된다.해당 메서드를 사용하여
응답 데이터를 가공
하거나로깅
등의후처리 작업
을 수행할 수 있다.afterCompletion()
뷰가 렌더링 된 후
에 호출된다.해당 메서드를 사용하여
리소스 해제
나로깅
등의마무리 작업
을 수행할 수 있다. 이 메서드는요청의 처리가 완료된 후 항상 호출되
며,예외 발생 여부와 상관없이 실행
된다.WebMvcConfigurer
스프링 MVC의 구성(config)을 커스터마이징하기 위해 사용되는 인터페이스이다.
이 인터페이스에서 제공하는
addInterceptors
메서드를 사용해서 인터셉터(HandlerInterceptor)를 등록하고, 요청 전후에 수행할 작업을 정의할 수 있다.interceptor 생성 실습
1. interceptor 파일 작성
HandlerInterceptor
인스턴스를 상속받고,@Component
어노테이션을 붙여준다.@Component public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 요청 url 확인 String url = request.getRequestURI(); log.info("request url : {}", url); // 반환값이 false 이면, 해당 요청 경로의 controller 실행이 안됨 return true; } }
2. config 파일 작성
작성한 interceptor를 WebMvcConfigurer에 등록해주어야 동작을 한다.
WebMvcConfigurer
인터페이스를 상속받고,@Configuration
어노테이션을 붙여준다음addInterceptors
메서드를 오버라이드 하여작성했던 interceptor 파일을 등록해준다.
@Configuration @RequiredArgsConstructor public class MvcConfig implements WebMvcConfigurer { private final AuthInterceptor authInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // addInterceptor만 작성하면 모든 경로에서 인터셉터가 동작하며, registry.addInterceptor(authInterceptor) // addPathPatterns()를 붙여주면 특정 uri에만 인터셉터를 동작시킨다. .addPathPatterns("/users", "/login") // excludePathPatterns()를 붙여주면 특정 uri는 제외하고 인터셉터가 동작한다. .excludePathPatterns("/join"); } }
'Spring Boot 🍃' 카테고리의 다른 글
spring boot : RestTemplate (0) 2023.12.05 spring boot: 비동기 처리하기 (0) 2023.12.05 spring boot: Slf4j (0) 2023.12.05 Spring Boot: Filter (0) 2023.12.04 Spring Boot: Exception 처리 (0) 2023.12.04 -