Filtro de Java Servlet con ejemplo

Un filtro es un objeto que se invoca en el preprocesamiento y posprocesamiento de una solicitud en el servidor, es decir, antes y después de la ejecución de un servlet para filtrar la solicitud. Filter API (o interfaz) incluye algunos métodos que nos ayudan a filtrar las requests. Para comprender el concepto de filtros, primero debe comprender el concepto de servlets .

¿Por qué usamos Filtros?  

Para validar los datos provenientes del cliente ya que a través del servidor los datos serán almacenados en la base de datos. Por lo tanto, solo los datos válidos deben ingresar a la base de datos. ¿No podemos hacer esta validación (o agregar filtros) en el lado del cliente? Podemos agregar filtros en el lado del cliente. Pero si javascript está deshabilitado en el lado del cliente, la solicitud (o los datos) no se verificarán. Alguien podría hacer esto intencionalmente. Entonces, para evitar esto, agregamos filtros en el lado del servidor.

Nota : El filtro de servlet definido por el usuario es conectable, es decir, su entrada está definida en el archivo web.xml, si eliminamos la entrada del filtro del archivo web.xml, se eliminará automáticamente y no necesitamos para cambiar el servlet.  

Ventajas de usar filtro

  • Autenticación y autorización de requests de recursos. (Para verificar si el usuario es válido o no y luego reenviar su solicitud).
  • Formateo del cuerpo o encabezado de la solicitud antes de enviarlo al servlet. (Para formatear los datos sin formatear)
  • Comprimir los datos de respuesta enviados al cliente. (por ejemplo, encriptación)
  • Modifique la respuesta agregando algunas cookies, información de encabezado, etc.
  • Validación de entrada. (más diablillo)

¿Cómo implementar un filtro usando el filtro API? 

  • Recuerde lo siguiente al implementar la API de filtro (o interfaz):
    • Tres métodos: init(), doFilter(), destroy(). Tiene que anular estos métodos. Son los métodos del ciclo de vida de un filtro.
    • doFilter se ejecutará tanto en preprocesamiento como en posprocesamiento.
    • El método doFilter() toma tres argumentos: ServletRequest, ServletResponse, FilterChain. Con la ayuda de FilterChain, podemos reenviar la solicitud después de una autenticación exitosa.

Crear una clase de filtro definida por el usuario

Cree una clase que implemente la interfaz Filter y anule todos sus métodos, es decir, init(), doFilter(), destroy(). Si no anulamos estos métodos, nuestra clase también se convertirá en una clase abstracta. El código escrito antes de “chain.doFilter()” se ejecutará antes que el servlet (preprocesamiento) y el código escrito después de “chain.doFilter()” se ejecutará después del servlet (postprocesamiento).

Configurar el filtro

  • Configure esta clase (filtro definido por el usuario) en web.xml.
  • Asigne esta clase (filtro definido por el usuario) en web.xml para especificar cuándo se ejecutará.

Ejemplo

Para ejecutar los siguientes programas, he usado Eclipse IDE y Apache Tomcat Server v9.0

1) Crear índice.html

HTML

<!DOCTYPE html>
<html>
  <head>
      <title>Page Title</title>
  </head>
  <body>
    <h2>Welcome To GFG</h2>
    <form action="GFGServlet">
        <button type="submit">Click here to go to the Servlet</button>
    </form>
  </body>
</html>

2) Crear un servlet GFGServlet.java

Java

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
// Servlet implementation class GFGServlet
@WebServlet("/GFGServlet")
public class GFGServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
  
    // @see HttpServlet#HttpServlet()
    public GFGServlet()
    {
        super();
        // TODO Auto-generated constructor stub
    }
  
    // @see HttpServlet#doGet(HttpServletRequest request,
    // HttpServletResponse response)
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
        // TODO Auto-generated method stub
        PrintWriter out = response.getWriter();
        out.println("<h1>Welcome to the Servlet.");
        // This will print output on console
        System.out.println("GFGServlet is running");
    }
  
    // @see HttpServlet#doPost(HttpServletRequest request,
    // HttpServletResponse response)
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
    {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

3) Cree una clase GGFFilter.java e implemente la interfaz de filtro

Java

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
  
public class GFGFilter implements Filter {
  
    public void init(FilterConfig filterConfig)
        throws ServletException
    {
    }
  
    @Override
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain)
        throws IOException, ServletException
    {
  
        PrintWriter out = response.getWriter();
  
        // This will print output on console
        System.out.println(
            "Before filter - Preprocessing before servlet");
  
        // some authentication if required
        chain.doFilter(request, response);
        
        // This will print output on console
        System.out.println(
            "After servlet - Following code will execute after running the servlet - PostProcessing"); 
    }
  
    public void destroy() {}
}

4) Configuración y mapeo de filtro en web.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
         id="WebApp_ID" version="4.0">
  <display-name>GFGFilter</display-name>
  <welcome-file-list>
      <welcome-file>index.html</welcome-file> 
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>default.html</welcome-file>
      <welcome-file>default.htm</welcome-file>
      <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
    
  <filter>
      <filter-name>filter1</filter-name>
      <filter-class>com.app.GFGFilter</filter-class>
  </filter>
    
  <filter-mapping>
      <filter-name>filter1</filter-name>
      <url-pattern>/GFGServlet</url-pattern>
  </filter-mapping>
    
</web-app>

Publicación traducida automáticamente

Artículo escrito por nishatiwari1719 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *