Spring HandlerInterceptor vs Servlet Filters

HandlerInterceptor s en Spring ahora se puede configurar para que se invoque solo en ciertas URL usando .

Los filtros de servlets pueden lograr la misma funcionalidad (registro, seguridad, etc.). Entonces, ¿cuál debería usarse?

Creo que con Interceptors, uno puede usar el objeto ModelAndView para trabajar con Models, por lo que tiene más ventajas. ¿Alguien puede dibujar escenarios donde los filtros o interceptores tienen ventajas sobre el otro?

La interfaz org.springframework.web.servlet.HanderInterceptor sí tiene dos párrafos que discuten esta pregunta:

HandlerInterceptor es básicamente similar a un filtro Servlet 2.3, pero a diferencia de este último, solo permite el preprocesamiento personalizado con la opción de prohibir la ejecución del controlador y el postprocesamiento personalizado. Los filtros son más potentes, por ejemplo, permiten intercambiar los objetos de solicitud y respuesta que se transmiten a través de la cadena. Tenga en cuenta que un filtro se configura en web.xml, HandlerInterceptor en el contexto de la aplicación.

Como una guía básica, las tareas de preprocesamiento relacionadas con el manejador de grano fino son candidatas para las implementaciones de HandlerInterceptor, especialmente el código de manejador común factorizado y las comprobaciones de autorización. Por otro lado, un filtro es adecuado para el contenido de solicitud y para ver el manejo de contenido, como formularios multiparte y compresión GZIP. Esto normalmente se muestra cuando se necesita asignar el filtro a ciertos tipos de contenido (por ejemplo, imágenes) o a todas las solicitudes.

Los interceptores Spring Handler le permiten enganchar en más partes del ciclo de vida de la solicitud y obtener acceso a más información en el proceso. A menudo están más íntimamente relacionados con el ciclo de solicitud / respuesta que los filtros.

Los filtros son más adecuados al tratar su solicitud / respuesta como un sistema de caja negra. Funcionarán independientemente de cómo se implemente el servlet.

Si está utilizando Spring MVC, hay pocas razones para escribir una nueva lógica como un filtro de servlet. Todo lo que los filtros pueden hacer, los interceptores pueden hacerlo más fácil y más elegantemente.

Recuerde también que los filtros de servlets han existido por mucho más tiempo que los interceptores.

Con un interceptor de Spring, tiene acceso al Handler que puede ser útil. Además, con un interceptor de Spring, tiene acceso para ejecutar la lógica antes de que se visualice la vista y después de que se visualice la vista.