복붙노트

[SPRING] Spring MVC에서 인터셉터와 필터의 차이점

SPRING

Spring MVC에서 인터셉터와 필터의 차이점

Filter와 Interceptor 목적에 대해 약간 혼란 스럽습니다.

내가 도큐먼트에서 이해 한 것처럼, Interceptor는 요청 사이에서 실행됩니다. 반면에 필터는 렌더링 뷰 이전에 실행되지만 컨트롤러 렌더링 응답 이후에 실행됩니다.

그렇다면 Interceptor의 postHandle ()과 Filter의 doFilter () 사이의 차이점은 무엇입니까?

유스 케이스를 사용해야하는 모범 사례는 무엇입니까? 이 그림에서 필터와 인터셉터는 작동합니까?

해결법

  1. ==============================

    1.HandlerIntercepter의 javadoc에서 인용 :

    HandlerIntercepter의 javadoc에서 인용 :

    그런 말로 :

    postHandle은 핸들러 메소드 호출 이후 뷰가 렌더링되기 전에 호출됩니다. 따라서 모델 객체를 뷰에 추가 할 수는 있지만 이미 커밋 된 HttpServletResponse는 변경할 수 없습니다. doFilter는 postHandle보다 훨씬 다양합니다. 요청 또는 응답을 변경하여 체인에 전달하거나 요청 처리를 차단할 수 있습니다.

    또한 preHandle 및 postHandle 메소드에서 요청을 처리 한 HandlerMethod에 액세스 할 수 있습니다. 따라서 핸들러 자체를 기반으로 사전 사후 처리 로직을 추가 할 수 있습니다. 예를 들어, 어노테이션이있는 핸들러 메소드에 대한 로직을 추가 할 수 있습니다.

    의사가 말했듯이 세밀한 처리기 관련 사전 처리 작업은 HandlerInterceptor 구현, 특히 인수 처리 된 공통 처리기 코드 및 권한 부여 검사의 후보가됩니다. 반면에 필터는 멀티 파트 양식 및 GZIP 압축과 같은 요청 콘텐츠 및보기 콘텐츠 처리에 적합합니다. 일반적으로 필터를 특정 콘텐츠 유형 (예 : 이미지) 또는 모든 요청에 ​​매핑해야하는시기를 나타냅니다.

  2. ==============================

    2.HandlerInterceptor는 실제 대상 "처리기"에 대한 액세스 권한이 있으므로 필터보다 세분화 된 제어를 제공합니다. 즉, 수행하는 작업은 요청이 실제로 수행하는 작업에 따라 다를 수 있습니다 (서블릿 필터가 일반적으로 적용되는 반면 모든 요청에 ​​- 각 요청의 매개 변수 만 고려할 수 있음). 또한 handlerInterceptor는 핸들러를 호출하기 전에, 핸들러가 완료되었지만 뷰 렌더링 전에 (뷰 렌더링을 모두 건너 뛸 수도 있음) 또는 뷰 자체가 렌더링 된 후에 동작을 적용 할 수 있도록 세 가지 다른 메소드를 제공합니다. 또한 핸들러 그룹마다 다른 인터셉터를 설정할 수 있습니다. 인터셉터는 handlerMapping에 구성되며 여러 개의 handlerMappings이있을 수 있습니다.

    HandlerInterceptor는 실제 대상 "처리기"에 대한 액세스 권한이 있으므로 필터보다 세분화 된 제어를 제공합니다. 즉, 수행하는 작업은 요청이 실제로 수행하는 작업에 따라 다를 수 있습니다 (서블릿 필터가 일반적으로 적용되는 반면 모든 요청에 ​​- 각 요청의 매개 변수 만 고려할 수 있음). 또한 handlerInterceptor는 핸들러를 호출하기 전에, 핸들러가 완료되었지만 뷰 렌더링 전에 (뷰 렌더링을 모두 건너 뛸 수도 있음) 또는 뷰 자체가 렌더링 된 후에 동작을 적용 할 수 있도록 세 가지 다른 메소드를 제공합니다. 또한 핸들러 그룹마다 다른 인터셉터를 설정할 수 있습니다. 인터셉터는 handlerMapping에 구성되며 여러 개의 handlerMappings이있을 수 있습니다.

    그러므로 완전히 일반적인 것을 처리 할 필요가 있다면 (예 : 모든 요청을 기록하십시오) 필터 만 있으면 충분합니다. 그러나 동작이 대상 핸들러에 의존하거나 요청 처리와 뷰 렌더링 사이에 무엇인가하고 싶다면 HandlerInterceptor는 그 유연성을 제공합니다.

    참조 : http://static.springframework.org/sp...ng-interceptor

  3. ==============================

    3.필터 : - 이름에서 알 수 있듯이 필터는 들어오는 HTTP 요청과 각 HTTP 응답에 대해 서블릿 컨테이너에서 실행하는 Java 클래스입니다. 이렇게하면 HTTP 수신 요청이 JSP 페이지, 서블릿 또는 간단한 정적 페이지와 같은 리소스에 도달하기 전에이를 관리 할 수 ​​있습니다. 리소스 실행 후 HTTP 아웃 바운드 응답을 관리하는 것도 가능합니다.

    필터 : - 이름에서 알 수 있듯이 필터는 들어오는 HTTP 요청과 각 HTTP 응답에 대해 서블릿 컨테이너에서 실행하는 Java 클래스입니다. 이렇게하면 HTTP 수신 요청이 JSP 페이지, 서블릿 또는 간단한 정적 페이지와 같은 리소스에 도달하기 전에이를 관리 할 수 ​​있습니다. 리소스 실행 후 HTTP 아웃 바운드 응답을 관리하는 것도 가능합니다.

    인터셉터 : - Spring 인터셉터는 서블릿 필터와 비슷하지만 스프링 컨텍스트에서 작동하므로 HTTP 요청 및 응답을 관리하는 데 많은 힘이 있지만 모든 스프링 컨텍스트에 액세스 할 수 있으므로 더 복잡한 동작을 구현할 수 있습니다.

  4. from https://stackoverflow.com/questions/35856454/difference-between-interceptor-and-filter-in-spring-mvc by cc-by-sa and MIT license