domingo, 17 de octubre de 2010

Filter

El uso de filtros es otra de las herramientas en el desarrollo de componentes web.

Ejemplos prácticos de su uso serían los que siguen.

  • Control de acceso: evitar el acceso a partes de nuestra aplicación/sitio si el usuario no está registrado.

  • Insertar fragmento de HTML (una cabecera o un pié ) a todas las páginas de nuestro sitio.

  • Evitar el “robo” de imágenes de una página a un usuario no registrado.

El planteamiento sería similar al de CSS (Cascading Style Sheet) o las hojas de estilo, en el que definimos aparte una apariencia que se aplica a todo nuestro sitio, agilizando los cambios y manteniendo el código ligero. Es preferible definir las directivas de acceso en un único lugar a tener que realizar las comprobaciones en todo el código.


El filter, como el servlet y el listener está ligado al archivo web.xml, por lo que este es un punto de partida a la hora de localizar un comportamiento no deseado por nuestro filtro (o servlet o listener).

public class FiltroAcceso implements Filter {

Ejemplo de control de acceso

NOTA:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

Como se puede observar el tipo de request, del filtro es de tipo ServletRequest en vez de HttpServletRequest, por lo que si queremos poder acceder a los datos contenidos en los distintos ámbitos del request es necesario hacer modelado con el request para que se asemeje al que usamos en los servlets eso se hace como sigue:

HttpServletRequest httprequest=(HttpServletRequest)request;

HttpSession session=(HttpSession)httprequest.getSession();

publicvoiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest httprequest=(HttpServletRequest)request;

HttpSession session=(HttpSession)httprequest.getSession();

Object atributo=session.getAttribute("usuario");

Usuario usuario=(Usuario) atributo;

if(usuario!=null)

chain.doFilter(request, response);

else{

request.getRequestDispatcher("./index.jsp?mensaje=Login para acceder a ese apartado").forward(request, response);}

}

El texto marcado en verde es el que gestiona la peticion, antes de dicho texto podemos hacer las operaciones que deseemos. En el ejemplo si hay un usuario logado atendemos su peticion, en caso contrario lo redirigimos a una pagina en concreto.

<filter>

<display-name>FiltroAcceso</display-name>

<filter-name>FiltroAcceso</filter-name>

<filter-class>filter.FiltroAcceso</filter-class>

</filter>

<filter-mapping>

<filter-name>FiltroAcceso</filter-name>

<servlet-name>ControladorBorradoProducto</servlet-name>

</filter-mapping>

<filter-mapping>

<filter-name>FiltroAcceso</filter-name>

<servlet-name>ControladorCarrito</servlet-name>

</filter-mapping>

Entre las etiquetas <filter> se define el filtro en las secciones. Las direccitas <filter-mapping> definen a que partes de nuestra aplicación se palica el filtro.




No hay comentarios:

Publicar un comentario