JSP - Filtros
En este capítulo, analizaremos los filtros en JSP. Los filtros de servlet y JSP son clases de Java que se pueden utilizar en la programación de servlet y JSP para los siguientes propósitos:
Para interceptar solicitudes de un cliente antes de que accedan a un recurso en el back-end.
Para manipular las respuestas del servidor antes de que se envíen de vuelta al cliente.
Hay varios tipos de filtros sugeridos por las especificaciones:
- Filtros de autenticación
- Filtros de compresión de datos
- Filtros de cifrado
- Filtros que desencadenan eventos de acceso a recursos
- Filtros de conversión de imágenes
- Filtros de registro y auditoría
- Filtros de cadena TIPO MIME
- Filtros de tokenización
- Filtros XSL / T que transforman el contenido XML
Los filtros se implementan en el archivo descriptor de implementación web.xmly luego mapear a nombres de servlet o JSP o patrones de URL en el descriptor de implementación de su aplicación. El archivo descriptor de implementación web.xml se puede encontrar en el directorio <Tomcat-installation-directory> \ conf .
Cuando el contenedor JSP inicia su aplicación web, crea una instancia de cada filtro que haya declarado en el descriptor de implementación. Los filtros se ejecutan en el orden en que se declaran en el descriptor de implementación.
Métodos de filtro de servlet
Un filtro es simplemente una clase Java que implementa la javax.servlet.Filterinterfaz. La interfaz javax.servlet.Filter define tres métodos:
S.No. | Método y descripción |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) El contenedor llama a este método cada vez que se pasa un par de solicitud / respuesta a través de la cadena debido a una solicitud del cliente de un recurso al final de la cadena. |
2 | public void init(FilterConfig filterConfig) El contenedor web llama a este método para indicar a un filtro que se está poniendo en servicio. |
3 | public void destroy() El contenedor web llama a este método para indicar a un filtro que está fuera de servicio. |
Ejemplo de filtro JSP
El siguiente ejemplo muestra cómo imprimir la dirección IP del cliente y la fecha y hora actual, cada vez que accedería a cualquier archivo JSP. Este ejemplo le dará una comprensión básica del filtro JSP, pero puede escribir aplicaciones de filtro más sofisticadas utilizando el mismo concepto:
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Implements Filter class
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws java.io.IOException, ServletException {
// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();
// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time "+ new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed
from service by the web container*/
}
}
Compilar LogFilter.java de la forma habitual y pon tu LogFilter.class presentar en <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
Asignación de filtros JSP en Web.xml
Los filtros se definen y luego se asignan a una URL o nombre de archivo JSP, de la misma manera que se define Servlet y luego se asigna a un patrón de URL en web.xmlarchivo. Cree la siguiente entrada para la etiqueta de filtro en el archivo descriptor de implementaciónweb.xml
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
El filtro anterior se aplicará a todos los servlets y JSP porque especificamos /*en nuestra configuración. Puede especificar un servlet particular o la ruta JSP si desea aplicar un filtro en algunos servlets o solo en JSP.
Ahora intente llamar a cualquier servlet o JSP y verá el registro generado en el registro del servidor web. Puedes usarLog4J logger para registrar el registro anterior en un archivo separado.
Usando múltiples filtros
Su aplicación web puede definir varios filtros diferentes con un propósito específico. Considere, define dos filtros AuthenFilter y LogFilter . El resto del proceso permanecerá como se explicó anteriormente, excepto que necesita crear un mapeo diferente como se menciona a continuación:
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>AuthenFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Orden de aplicación de filtros
El orden de los elementos de mapeo de filtros en web.xml determina el orden en el que el contenedor web aplica el filtro al servlet o JSP. Para invertir el orden del filtro, solo necesita invertir los elementos de mapeo de filtro en elweb.xml archivo.
Por ejemplo, el ejemplo anterior aplicará LogFilter primero y luego aplicará AuthenFilter a cualquier servlet o JSP; el siguiente ejemplo invertirá el orden:
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>