programing

스프링 핸들러인터셉터 대 서블릿 필터

goodsources 2023. 8. 19. 10:14
반응형

스프링 핸들러인터셉터 대 서블릿 필터

이제 Spring의 HandlerIntercepters는 다음을 사용하여 특정 URL에서만 호출되도록 구성할 수 있습니다.<mvc:interceptors>.

서블릿 필터는 동일한 기능(로깅, 보안 등)을 수행할 수 있습니다.그래서 어떤 것을 사용해야 할까요?

요격기를 사용하면, 한 사람들은ModelAndView모델과 함께 작업하는 것을 반대하므로 더 많은 이점이 있습니다.필터나 인터셉트가 다른 것보다 유리한 시나리오를 그릴 수 있는 사람이 있습니까?

org.springframework.web.servlet.HanderInterceptor인터페이스 JavaDoc 자체에는 이 문제를 논의하는 두 개의 단락이 있습니다.

HandlerInterceptor는 기본적으로 서블릿 2.3 필터와 유사하지만, 서블릿과는 달리 핸들러 자체의 실행을 금지하는 옵션과 사용자 지정 후 처리를 허용합니다.필터는 체인에서 전달되는 요청 및 응답 개체를 교환할 수 있는 등 더 강력합니다.필터는 처리기인 web.xml에서 구성됩니다.응용 프로그램 컨텍스트의 인터셉터입니다.

기본적인 지침으로 세분화된 핸들러 관련 전처리 작업이 핸들러 후보입니다.인터셉터 구현, 특히 인수 분해된 공통 처리기 코드 및 권한 검사.반면 필터는 다중 부분 양식 및 GZIP 압축과 같은 요청 내용 및 보기 내용 처리에 적합합니다.일반적으로 필터를 특정 콘텐츠 유형(예: 이미지) 또는 모든 요청에 매핑해야 하는 경우를 표시합니다.

스프링 핸들러 인터셉트를 사용하면 요청 수명 주기의 더 많은 부분에 연결하고 프로세스에서 더 많은 정보에 액세스할 수 있습니다.필터보다 요청/응답 주기에 더 밀접하게 연결되어 있는 경우가 많습니다.

필터는 요청/응답을 블랙박스 시스템으로 처리할 때 더 적합합니다.서블릿이 어떻게 구현되는지에 관계없이 작동합니다.

Spring MVC를 사용하는 경우 서블릿 필터로 새 로직을 작성할 이유가 거의 없습니다.필터가 할 수 있는 모든 것, 인터셉트는 더 쉽고 더 우아하게 할 수 있습니다.

또한 서블릿 필터는 인터셉트보다 훨씬 더 오래 사용되었습니다.

스프링 인터셉트를 사용하면 유용할 수 있는 핸들러에 액세스할 수 있습니다.또한 Spring 인터셉터를 사용하면 뷰가 렌더링되기 전과 뷰가 렌더링된 후에 로직을 실행할 수 있습니다.

Servlet Filter:

이름에서 알 수 있는 필터는 들어오는 각 http 요청 및 각 http 응답에 대해 서블릿 컨테이너에 의해 실행되는 Java 클래스입니다.이렇게 하면 JSP 페이지, 서블릿 또는 단순 정적 페이지와 같은 HTTP 수신 요청이 리소스에 도달하기 전에 관리할 수 있으며, 리소스 실행 후 HTTP 아웃바운드 응답을 관리할 수 있습니다.

이 동작을 통해 다양한 컨텍스트에서 재사용되는 공통 기능을 구현할 수 있습니다.

enter image description here

위 그림에 표시된 것처럼 필터는 웹 컨테이너에서 실행되므로 필터 정의도 web.xml 파일에 포함됩니다.

필터에는 세 가지 주요 방법이 포함됩니다.

  1. init: 필터 정의에서 init-param 요소를 사용하여 필터를 초기화하기 위해 실행됩니다.
  2. do필터:"url-pattern"을 만족하는 모든 HTTP 수신 요청에 대해 실행됩니다.
  3. destroy: 필터에서 사용하는 리소스를 해제합니다.

Interceptor:

Spring Interceptors는 서블릿 필터와 유사하지만 Spring Context에서 작동하므로 HTTP 요청 및 응답을 관리하는 데 강력하지만 모든 Spring 컨텍스트에 액세스할 수 있기 때문에 보다 정교한 동작을 구현할 수 있습니다.

enter image description here

Spring 가로채기는 SpringMVC 컨텍스트에서 실행되므로 rest-servlet.xml 파일에 정의되어 있습니다.

인터셉트에는 세 가지 주요 방법이 포함됩니다.

  1. 사전 처리:대상 리소스를 실행하기 전에 실행되었습니다.
  2. 완료 후:대상 리소스가 실행된 후(보기를 렌더링한 후)
  3. postHandle:처리기의 실행을 가로채십시오.

언급URL : https://stackoverflow.com/questions/8000844/spring-handlerinterceptor-vs-servlet-filters

반응형