Spring MVC에서 인터셉터와 필터의 차이점
나는 조금에 대해 혼란 스러워요 Filter
및 Interceptor
목적.
내가 문서에서 이해했듯이 Interceptor
요청 사이에 실행됩니다. 반면에 Filter
뷰를 렌더링하기 전에 실행되지만 컨트롤러가 응답을 렌더링 한 후에 실행됩니다.
그렇다면 postHandle()
인터셉터와 doFilter()
필터 의 차이점은 무엇입니까?
사용해야하는 사용 사례에 대한 모범 사례는 무엇입니까? 이 그림에서 작품 Filter
과 Interceptor
s는 어디입니까?
HandlerIntercepter
의 javadoc 에서 인용 :
HandlerInterceptor
기본적으로 Servlet과 유사Filter
하지만 후자와 달리 핸들러 자체의 실행을 금지하는 옵션과 사용자 정의 후 처리를 허용하는 사용자 정의 전처리 만 허용합니다. 필터는 더 강력합니다. 예를 들어 체인으로 전달되는 요청 및 응답 객체를 교환 할 수 있습니다. 필터는 응용 프로그램 컨텍스트의web.xml
, aHandlerInterceptor
에서 구성됩니다 .기본 지침으로, 세분화 된 핸들러 관련 전처리 작업은
HandlerInterceptor
구현 후보이며 , 특히 팩토 아웃 된 공통 핸들러 코드 및 권한 부여 검사입니다. 반면에 aFilter
는 멀티 파트 양식 및 GZIP 압축과 같은 콘텐츠 요청 및보기 콘텐츠 처리에 적합합니다. 이것은 일반적으로 필터를 특정 콘텐츠 유형 (예 : 이미지) 또는 모든 요청에 매핑해야하는 경우를 보여줍니다.
그 말과 함께 :
그렇다면 인터셉터의 PostHandle ()과 필터의 doFilter ()의 차이점은 무엇입니까?
postHandle
핸들러 메서드 호출 후 뷰가 렌더링되기 전에 호출됩니다. 따라서 뷰에 더 많은 모델 객체를 추가 할 수 있지만 이미 커밋 되었기 때문에 변경할 수 없습니다HttpServletResponse
. doFilter
훨씬 더 다용도보다 postHandle
. 요청 또는 응답을 변경하여 체인에 전달하거나 요청 처리를 차단할 수도 있습니다.
또한 preHandle
및 postHandle
메서드 HandlerMethod
에서 요청을 처리 한에 액세스 할 수 있습니다 . 따라서 핸들러 자체를 기반으로 사전 사후 처리 로직을 추가 할 수 있습니다. 예를 들어, 일부 어노테이션이있는 핸들러 메소드에 대한 로직을 추가 할 수 있습니다.
사용해야하는 사용 사례에 대한 모범 사례는 무엇입니까?
문서에서 말했듯이, 세분화 된 핸들러 관련 전처리 작업은 HandlerInterceptor
구현 후보 , 특히 팩토 아웃 된 공통 핸들러 코드 및 권한 부여 검사입니다. 반면에 a Filter
는 멀티 파트 양식 및 GZIP 압축과 같은 콘텐츠 요청 및보기 콘텐츠 처리에 적합합니다. 이것은 일반적으로 필터를 특정 콘텐츠 유형 (예 : 이미지) 또는 모든 요청에 매핑해야하는 경우를 보여줍니다.
HandlerInterceptor는 실제 대상 "핸들러"에 액세스 할 수 있기 때문에 필터보다 더 세밀한 제어를 제공합니다. 즉, 수행하는 작업은 요청이 실제로 수행하는 작업에 따라 달라질 수 있습니다 (서블릿 필터는 일반적으로 적용됨). 모든 요청에 대해-각 요청의 매개 변수 만 고려할 수 있음). handlerInterceptor는 또한 3 가지 다른 메서드를 제공하므로 핸들러를 호출하기 전, 핸들러가 완료된 후 그러나 뷰 렌더링 이전 (뷰 렌더링을 완전히 우회 할 수도 있음) 또는 뷰 자체가 렌더링 된 후에 동작을 적용 할 수 있습니다. 또한 핸들러 그룹마다 다른 인터셉터를 설정할 수 있습니다. 인터셉터는 handlerMapping에 구성되며 여러 handlerMapping이있을 수 있습니다.
따라서 완전히 일반적인 작업 (예 : 모든 요청 기록)을 수행해야하는 경우 필터로 충분하지만 동작이 대상 처리기에 따라 다르거 나 요청 처리와보기 렌더링 사이에 작업을 수행하려는 경우 HandlerInterceptor는 이러한 유연성을 제공합니다.
참조 : http://static.springframework.org/sp...ng-interceptor
Filter :-이름에서 알 수 있듯이 필터는 각 수신 HTTP 요청 및 각 http 응답에 대해 서블릿 컨테이너가 실행하는 Java 클래스입니다. 이렇게하면 JSP 페이지, 서블릿 또는 단순 정적 페이지와 같은 HTTP 수신 요청이 리소스에 도달하기 전에 관리 할 수 있습니다. 같은 방식으로 리소스 실행 후 HTTP 아웃 바운드 응답을 관리 할 수 있습니다.
Interceptor :-Spring Interceptor는 Servlet Filters와 유사하지만 Spring Context에서 작동하므로 HTTP Request 및 Response를 관리하는 데 강력하지만 모든 Spring 컨텍스트에 액세스 할 수 있기 때문에보다 정교한 동작을 구현할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/35856454/difference-between-interceptor-and-filter-in-spring-mvc
'programing' 카테고리의 다른 글
uniqid는 얼마나 고유합니까? (0) | 2020.10.22 |
---|---|
System.Net.Http 대 Microsoft.Net.Http (0) | 2020.10.22 |
웹 개발에서 프런트 엔드, 백엔드 및 미들웨어의 차이점 (0) | 2020.10.22 |
루비 : Proc # call vs yield (0) | 2020.10.22 |
Phonegap + jQuery Mobile, 실제 샘플 또는 튜토리얼 (0) | 2020.10.22 |