인프런 커뮤니티 질문&답변

lwisekiml님의 프로필 이미지
lwisekiml

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

서블릿 예외 처리 - 인터셉터

필터, 인터셉터 흐름

해결된 질문

작성

·

359

0

1. 5:29부분에 "인터셉터와 중복으로 처리되지 않기 위해 앞의 logFilter() 의 @Bean 에 주석을 달아두자" 라고 하신거는 로그에 필터와 인터셉터 로그가 나와서 그런건가요?

2. FilterRegistrationBean에 있는 @Bean을 제거 해서 doFilter로는 안가는데, 이 경우에는 filter가 없는거라 이해하면 되나요? 아니면 내분에 필터가 따로 있어서 그 필터가 적용되는 건가요?

3. 필터에서 dispatchType=REQUEST로 설정해두는 부분이 아래 부분에서

filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);

이 부분이 맞나요??

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;

}

4. 3번이 맞다면 dispatchType은 REQUEST, ERROR로 설정이 된것이 맞나요?

5. 4번이 맞다면 6:37 쯤에서 설명하시는 내용인 4번은 어떻게 진행이 되는 건가요?

dispatchType이 REQUEST로 되어 있으면 ERROR의 경우에는 해당 필터가 호출되지 않는다고 하셨는데, 이 경우에는 호출이 되는 건가요?

6. 필터, 인터셉터는 개발자가 코드를 작성해야만 적용이 되는 건가요? 아니면 내부에(?) 필터, 인터셉터가 알아서 처리되는 부분도 있는 건가요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. lwisekiml님 답변 남겨둘게요.

1. 5:29부분에 "인터셉터와 중복으로 처리되지 않기 위해 앞의 logFilter() 의 @Bean 에 주석을 달아두자" 라고 하신거는 로그에 필터와 인터셉터 로그가 나와서 그런건가요?

-> 공통 로깅 기능은 필터를 사용해도 되고, 인터셉터를 사용해도 됩니다. 앞에서는 필터 예제를 보았는데, 이번시간에는 인터셉터를 학습하는 시간이니 필터는 이제 사용하지 않고 인터셉터를 사용하기 위해서 입니다. 물론 둘다 사용해도 되지만 로그가 필터에서도, 또 인터셉터에서도 나오겠지요?

2. FilterRegistrationBean에 있는 @Bean을 제거 해서 doFilter로는 안가는데, 이 경우에는 filter가 없는거라 이해하면 되나요? 아니면 내분에 필터가 따로 있어서 그 필터가 적용되는 건가요?

-> 우리가 만드는 필터가 추가되지 않는 것으로 이해하시면 됩니다.

3. 필터에서 dispatchType=REQUEST로 설정해두는 부분이 아래 부분에서

filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);

이 부분이 맞나요??

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;

}

4. 3번이 맞다면 dispatchType은 REQUEST, ERROR로 설정이 된것이 맞나요?

-> 네 맞습니다.

5. 4번이 맞다면 6:37 쯤에서 설명하시는 내용인 4번은 어떻게 진행이 되는 건가요?

dispatchType이 REQUEST로 되어 있으면 ERROR의 경우에는 해당 필터가 호출되지 않는다고 하셨는데, 이 경우에는 호출이 되는 건가요?

-> 6:37번에서 설명하는 것은 dispatchType은=REQUEST로만 설정한 것으로 이해하시면 됩니다. 방금 예시와는 다른 예시입니다. 이 경우에는 ERROR이 있으므로 물론 호출이 됩니다. 이 부분을 확실히 이해하는 가장 좋은 방법은 코드로 직접 테스트를 해보는 것입니다. 그러면 바로 확인해볼 수 있겠지요?

6. 필터, 인터셉터는 개발자가 코드를 작성해야만 적용이 되는 건가요? 아니면 내부에(?) 필터, 인터셉터가 알아서 처리되는 부분도 있는 건가요?

-> 이번시간에 학습한 것 처럼 필요한 필터, 인터셉터를 개발자가 직접 등록해야 합니다. 참고로 일부 필터, 인터셉터는 스프링 부트가 자동으로 등록해주는 것들도 있습니다.

감사합니다.

lwisekiml님의 프로필 이미지
lwisekiml
질문자

자세한 답변 감사합니다!

lwisekiml님의 프로필 이미지
lwisekiml

작성한 질문수

질문하기