Servlet vs filtro

¿Cuál es la diferencia entre un servlet y un filtro ? ¿Qué recomienda utilizar para la autorización de páginas?

Use un Filter cuando quiera filtrar y / o modificar solicitudes basadas en condiciones específicas. Use un Servlet cuando desee controlar, preprocesar y / o posprocesar solicitudes.

El tutorial de Java EE menciona lo siguiente sobre los filtros:

Un filtro es un objeto que puede transformar el encabezado y el contenido (o ambos) de una solicitud o respuesta. Los filtros difieren de los componentes web en que los filtros generalmente no crean una respuesta. En cambio, un filtro proporciona una funcionalidad que se puede “adjuntar” a cualquier tipo de recurso web. En consecuencia, un filtro no debería tener dependencias en un recurso web para el cual actúa como filtro; de esta manera, se puede componer con más de un tipo de recurso web.

Las principales tareas que un filtro puede realizar son las siguientes:

  • Consulta la solicitud y actúa en consecuencia.
  • Bloquee el par de solicitud y respuesta para que no pase más.
  • Modificar los encabezados y datos de la solicitud. Para ello, proporcione una versión personalizada de la solicitud.
  • Modificar los encabezados y datos de respuesta. Para ello, proporcione una versión personalizada de la respuesta.
  • Interactúa con recursos externos.

Para la autorización, un Filter es el más adecuado. Aquí hay un ejemplo básico de kickoff de cómo un filtro verifica las solicitudes para el usuario que ha iniciado sesión:

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { if (((HttpServletRequest) request).getSession().getAttribute("user") == null) { // User is not logged in. Redirect to login page. ((HttpServletResponse) response).sendRedirect("login"); } else { // User is logged in. Just continue with request. chain.doFilter(request, response); } } 

Los filtros son los más adecuados para la autorización. Esto se debe a que pueden configurarse para ejecutarse en todas las páginas de un sitio. Entonces solo necesita un filtro para proteger todas sus páginas.

Usando el filtro podemos mejorar el rendimiento del servlet. Cuando llega la solicitud, podemos realizar el preprocesamiento a petición, si la solicitud satisface, podemos reenviar al servlet; de lo contrario, le daremos un mensaje al cliente para que proporcione la información adecuada a petición.