-
Spring MVC - 서블릿 예외(Exception) 에 따른 필터(Filter)와 인터셉터(Interceptor) 처리Spring/Spring MVC 2022. 2. 10. 16:21반응형
서블릿 예외(Exception) 에 따른 필터와 인터셉터 처리
WAS에서는 등록된 ErrorPage의 상태 코드가 오면 해당 Path로 WAS에서 직접 URL 요청을 한다. 이때 의도치 않게 필터, 서블릿, 인터셉터도 다시 한번 호출되는데 로그인 인증 체크와 같은 경우 이미 처음 클라이언트 요청 시 필터나 인터셉터에서 로그인 체크를 완료하였다. 때문에 WAS에서 재요청 시 해당 필터와 인터셉트가 한번 더 호출되는 것은 매우 비효율적이다.
필터(Filter) DispatcherType를 이용한 중복 처리 제거
DispatcherType
- 중복 체크를 피하기 위해 필터에서 제공하는 옵션
- 어떤 요청인지 알려준다.
- 타입의 종류
- REQUEST : 클라이언트 요청
- ERROR : 오류 요청
- FORWARD : MVC에서 배웠던 서블릿에서 다른 서블릿이나 JSP를 요청
- INCLUDE : 서블릿에서 다른 서블릿이나 JSP의 결과를 포함하는 요청
- ASYNC : 서블릿 비동기 호출
public enum DispatcherType { FORWARD, INCLUDE, REQUEST, ASYNC, ERROR }
필터 설정 - DispatcherType
- 필터 등록시 DispatcherType에 따른 필터를 호출할 수 있도록 설정할 수 있다.
- 특별히 오류 페이지 경로도 필터를 적용할 것이 아니면 기본 값으로 사용
- setDispatcherTypes(DispatcherType.요청타입, ...)
- 설정을 안하면 default로 REQEUST로 설정된다.
- ex) setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);
@Bean public FilterRegistrationBean logFilter() { FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(new LogFilter()); filterRegistrationBean.setOrder(1); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR); return filterRegistrationBean; }
인터셉터(Interceptor)의 중복 처리 제거
인터셉터는 서블릿과는 달리 요청 타입에 따른 인터셉터 호출을 설정 하는 기능이 없다. 따라서 인터셉터는 요청 타입과는 무관하게 항상 호출된다.
대신에 인터셉터는 다음과 같이 요청 경로에 따라서 추가하거나 제외하기 쉽게 되어 있기 때문에, 이러한 설정을 사용해서 오류 페이지 경로를 excludePathPatterns 를 사용해서 빼주면 된다.
인터셉터 설정 - excludePathPatterns
- excludePathPatterns를 ERROR 요청 페이지 경로를 제외해준다.
- 인터셉터는 요청 경로에 따른 추가, 제외가 쉽게 때문에 오류 페이지 경로를 분류만 잘하면
쉽게 중복 처리를 제거할 수 있다.
ex) 오류 페이지 폴터로 관리 : /error-page
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/css/**", "*.ico", "/error", "/error-page/**");//오류 페이지 경로 }
반응형'Spring > Spring MVC' 카테고리의 다른 글
String MVC - 직접 구현해보는 API 예외처리 (0) 2022.02.14 Spring MVC - BasicErrorController를 이용한 HTML 오류 페이지 처리와 오류 정보 이용하기(text/html) (0) 2022.02.10 Spring MVC - 서블릿의 예외(Exception)에 따른 오류 페이지 등록(오류 페이지 작동 원리, 오류 페이지에서 오류 정보 이용하기) (0) 2022.02.10 Spring MVC - ArgumentResolver을 활용한 애노테이션 만들기 (0) 2022.02.09 Spring MVC - interceptor를 이용한 요청 로그 기록과 로그인 체크 (0) 2022.02.09