- Spring MVC 마스터하기 예외처리 32022년 06월 11일
- starryeye
- 작성자
- 2022.06.11.오후08:41
지금까지 예외처리에 대한 포스팅을 보면...
WAS - 컨트롤러 간에 왔다갔다 하면서 중간에 있는 필터와 인터셉터가 계속 중복으로 호출된다...
경우에 따라.. 필터와 인터셉터는 중복으로 호출되면 안되는 경우도 있을 것이다..
-> 예를 들면 로그인 체크 로직을 위한 필터나 인터셉션은 이미 최초 정상요청에 의한 호출 로직에서
검증을 했을 것이나.. 에러페이지 출력을 위한 내부 호출에서 불필요한 검증을 하게된다.
그래서 정상요청에 의한 호출인지.. 에러페이지 출력을 위한 내부 호출인지 구분이 필요하다.
-> DispatcherType을 사용해보자
DispatcherType
서블릿이 지원하는 enum 이다.
REQUEST : 정상요청에 의한 호출일 경우
ERROR : 에러페이지 출력을 위한 내부 호출일 경우
Filter
기본적으로 request.getDispatcherType()으로 필터 내부 로직에서 호출 하여 enum 값을 받을 수 있다.
위와 같이 @Configuration 어노테이션을 사용한 클래스에서 FilterRegistrationBean을 등록할 때 사용할 수 있다.
setDispatcherTypes로 해당 필터를 (위 예시에서는 LogFilter) 무슨 DispatcherType일 때 적용할 지 정의 할 수 있다.
위 예시에서는 REQUEST, ERROR 타입일 경우 모두 해당 필터를 적용하도록 하였다.
(기본 셋팅 값은 REQUEST 타입이다. ERROR일 경우만 호출 되게 하고 싶으면 ERROR만 set 해주면 된다.)
Interceptor
DispatcherType은 서블릿에서 제공하는 enum 이다.
따라서 기본값은 모든 타입에 대해 다 interceptor가 호출된다.
interceptor도 request.getDispatcherType()으로 인터셉터 내부 로직에서 호출하여 enum 값을 받을 수 있다.
인터셉터 내부로직에서 조건문으로 처리하기 보단.. 설정부인 configuration 에서 처리하는 방법을 알아보자
위와 같이 인터셉터 등록 Configuration에서 excludePathPattern으로
에러페이지 출력을 위한 호출일 경우 개발자가 만든 인터셉터(Logintercptor)가 호출 되지 않도록 정의 할 수 있다.
'Spring > MVC' 카테고리의 다른 글
Spring MVC 마스터하기 예외처리 5 (0) 2022.06.11 Spring MVC 마스터하기 예외처리 4 (0) 2022.06.11 Spring MVC 마스터하기 예외처리 2 (0) 2022.06.11 Spring MVC 마스터하기 예외처리 1 (0) 2022.06.11 Spring MVC 마스터하기 5 (0) 2022.06.04 다음글이전글이전 글이 없습니다.댓글