Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/12/2013, 01:55
Avatar de rgf1987
rgf1987
 
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 10 meses
Puntos: 22
Respuesta: Variable de Session en Struts

Buenas,

pues el patrón Intercepting Filter consiste en poner una capa intermedia que evalué las peticiones que llegan a la aplicación, antes de que el controlador correspondiente las ejecute, para ello se utilizan filtros.

lo que tienes que hacer es crearte un paquete nuevo donde almacenes los diferentes filtros que desees tener, y crear una nueva clase de tipo Filter.

Por poner un ejemplo sencillo la clase quedaría algo así:

Código Java:
Ver original
  1. package com.dicampus.filters;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.Filter;
  5. import javax.servlet.FilterChain;
  6. import javax.servlet.FilterConfig;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.http.HttpServletRequest;
  11.  
  12. /**
  13.  * Servlet Filter implementation class Acceso
  14.  */
  15. public class Acceso implements Filter {
  16.  
  17.     /**
  18.      * Default constructor.
  19.      */
  20.     public Acceso() {
  21.         // TODO Auto-generated constructor stub
  22.     }
  23.  
  24.     /**
  25.      * @see Filter#destroy()
  26.      */
  27.     public void destroy() {
  28.         // TODO Auto-generated method stub
  29.     }
  30.  
  31.     /**
  32.      * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
  33.      */
  34.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  35.         HttpServletRequest req = (HttpServletRequest) request;
  36.         String usuario = (String) req.getSession().getAttribute("usuario");
  37.         System.out.println("USUARIO " +usuario);
  38.         System.out.println("URL "+req.getRequestURL());
  39.         System.out.println("URI "+req.getRequestURI());
  40.  
  41.         if(usuario!= null){
  42.             //Hemos pasado el filtro
  43.             chain.doFilter(request, response);
  44.         }else{
  45.             //REDIRECCIONAMOS A LA PAGINA CORRESPONDIENTE DE ERROR O LOGIN
  46.         }
  47.     }
  48.  
  49.     /**
  50.      * @see Filter#init(FilterConfig)
  51.      */
  52.     public void init(FilterConfig fConfig) throws ServletException {
  53.        
  54.     }
  55.  
  56. }

En el método doFilter realizarías las comprobaciones oportunas, yo he puesto un ejemplo en el que obtengo la URL, la URI a las que vamos accediendo y el usuario actual en sesión y muestro los datos por consola.
Además añado una comprobación si existe usuario en sesión permito pasar el filtro y se accedería a la página a la que se intento acceder en un principio, sino no muestro nada.
Quedaría hacer la redirección a la página que desees.


Por otro lado en el fichero web.xml se definirá el filtro que acabamos de crear:

Código XML:
Ver original
  1. <filter>
  2.     <display-name>Filtro</display-name>
  3.     <filter-name>Filtro</filter-name>
  4.     <filter-class>com.dicampus.filters.Filtro</filter-class>
  5.   </filter>
  6.   <filter-mapping>
  7.     <filter-name>Filtro</filter-name>
  8.     <url-pattern>*</url-pattern>
  9.   </filter-mapping>

Sino es así tienes que definirlo tu manualmente.
Fíjate en que el <url-pattern> del Filtro sea el que necesitas yo he puesto *, pero podría ser *.do, *.htm etc, el que tu necesites.