package q02b.exe.comun;



import java.io.IOException;

import java.util.Vector;



import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest; 

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;



import q02b.exe.seguridad.beans.Q02bSeguridadBean;

import q02b.exe.seguridad.valueobjects.Q02bUsuario;

import q02b.exe.utils.Q02bConstantes;

import q02b.exe.utils.Q02bFormatData;

import es.ejie.frmk.infraestructura.seguridad.Q70GestorSeguridad;

import es.ejie.frmk.infraestructura.seguridad.Q70InformacionSeguridadUsuario;

import es.ejie.frmk.infraestructura.traza.Q70TraceLevel;

import es.ejie.frmk.infraestructura.traza.Q70Traza;

import es.ejie.frmk.listeners.base.Q70ListenerUtils;

import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;



import java.util.ArrayList;



/**  

 * <p>Título:Q02bFiltroSeguridad</p>

 * <p>Descripción: Clase que realiza un filtro de seguridad</p>

 * <p>Copyright: Copyright (c) 2005</p>

 * @version 1.0

 **/

public class Q02bFiltroSeguridadIntranet extends Q02bFiltro implements Filter{

    //Variables que no se modifican

    //private static String ESTADO_ACTIVADO	="on";

    private static String COMPONENTE		="FILTRO_SEGURIDAD";

    private static String USUARIO_CONTEXTO 	= "user";

    private static String NOMBRE_USUARIO_CONTEXTO = "nombrePresentacion";

    private static String PERFIL_CONTEXTO 	= "perfil";

    private static String PROVINCIA_CONTEXTO 	= "provincia";

    private static String DESCPROVINCIA_CONTEXTO 	= "descProvincia";    

    private static String MUNICIPIO_CONTEXTO 	= "municipio";

    private static String DESCMUNICIPIO_CONTEXTO 	= "descMunicipio";

    private static String PLAZOS_CONTEXTO 	= "listaPlazos";    

    //private static String PAG_ERROR 		= "Error";

    //private static String PAG_ERROR_ACCESO 	= "ErrorAcceso";

    //private static String PAG_ERROR_USUARIO 	= "ErrorUsuario";

    private static final String ERROR_AUTENTICACION		= "/comunJSP/q02bSubmitUserNookXLNets.do";

    

    //Variable para mostrar las trazas

    private static Q70Traza tr = Q70Traza.getSingleton();

    

    //Variable que representa el propio filtro

    private   FilterConfig filterConfig = null; 

	

    //Bean de seguridad para acceder a la información del usuario

    protected Q02bSeguridadBean beanSeguridad = null;



    /**

     * Filtro que tiene 3 posibles estados, indicados en una variable "estado", en el archivo "web.xml":

     * DEBUG --> Añade actions a los archivos properties de los usuarios.

     * ON --> Activa el filtro para el acceso no permitido de usuarios.

     * OFF(cualquier otro valor) --> Desactiva el filtro.

     * @param servletRequest

     * @param servletResponse

     * @param filterChain

     * @return

     * @throws ServletException, IOException

     */

    public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {

    	//Variables que no se van a modificar

    	final String TRACE_METODO = ":doFilter:";

        

    	//Variables que se obtienen de la request

    	HttpServletRequest 	request 	= (HttpServletRequest) servletRequest;

    	HttpSession 		session 	= request.getSession();

  

    	try{	 

    		

    		if (tr.isTraceActive()) {

    			tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :entrando.");                

    		}  

	        if (tr.isTraceActive()) {

	    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :URI: " + request.getRequestURI());                

	        }

	        

	        //Se obtiene el contexto

	        Q70ContextoEJIE contexto = (Q70ContextoEJIE)session.getAttribute("contexto");

		  



			//Esto lo dejamos para cuando se defina como va a ser el login

			//Si el contexto está activo y el usuario autenticado no me hace falta recuperar la variable Xlnets de la request

			//Se comprueba el nombre del proceso               

			String rutaProceso 	= (String)request.getRequestURI().substring(1);//Ruta completa del proceso ej. q02bCuestionariosWar/cuestionariosAyunMenJSP/q02bCuestionariosAyunMenInicioOP.do			

			String action 		= rutaProceso.substring(rutaProceso.indexOf("/")+1);

			String nombreMant	= "";//Nombre del mantenimiento

			String nombreProceso= "";// nombre del proceso ej. q02bCuestionariosAyunMenInicioOP

			String aplicacionProceso = null;

//			Variable acceso login

		    boolean accesoLogin = true;    

			if(action.indexOf("/")!=-1){				               

				nombreMant = action.substring(0,action.indexOf("/"));				               

				action = action.substring(action.indexOf("/")+1);

				nombreProceso = action.substring(0,action.indexOf("."));

				tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :nombreMant: " + nombreMant);

				tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :action: " + action);

				tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :nombreProceso: " + nombreProceso);

			}

	    	if (tr.isTraceActive()) {

	    		tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :contexto: " + contexto);                

	    	}

	    	

	    	//Se obtiene la aplicacion a través del proceso	    	

	    	if(nombreProceso.indexOf("q02b")>=0){

	    		aplicacionProceso = "q02b";

	    	}

	    	String iniXlnets=request.getParameter("XLNets");

	    	if("q02binicio".equals(nombreProceso) && iniXlnets!=null){

		    	if (tr.isTraceActive()) {

	    			tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " : ACCESO XLNETS");                

			    } 

		    	accesoLogin = false;

	    	}

	    	//COMPROBACIONES DE AUTENTICACION DEL USUARIO

//	    	Se obtiene la aplicación en la cual nos encontramos

 		    String aplicacionContextoNulo = null;

	 	    if(nombreProceso.indexOf("q02b")>=0){  

	 			   aplicacionContextoNulo = "q02b";

	 		}    

	 		 //Se comprueba el acceso del login

		    if(!accesoLogin){

		    	//Método privado que da acceso al login

		    	 this.inicioAccesoUsuarioPki(servletRequest,servletResponse,filterChain,contexto,nombreProceso);

		    }else{	  		    

		    	if (contexto == null){

		    		 if (tr.isTraceActive()){    

		    			   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Contexto NULL");

		    			   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Comparación inicio: " + nombreProceso.indexOf("inicio"));

		    			   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Comparación q02bLogin: " + nombreProceso.equals("q02bLogin"));

		    		   }

		    		    

		    		   if (!nombreProceso.equals(aplicacionContextoNulo+"Login") &&  !nombreProceso.equals(aplicacionContextoNulo+"Login2008SM") && !nombreProceso.equals(aplicacionContextoNulo+"LoginCMF")){

		    			   //si intentan entrar a traves de una url pero sin contesto le mandamos al login:

		    			   this.redireccionarLogin(request,servletResponse,aplicacionContextoNulo);

		    		   }else{

		    			   //si hay contexto le mandamos a depachar

		    			   filterChain.doFilter(servletRequest, servletResponse);

		    		   } 

	    		}else{

	    			

	    			if (!nombreProceso.equals(aplicacionContextoNulo+"Login") &&  !nombreProceso.equals(aplicacionContextoNulo+"Login2008SM") && !nombreProceso.equals(aplicacionContextoNulo+"LoginCMF")){

	    			   //si hay contexto y es cualquier página menos el login le dejamos que siga a delante

	    				this.inicioAccesoUsuario(servletRequest,servletResponse,filterChain,contexto,nombreMant,nombreProceso);	    				

	    		    }else{

//	    		    	si hay contexto, pero es la de login (caso de que hayan hecho un reload le mandamos al login)

	    		    	filterChain.doFilter(servletRequest, servletResponse);

	    		    }

	    		}

		    }

	  }catch (Exception ex) {

		  java.io.StringWriter 	sw = new java.io.StringWriter();

		  java.io.PrintWriter 	pw = new java.io.PrintWriter(sw);

		  ex.printStackTrace(pw);

		  if (tr.isTraceActive()){    

			  tr.trace(COMPONENTE, Q70TraceLevel.ERROR,this.getClass().getName() + TRACE_METODO + sw.getBuffer().toString());

		  } 

		  //Se redirecciona a la página de error

		  this.redireccionarError(request,servletResponse,this.getFilterConfig());   

	  }

    }

   

    

    /**

     * Método que permite el acceso a un usuario de Xlnets

     * 

     * @param ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain,Q70ContextoEJIE contexto,String nombreProceso

     * 

     * @throws Exception

     */

    private void inicioAccesoUsuarioPki(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain,Q70ContextoEJIE contexto,String nombreProceso) throws Exception{

        //Se declaran las variables que no se van a modificar

        final String TRACE_METODO 			= ":inicioAccesoUsuarioPki:";

        final String USUARIO_CONTEXTO   	= "user";

        

        //Variables de Xlnets

	    boolean xlnetsActivo	 			= false;

		boolean xlnetNoOk 		 			= false;

		

    	//Variables que se obtienen de la request

    	HttpServletRequest 	request 	= (HttpServletRequest) servletRequest;

    	//HttpSession 		session 	= request.getSession();

    		    

    	try{

    		if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + TRACE_METODO + ":entrando");                

            }

        	

		    if("q02bSubmitUserNookXLNets".equals(nombreProceso)){

		    	if (tr.isTraceActive()) {

		    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :URI: " + nombreProceso);                

		        }  

			    filterChain.doFilter(servletRequest, servletResponse);

			}else{

				//Se comprueba si el contexto tiene valor

				if(contexto!=null){

					if (tr.isTraceActive()){

					    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + TRACE_METODO + ":CONTEXTO NO NULO");                

			        }

				    //Variable que tendrá valor en el caso de que estemos en XLNETs

				    String iniXlnets=request.getParameter("XLNets");

				    //Si la variable tiene valor

				    if(iniXlnets!=null ){

				    	if (tr.isTraceActive()){

						    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + TRACE_METODO + ":CONTEXTO NO NULO:Recogemos Parámetros");                

				        }

						//Se obtiene una variable que indica si la obtención de parámetros XLNETs ha ido correctamente

						xlnetNoOk = this.registrarParametrosXlnets(servletRequest,servletResponse, true);

				    }  

				    if(xlnetNoOk){

						if (tr.isTraceActive()) {

							tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " redireccionamos a error XLNets.");                

						}  

						//Te redirecciona a la URL de Xlnets

						//this.redireccionarError(request,servletResponse,PAG_ERROR_USUARIO);

						this.redireccionarError(request,servletResponse,this.getFilterConfig());

					}else{						

						//Se invoca al método que gestiona la petición de request de Xlnets

						contexto.set("esUsuarioXLNets",Boolean.valueOf(true));

						if(this.estaAutenticado((String)contexto.get(USUARIO_CONTEXTO))){

					    	xlnetsActivo = true;

						}

						this.accesoUsuario(servletRequest,servletResponse,filterChain,contexto, xlnetsActivo);						

					}		

					//Se indica que tenemos usuario xlnets

				}//fin de contexto no nulo

			}

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + TRACE_METODO + ":estaAutenticado: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + TRACE_METODO + ": saliendo :");                

            }             	    

        }    

    }

    

    /**

     * Método que permite el acceso a un usuario de Xlnets

     * 

     * @param ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain,Q70ContextoEJIE contexto,String nombreProceso

     * 

     * @throws Exception      

     */

    private void inicioAccesoUsuario(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain,Q70ContextoEJIE contexto,String nombreMant,String nombreProceso) throws Exception{

        //Se declaran las variables que no se van a modificar

        final String TRACE_METODO = ":inicioAccesoUsuarioXlnets:";

        //Variables de Xlnets

	    //boolean xlnetsActivo	 			= false;

		boolean xlnetNoOk 		 			= false;

    	//Variables que se obtienen de la request

    	HttpServletRequest 	request 	= (HttpServletRequest) servletRequest;

    	//HttpSession 		session 	= request.getSession();

    	

    	try{  

    		if (tr.isTraceActive()){

    			tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + TRACE_METODO + ":entrando");                

    	    }

    		 

    		if("q02bSubmitUserNookXLNets".equals(nombreProceso)){

 		    	if (tr.isTraceActive()) {

 		    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :URI: " + nombreProceso);                

 		        }    

 			    filterChain.doFilter(servletRequest, servletResponse);

 			}else{  

 				//contexto.set("esUsuarioXLNets",new Boolean(true));

 				if(!this.estaAutenticado((String)contexto.get(USUARIO_CONTEXTO))){				

					//Se obtiene una variable que indica si la obtención de parámetros XLNETs ha ido correctamente

					//y se obtienen los datos de conexión

					xlnetNoOk = this.registrarParametrosXlnets(servletRequest,servletResponse, false);

					if(xlnetNoOk){

						if (tr.isTraceActive()) {

							tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " redireccionamos a XLNets.");                

						}  

						//Te redirecciona a la URL de Xlnets

						//this.redireccionarError(request,servletResponse,PAG_ERROR_USUARIO);

						this.redireccionarError(request,servletResponse,this.getFilterConfig());

					}else{						

						//Se invoca al método que gestiona la petición de request de Xlnets

						this.accesoUsuario(servletRequest,servletResponse,filterChain,contexto, false);

					}					

 				}else{

 					//Si ya está autenticado, se actualiza el idioma con lo que viene del portal

 					this.accesoUsuario(servletRequest,servletResponse,filterChain,contexto, false);

 				}     

 				//Hay que comprobar si el proceso al que quiere entrar tiene acceso, en función de su perfil

 				

 				/*if(!this.esProcesoPermitido((String)contexto.get(PERFIL_CONTEXTO),nombreMant)){

					//Error Acceso

					this.redireccionarError(request,servletResponse,PAG_ERROR_ACCESO);

				}*/

 			}

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + TRACE_METODO + ":error= " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + TRACE_METODO + ": saliendo :");                

            }             	    

        }    

    }



    

    /**

     * Método que redirecciona a una página en la que se le indica al usuario que no tiene permiso para acceder 

     * alguna parte.

     * @param request 

     * @param servletResponse 

     * @param filterConfig

     * @throws ServletException, IOException 

     */  

    public void redireccionarError(HttpServletRequest request, ServletResponse servletResponse,FilterConfig filterConfig)  throws ServletException, IOException{

		//Recuperamos la página de error a la que va a ir

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":redireccionarError: entrando");

			}	

	    	

	   	    //INICIO: CONSTRUCCIÓN DE LA RUTA

		   	String rutaProceso 	= "";//Ruta completa del proceso ej. s99bAnaliticasWar/comunJSP/s99binicio.do

		    String action		= "";//acción a ejecutar  ej. s99binicio.do

		    String nombreProceso= "";// nombre del proceso ej. s99binicio

		    

		    rutaProceso = (String)request.getRequestURI().substring(1);

		    action 		= rutaProceso.substring(rutaProceso.indexOf("/")+1);

		    

		    if(action.indexOf("/")!=-1){

		 	   action 			= action.substring(action.indexOf("/")+1);

		 	   nombreProceso 	= action.substring(0,action.indexOf("."));

		    }

		    //FIN: CONSTRUCCIÓN DE LA RUTA

		    

		    //Se comprueba la aplicacion en la cual nos entramos

		    String aplicacion = null;

		    if(nombreProceso.indexOf("q02b")>=0){

		    	aplicacion = "q02b";

		    }    

		    RequestDispatcher dispatcher = null;

		    //Con esta condición se evita un bucle infinito

		    //Si se vuelve con el .do s99bErrorAcceso se redirige a la página de error

	    	if (nombreProceso.indexOf(aplicacion+"ErrorAcceso")< 0){

	    		dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"ErrorAcceso.do");

	    	}else{

	    		dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"error.jsp");

	    	}

	    	dispatcher.forward(request, servletResponse);	    	

    	}catch(ServletException sex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            sex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarError: " + sw.getBuffer ().toString());            

            throw sex;

    	}catch(IOException ioex){

            java.io.StringWriter 	sw = new java.io.StringWriter();

            java.io.PrintWriter 	pw = new java.io.PrintWriter(sw);

            ioex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarError: " + sw.getBuffer ().toString());            

            throw ioex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " redireccionarError: saliendo");                

            }             	    

        }    	

    }

    

    

    /**

     * Método que redirecciona a una página en la que se le indica al usuario que no tiene permiso para acceder al Módulo

     * alguna parte.

     * @param request 

     * @param servletResponse 

     * @param filterConfig

     * @throws ServletException, IOException 

     */  

    public void redireccionarErrorMod(HttpServletRequest request, ServletResponse servletResponse,FilterConfig filterConfig)  throws ServletException, IOException{

		//Recuperamos la página de error a la que va a ir

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":redireccionarErrorMod: entrando");

			}	

	    	

	   	    //INICIO: CONSTRUCCIÓN DE LA RUTA

		   	String rutaProceso 	= "";//Ruta completa del proceso ej. s99bAnaliticasWar/comunJSP/s99binicio.do

		    String action		= "";//acción a ejecutar  ej. s99binicio.do

		    String nombreProceso= "";// nombre del proceso ej. s99binicio

		    

		    rutaProceso = (String)request.getRequestURI().substring(1);

		    action 		= rutaProceso.substring(rutaProceso.indexOf("/")+1);

		    

		    if(action.indexOf("/")!=-1){

		 	   action 			= action.substring(action.indexOf("/")+1);

		 	   nombreProceso 	= action.substring(0,action.indexOf("."));

		    }

		    //FIN: CONSTRUCCIÓN DE LA RUTA

		    

		    //Se comprueba la aplicacion en la cual nos entramos

		    String aplicacion = null;

		    if(nombreProceso.indexOf("q02b")>=0){

		    	aplicacion = "q02b";

		    }    

		    RequestDispatcher dispatcher = null;

		    //Con esta condición se evita un bucle infinito

		    //Si se vuelve con el .do s99bErrorAcceso se redirige a la página de error

	    	if (nombreProceso.indexOf(aplicacion+"ErrorModAcceso")< 0){

	    		dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"ErrorModAcceso.do");

		    //if (nombreProceso.indexOf(aplicacion+"ErrorAcceso")< 0){

	    	//	dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"ErrorAcceso.do");

	    	}else{

	    		dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"error.jsp");

	    	}

	    	dispatcher.forward(request, servletResponse);	    	

    	}catch(ServletException sex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            sex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarErrorMod: " + sw.getBuffer ().toString());            

            throw sex;

    	}catch(IOException ioex){

            java.io.StringWriter 	sw = new java.io.StringWriter();

            java.io.PrintWriter 	pw = new java.io.PrintWriter(sw);

            ioex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarErrorMod: " + sw.getBuffer ().toString());            

            throw ioex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " redireccionarErrorMod: saliendo");                

            }             	    

        }    	

    }

   



    

    /**

     * Método que comprueba si un usuario está autenticado.

     * @param niUsuario número interno del usuario

     * @return Si es null o vacío devuelve false, en caso contrario true.

     * @throws Exception

     */

    public boolean estaAutenticado(String niUsuario) throws Exception {

    	boolean estaAutenticado = false;

    	try{ 

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":estaAutenticado: entrando: " + ":niUsuario: " + niUsuario);

			}

	    	if (niUsuario != null && !niUsuario.equals("")){

	    		estaAutenticado = true;

	    	}

	    	return estaAutenticado;

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":estaAutenticado: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " estaAutenticado: saliendo con " + estaAutenticado);                

            }             	    

        }    	

    }

    

    

   

    

     /**

     * Método que obtiene los parámetros XLNETs y los registra en la sesion

     * 

     * @param ServletRequest servletRequest,ServletResponse servletResponse

     * 

     * @return boolean

     *  

     * @throws Exception

     */

    private boolean registrarParametrosXlnets(ServletRequest servletRequest,ServletResponse servletResponse, boolean pki) throws Exception{

        //Se declaran las variables que no se van a modificar

        final String TRACE_METODO 		= ":registrarParametrosXlnets:";

       	final String COD_USUARIO_XLNETS		= "codUsuarioXlnets";

        final String IDI_USUARIO_XLNETS		= "idiomaXlnets";

        final String DNI_USUARIO_XLNETS		= "dniXlnets";

        //Variables de Xlnets  

        String 	codUsuarioXlnets 			= null; 

        String 	idiomaXlnets	 			= null;

        String 	dniXlnets	 				= null; 

        boolean xlnetNoOk 		 			= false;

	    

        try{ 

        	//Variables que se obtienen de la request

        	HttpServletRequest 	request 	= (HttpServletRequest) servletRequest;

        	HttpSession 		session 	= request.getSession();

        	

			if (tr.isTraceActive()) {

				tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :entrando");                

			}  

			if (pki ){

				//Se invoca la clase de Geremua que contiene la información de seguridad del framework

				Q70GestorSeguridad gestorSeguridad = Q70GestorSeguridad.getSingleton();

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :gestorSeguridad.createSecurityUserInfo(request): init " );                

				}  

				//Se obtiene la información de XLNets del usuario a partir de la request

				Q70InformacionSeguridadUsuario datosXLNets =gestorSeguridad.createSecurityUserInfo(request);

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :datosXLNets.getSessionSecurityInf(&#8220;n38login&#8221): init " );                

				}

				//Se obtiene un vector con los datos correspondientes al login

				Vector vectorPermisos = (Vector)datosXLNets.getSessionSecurityInf("n38login");

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :(String)vectorPermisos.get(0): init " );                

				}

				//Se obtiene el código del usuario XLNets

				codUsuarioXlnets = (String)vectorPermisos.get(0);

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :session.setAttribute(COD_USUARIO_XLNETS,codUsuarioXlnets): init :codUsuarioXlnets: " + codUsuarioXlnets );                

				} 

				//Se obtiene un vector con los datos correspondientes al idioma

				Vector vectorIdioma = (Vector) datosXLNets.getSessionSecurityInf("n38idioma") ;  

				//Se obtiene el idioma de la sesión XLNets

				idiomaXlnets = (String)vectorIdioma.get(0);

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :n38idioma: " + datosXLNets.getSessionSecurityInf("n38idioma") );                

				}

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :session.setAttribute(IDI_USUARIO_XLNETS,idiomaXlnets): init :idiomaXlnets: " + idiomaXlnets );                

				}

				//Se obtiene un vector con los datos correspondientes al dni

				Vector vectorDni = (Vector) datosXLNets.getSessionSecurityInf("dni") ;  

				//Se obtiene el dni de la sesión XLNets

				dniXlnets = (String)vectorDni.get(0);

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :dni: " + datosXLNets.getSessionSecurityInf("dni") );                

				}

				if (tr.isTraceActive()) {

					tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :session.setAttribute(DNI_USUARIO_XLNETS,dniXlnets): init :dniXlnets: " + dniXlnets );                

				}

				//Se indica en la sesión el valor de dicho código

				session.setAttribute(COD_USUARIO_XLNETS,codUsuarioXlnets);

				session.setAttribute(IDI_USUARIO_XLNETS,idiomaXlnets);

				session.setAttribute(DNI_USUARIO_XLNETS,dniXlnets);

			}else{				

				//PRUEBAS IE

				//recuperamos los valores de un fichero de configuración			

				session.setAttribute(IDI_USUARIO_XLNETS,Q70ListenerUtils.getApplicationProperty("idiomaUsuarioLogin"));

				session.setAttribute(DNI_USUARIO_XLNETS,Q70ListenerUtils.getApplicationProperty("dniUsuarioLogin"));

			}

		}catch(Exception ex){

			if (tr.isTraceActive()) {

				tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :controladorLDAP: n38ItemSesion no tiene n38login.");                

			}  

			java.io.StringWriter sw = new java.io.StringWriter();

			java.io.PrintWriter pw = new java.io.PrintWriter(sw);

			ex.printStackTrace(pw);

			tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + TRACE_METODO + sw.getBuffer ().toString());

			xlnetNoOk = true;

		} 

		return xlnetNoOk;

    }

    

       

    /*Método que actualiza en session el idioma que le llega en la request, porque puede haber cambios de idioma sin pasar por la identificación del usuario*/

    private void actualizarIdiomaDePortal(ServletRequest servletRequest,Q70ContextoEJIE contexto) throws Exception

    {

     	final String TRACE_METODO 			= ":actualizarIdiomaDePortal:";

     	final String NOMBRE_VAR_IDIOMA_PORTAL		= "NOMBRE_REQUEST_IDIOMA_PORTAL";

     	final String IDIOMA_ES   			= "IDIOMA_ES";

        final String IDIOMA_EU   			= "IDIOMA_EU";

        final String IDIOMA_PORTAL_ES  			= "IDIOMA_PORTAL_ES";

        final String CONTEXTO_IDIOMA			= "idioma";

        

       try{

    	   HttpServletRequest 	request 	= (HttpServletRequest) servletRequest;

    	   //INICIO: IDIOMA SE COGE DEL PORTAL DE APLICACIONES, viene es/eu

    	   String nombreVarIdiomaPortal = Q02bConstantes.getString(NOMBRE_VAR_IDIOMA_PORTAL);

		   //System.out.println(this.getClass().getName() + TRACE_METODO + " Nombre de la variable que recupera el idioma del portal: " + nombreVarIdiomaPortal);                

		   String idioma = request.getParameter(nombreVarIdiomaPortal);

		   if (tr.isTraceActive()) {

				   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " idioma de PORTAL:" + idioma);                

		   } 

		   if(idioma != null && !idioma.equals("")){

		   	tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + "El idioma actualmente almecenado en sesion=" + contexto.get(CONTEXTO_IDIOMA));                

		   	//System.out.println(this.getClass().getName() + TRACE_METODO + " El idioma actualmente almecenado en sesion=" + contexto.get(CONTEXTO_IDIOMA));                

		   	if(!idioma.equals((contexto.get(CONTEXTO_IDIOMA)==null?"":contexto.get(CONTEXTO_IDIOMA)))){

			   	tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + "Se actualiza el idioma con el del Portal: . " + idioma);                

			   	//System.out.println("Se actualiza el idioma con el del Portal: . " + idioma);

			   	if(Q70ListenerUtils.getApplicationProperty(IDIOMA_PORTAL_ES).equals(idioma)){

					//contexto.set(CONTEXTO_IDIOMA_COMPARTIDO,Q70ListenerUtils.getApplicationProperty(IDIOMA_ES));

					contexto.set(CONTEXTO_IDIOMA,Q70ListenerUtils.getApplicationProperty(IDIOMA_ES));

				} else {//Si no es Castellano, el idioma será euskera

					//contexto.set(CONTEXTO_IDIOMA_COMPARTIDO,Q70ListenerUtils.getApplicationProperty(IDIOMA_EU));

					contexto.set(CONTEXTO_IDIOMA,Q70ListenerUtils.getApplicationProperty(IDIOMA_EU));

				}

		   	}

		   }

       }catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            //System.out.println("Error " + TRACE_METODO + ":" + ex.getMessage());

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":"+ TRACE_METODO + ":" + sw.getBuffer ().toString());            

            //throw ex;

        }

       

        

        

    }

    

     /**

     * Método que permite el acceso a un usuario de Xlnets

     * 

     * @param ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain,Q70ContextoEJIE contexto

     * 

     * @throws Exception

     */

    private void accesoUsuario(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain,Q70ContextoEJIE contexto, boolean xlnetsActivo) throws Exception

    {

        //Se declaran las variables que no se van a modificar

    	  //Se declaran las variables que no se van a modificar

        final String TRACE_METODO 				= ":accesoUsuario:";

        final String COD_USUARIO_XLNETS			= "codUsuarioXlnets";

        final String IDI_USUARIO_XLNETS			= "idiomaXlnets";

        final String DNI_USUARIO_XLNETS			= "dniXlnets";

        final String USUARIO_CONTEXTO   		= "user";

        final String USUARIO_DENIED				= "userDenied";

        //final String PASSWORD_EXPIRED			= "passwordExpired";

        final String IDIOMA_XLNETS_ES   		= "IDIOMA_XLNETS_ES";

        final String IDIOMA_ES   				= "IDIOMA_ES";

        final String IDIOMA_EU   				= "IDIOMA_EU";

        final String CONTEXTO_IDIOMA			= "idioma";

        final String CONTEXTO_IDIOMA_COMPARTIDO	= "idiomaCompartido";

        //final String CONTEXTO_APLICACION		= "aplicacion";

        final String ID_SUPER_USER				= "ID_SUPER_USER";        

        final String NOMBRE_VAR_IDIOMA_PORTAL	= "NOMBRE_REQUEST_IDIOMA_PORTAL";

        

        //Variable usuario

        Q02bUsuario usuario 		= null;

                

        //Se obtiene la request y la sesion

        HttpServletRequest 	request = (HttpServletRequest) servletRequest;

        HttpSession 		session = request.getSession();

 

	   	//INICIO: CONSTRUCCIÓN DE LA RUTA

		String rutaProceso 	= "";//Ruta completa del proceso ej. q02bAnaliticasWar/comunJSP/q02binicio.do

		String war 		= ""; // nombre de modulo war ej. q02bAnaliticasWar

		String action		= "";//acción a ejecutar  ej. q02binicio.do

		String strut		= "";// ej. comunJSP 

		String nombreProceso	= "";// nombre del proceso ej. q02binicio

		String nombreProcMnto=""; //nombre del proceso que se le dará en el mnto de procesos agentesJSP, se daría de alta en la tabla de procesos como agentes 

//		Variable que indica si es un super-usuario

        boolean		esSuperUsuario	= false;

       

		try{			

			rutaProceso =(String)request.getRequestURI().substring(1);

			war 		= rutaProceso.substring(0,rutaProceso.indexOf("/"));

			action 		= rutaProceso.substring(rutaProceso.indexOf("/")+1);

	    

		    if(action.indexOf("/")!=-1){

		 	   strut = action.substring(0,action.indexOf("/"));//Tenemos el strut y el action

		 	   nombreProcMnto=strut.substring(0,strut.indexOf("JSP"));

		 	   action = action.substring(action.indexOf("/")+1);		 	   

		 	   nombreProceso = action.substring(0,action.indexOf("."));

		    }

		    //FIN: CONSTRUCCIÓN DE LA RUTA

		    

		    if (tr.isTraceActive()) {

				   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + ":WAR:"+war+":strut:"+strut);                

			} 

	    

		    //Se obtiene la aplicacion a través del proceso

		    String aplicacionProceso = null;

		    if(nombreProceso.indexOf("q02b")>=0){

		    	aplicacionProceso = "q02b";

		    }   

		    String iniXlnets=request.getParameter("XLNets");

			if((aplicacionProceso+"inicio").equals(nombreProceso) && !xlnetsActivo && iniXlnets == null){

				   if (tr.isTraceActive()) {

					   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " q02binicio y xlnetsActivo no activo  (Paso 1): Envia a /comunJSP/q02bLogin.do.");                

				   }  

				   //Se redirecciona el flujo al login de Xlnets

	    		   this.redireccionarFlujo(request,servletResponse,"/comunJSP/"+aplicacionProceso+"LoginXLNets.do",this.getFilterConfig());	   

	    	}else{

		   

//	    		Si el contexto es nulo se redirecciona a la dirección

	    		if(contexto== null){   

	    			 if (tr.isTraceActive()) {

					   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + aplicacionProceso+"Login.do y XlnetsActivo " +  xlnetsActivo + "  pero sin contexto (Paso 2).");                

					 }  

	    			 //Se redirecciona al .do entrante

	    			 filterChain.doFilter(servletRequest, servletResponse);

	    		 }else{     

	    			 //INICIO: CONTEXTO NO NULO  

					  if (tr.isTraceActive()) {

						   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + aplicacionProceso+"Login.do y XlnetsActivo activo y con contexto (Paso 3).");                

					  }    

			    	  //Se obtiene la variable que indica si es super-usuario

			    	  esSuperUsuario = ((Boolean)contexto.get("esSuperUsuario")).booleanValue();	

					  //Se comprueba si el usuario está autenticado (mirando la variable del contexto)

	    			  if (!this.estaAutenticado((String)contexto.get(USUARIO_CONTEXTO)) || request.getParameter("dniDemo") != null){

	    				  if (tr.isTraceActive()) {

							   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Usuario XLNets no autenticado. Comprobamos sus datos.");                

						   }    

						   //Se obtiene el usuario Xlnets de la sesión

						   String dniUsuarioXlnets = (String)session.getAttribute(DNI_USUARIO_XLNETS);	

						   //String codUsuarioXlnets = (String)session.getAttribute(COD_USUARIO_XLNETS);

						   //Se obtiene el usuario   

						   String dniDemo = request.getParameter("dniDemo");

						   if (dniDemo != null  && !dniDemo.equals("")){

							   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + ":dniDemo="+dniDemo);                

							   } 							  

							   usuario = this.obtenerUsuario(dniDemo);

						   }else{

							   usuario = this.obtenerUsuario(dniUsuarioXlnets);

						   }

	    				   

	    				   //Si el usuario existe entro

	    				   //Se obtiene el usuario

	   			    	   //usuario = this.obtenerUsuario(codUsuarioXlnets);

	   			    	   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + ":Usuario="+usuario);                

						   } 

					       //Si el usuario existe entro

				    	   if(usuario!=null){

				    		   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Usuario XLNets Ok en q02b.");                

							   } 

							   //Se indica que es un usuario válido

							   session.setAttribute(USUARIO_DENIED, Boolean.valueOf(false));

							   //Se borra de la sesión el código Xlnets puesto que ya no hace falta

							   session.removeAttribute(COD_USUARIO_XLNETS);

							   //Se borra de la sesión el dni Xlnets puesto que ya no hace falta

							   session.removeAttribute(DNI_USUARIO_XLNETS);

							   

							   //INICIO: IDIOMA XLNETS

							   //INICIO: IDIOMA SE COGE DEL PORTAL DE APLICACIONES, viene es/eu

							   

							   String nombreVarIdiomaPortal = Q02bConstantes.getString(NOMBRE_VAR_IDIOMA_PORTAL);							   

							   String idiomaPortal = request.getParameter(nombreVarIdiomaPortal);

							   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " idiomaPortal: . " + idiomaPortal);                

							   }  

	    					   //Se obtiene el idioma de Xlnets

							   if(idiomaPortal != null && !idiomaPortal.equals("")){								   	

								    this.actualizarIdiomaDePortal(request, contexto);								   

							   }else{ 

								   //se recupera de XLNets

		    					   String idiomaXlnets = (String)session.getAttribute(IDI_USUARIO_XLNETS);

								   if (tr.isTraceActive()) {

									   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " idiomaXlnets EN SESION: . " + idiomaXlnets);                

								   }     

								   //Se comprueba si la variable idiomaXlnets tiene valor

								   if (idiomaXlnets != null  && !idiomaXlnets.equals("")){

			    					   //Si el idioma es Castellano, se aplica al contexto de aplicación dicho idioma

			    					   if(Q70ListenerUtils.getApplicationProperty(IDIOMA_XLNETS_ES).equals(idiomaXlnets)){

			    						   contexto.set(CONTEXTO_IDIOMA_COMPARTIDO,Q70ListenerUtils.getApplicationProperty(IDIOMA_ES));

			    						   contexto.set(CONTEXTO_IDIOMA,Q70ListenerUtils.getApplicationProperty(IDIOMA_ES));

			    					   } else {//Si no es Castellano, el idioma será euskera

			    						   contexto.set(CONTEXTO_IDIOMA_COMPARTIDO,Q70ListenerUtils.getApplicationProperty(IDIOMA_EU));

			    						   contexto.set(CONTEXTO_IDIOMA,Q70ListenerUtils.getApplicationProperty(IDIOMA_EU));

			    					   }	

								   }else{

									    //En el caso de que no tuviera valor se indica por defecto castellano

									   contexto.set(CONTEXTO_IDIOMA_COMPARTIDO,Q70ListenerUtils.getApplicationProperty(IDIOMA_ES));

									   contexto.set(CONTEXTO_IDIOMA,Q70ListenerUtils.getApplicationProperty(IDIOMA_ES));

								   }

		    					   //Se borra de la sesión el idioma Xlnets puest

								   session.removeAttribute(IDI_USUARIO_XLNETS);

							   }//fin de comprobación de idiomas

							   //Se obtiene el DNI del usuario

							   String usuarioDNI = usuario.getDni();

							   if (tr.isTraceActive()) {  

						    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + "Comprobamos si es Super-User para: " + usuarioDNI);                

						       }   							   

							   //Se comprueba si es un super-usuario

							   if (tr.isTraceActive()) {

						    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + "Parametrizado: " + Q02bConstantes.getString(ID_SUPER_USER));                

						       }   	

							   if(Q02bConstantes.getString(ID_SUPER_USER).indexOf(usuarioDNI)>=0){

								   //Si el usuario es un super-usuario modificamos la variable del contexto

								   //para poder acceder a ella siempre que se desee

								   contexto.set("esSuperUsuario",Boolean.valueOf(true));

								   //Se modifica la variable local

								   esSuperUsuario = true;

							   }    

							   if (tr.isTraceActive()) {

						    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Es Super-User : " + esSuperUsuario);                

						       }

							   //INICIO: CARGA DE AUTENTICADOR

							   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :cargaAutenticador:init");                

							   } 

							   //Se carga el autenticador

						   	   this.cargaAutenticador(contexto, usuario);

						   	   this.cargaPlazos(contexto, usuario);

						   	   	//INICIO: MIGAS DE PAN

							   if (tr.isTraceActive()) {

									tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :crearMigasPan: init ");                

							   }

						       this.crearMigasPan(request,contexto);

							   //Se crea el migas de pan para el titulo de la aplicación

						       this.crearMigasPanTitle(request,contexto);

							   if (tr.isTraceActive()) {

									tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :crearMigasPan: fin ");                

							   }    

						       //FIN: MIGAS DE PAN

							   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :cargaAutenticador:fin");                

							   } 

							   //FIN: CARGA DE AUTENTICADOR					   

							   //Cargamos el nombre de la aplicación

							   contexto.set("aplicacion",((HttpServletRequest) servletRequest).getSession().getServletContext().getInitParameter("aplicacion"));

							   //Se obtiene la aplicacion

							   String aplicacion = (String)contexto.get("aplicacion");

							   //Variable que contiene si se tiene acceso						   							   

							   boolean acceso = false;

							   //En caso de ser un super-usuario, siempre se tiene acceso

							   if(esSuperUsuario){

								   acceso = true;

							   }else{

								   //Se obtiene si tenemos permiso o no para un proceso determinado

								   acceso = this.esProcesoPermitido(usuario.getId(),nombreProcMnto,aplicacion);

								   //acceso = this.esProcesoPermitido(usuario.getId(),rutaProceso,aplicacion);

							   }			

							   //INICIO:MODULO WAR

							   if (tr.isTraceActive()) {

									tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :obtenerNombreModulo: init ");                

							   }

							   contexto.set("modulo",this.obtenerNombreModulo(request,contexto));

							   if (tr.isTraceActive()) { 

									tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :obtenerNombreModulo: fin ");                

							   }

							   //Si se tiene permiso se entra

							   if(acceso){

								   if (tr.isTraceActive()) {

							    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Permiso concedido : " + acceso );                

							       }  

						    	   //Si no es un super-usuario, no se cargan los controles

								   /*

						    	   if(!esSuperUsuario){

							    	   //Se cargan los controles

							    	   long numProceso = this.esPermitido((String)contexto.get("user"),rutaProceso,aplicacion);

							    	   this.cargarControles(this.obtenerControles((String)contexto.get("user"),numProceso),contexto);

						    	   }

						    	   */	

								   filterChain.doFilter(servletRequest, servletResponse); 

						       }else{

						    	   if (tr.isTraceActive()) {

							    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Permiso denegado : " + action );                

							       }

						    	   if(nombreProceso.indexOf(aplicacion+"ErrorAcceso")>=0){

						    		   //Se redirige el flujo

							    	   filterChain.doFilter(servletRequest, servletResponse); 

						    	   }else if (nombreProceso.indexOf("PopUp")!=-1){

						    		   this.redireccionarErrorPopUp(request,servletResponse,aplicacion,this.getFilterConfig());

						    	   }else{ 

						    		   this.redireccionarFlujo(request,servletResponse,"/comunJSP/"+aplicacion+"ErrorAcceso.do",this.getFilterConfig());

						    	   }

						       }     

				    	   } else {//INICIO: USUARIO NO EXISTE (usuario es nulo)

	    					   //Se indica que es un usuario no válido

							   if (tr.isTraceActive()) {

								   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Usuario XLNets no existe en s99b.");                

							   } 

							   //Usuario XLNets no existe en s99b

	    					   session.setAttribute(USUARIO_DENIED, Boolean.valueOf(true));

	    					   //Se redirecciona el flujo a la URL de Xlnets

	    					   this.redireccionarFlujo(request,servletResponse,ERROR_AUTENTICACION,this.getFilterConfig());    					     					   

	    				   }//FIN: USUARIO NO EXISTE  			

	    			  } else { //USUARIO AUTENTICADO volvemos a comprobar la seguridad

	    				  if (tr.isTraceActive()) {

					    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Está autenticado: Pasa Filtro de seguridad al proceso.");                

					       }  

					       //Aplicación en la que nos encontramos

	    				   xlnetsActivo = true;

	  					   String aplicacion = (String)contexto.get("aplicacion");

					       //Variable que contiene si se tiene acceso						   							   

						   boolean acceso = false;

						   boolean isModuloActivo=false;

						   //En caso de ser un super-usuario, siempre se tiene acceso

						   if(esSuperUsuario){

							   acceso = true;

							   isModuloActivo=true;

						   }else{

                                //Comprobar si el módulo está activo para el proceso en el que se entra, sino alerta módulo inactivo temporalmente							  

							   isModuloActivo=this.esModuloActivo(nombreProcMnto,aplicacion);

							   

							   //Se obtiene si tenemos permiso o no para un proceso determinado	

							   acceso = this.esProcesoPermitido((String)contexto.get("user"),nombreProcMnto,aplicacion);

						   }

						   if (tr.isTraceActive()) {

							   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :isModuloActivo:" + isModuloActivo);                

						   }

						   if (tr.isTraceActive()) {

							   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :esPermitido:" + acceso);                

						   }

						   //INICIO:MODULO WAR

						   if (tr.isTraceActive()) {

								tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :obtenerNombreModulo: init ");                

						   }						   

						   contexto.set("modulo",this.obtenerNombreModulo(request,contexto));

						   if (tr.isTraceActive()) {

								 tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :obtenerNombreModulo: fin ");                

						   }

						   if(acceso && isModuloActivo){						   

								//INICIO: MIGAS DE PAN

							   if (tr.isTraceActive()) {

									tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :crearMigasPan: init ");                

							   }

						       this.crearMigasPan(request,contexto);

							   //Se crea el migas de pan para el titulo de la aplicación

						       this.crearMigasPanTitle(request,contexto);

							   if (tr.isTraceActive()) {

									tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " :crearMigasPan: fin ");                

							   }    

						       //FIN: MIGAS DE PAN

							   if (tr.isTraceActive()) {

						    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Permiso concedido : " + action );                

						       }  

							   filterChain.doFilter(servletRequest, servletResponse); 

					       }else{

					    	   if (tr.isTraceActive()) {

						    	   tr.trace(COMPONENTE, Q70TraceLevel.DEBUG,this.getClass().getName() + TRACE_METODO + " Permiso denegado : " + action );                

						       }   

					    	   if(nombreProceso.indexOf(aplicacion+"ErrorAcceso")>=0){

					    		   //Se redirige el flujo

						    	   filterChain.doFilter(servletRequest, servletResponse); 

					    	   }else if (nombreProceso.indexOf("PopUp")!=-1){   

					    		   this.redireccionarErrorPopUp(request,servletResponse,aplicacion,this.getFilterConfig());

					    	   }else{					    		   

					    		   if (!isModuloActivo){

					    		   	   this.redireccionarErrorMod(request,servletResponse,this.getFilterConfig());
                                   }
					    		   else{	   

					    			   this.redireccionarError(request,servletResponse,this.getFilterConfig()); 
                                   }
					    	   }

					       } 	

	    			  }//FIN: USUARIO AUTENTICADO

	    		 }//FIN: CONTEXTO NO NULO 	 	    		

	    	}				

		}catch(Exception ex){ 

			java.io.StringWriter sw = new java.io.StringWriter();

			java.io.PrintWriter pw = new java.io.PrintWriter(sw);

			ex.printStackTrace(pw);

			tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + TRACE_METODO + sw.getBuffer ().toString());

			throw ex;

	    }  

    }

    

    

    

    /**

     * Método que llama a un Bean para recuperar los datos de un usuario

     * @param id del Usuario

     * @return Q02bUsuario con los datos del usuario encontrado, null en caso de que el usuario no exista.

     * @throws Exception

     */

    public Q02bUsuario obtenerUsuario(String dniUsuario) throws Exception {

    	try{ 

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":obtenerUsuario: entrando: "

						+ ":idUsuario: " + dniUsuario);

			}

	    	this.beanSeguridad = new Q02bSeguridadBean();

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":obtenerUsuario: entrando: "

						+ ":idUsuario: " + dniUsuario);

			} 

	    	Q02bUsuario usuario= this.beanSeguridad.obtenerUsuario(dniUsuario);

	    	

	    	return usuario;

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":obtenerUsuario: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + ":obtenerUsuario: saliendo");                

            }             	    

        }    	

    }

    

     /**

     * Método que carga en el contexto los datos necesarios del usuario.

     * @param contexto Q70ContextoEJIE.

     * @param usuario Datos del usuario.

     * @throws Exception 

     */        

    public void cargaAutenticador( Q70ContextoEJIE contexto, Q02bUsuario usuario) throws Exception {

    	  

    	try{   

	    	//System.out.println("El vo de usuario tiene " +  usuario);

	    	//Cargamos en el contexto de usuario de aplicación los datos de autenticación recuperados para ese usuario

	    	//tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":cargaAutenticador: usuario= " +usuario );

	    	contexto.set(USUARIO_CONTEXTO , usuario.getId());  

	    	contexto.set(NOMBRE_USUARIO_CONTEXTO, usuario.getNombre() + " " + usuario.getApellido1() + " " + usuario.getApellido2() );

	    	contexto.set(PERFIL_CONTEXTO, usuario.getNiPerfil());

	    	contexto.set(PROVINCIA_CONTEXTO, Q02bFormatData.esNull(usuario.getNiProvincia()));  	    	//

	    	contexto.set(DESCPROVINCIA_CONTEXTO, Q02bFormatData.esNull(usuario.getDescProvincia()));  	    	//

	    	contexto.set(MUNICIPIO_CONTEXTO, Q02bFormatData.esNull(usuario.getNiMunicipio()));	    	

	    	contexto.set(DESCMUNICIPIO_CONTEXTO, Q02bFormatData.esNull(usuario.getDescMunicipio()));  	    	//

	    	

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":cargaAutenticador: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " cargaAutenticador: saliendo");                

            }             	    

       }    	

    } 

    

   

    /**

     * Método que carga en el contexto los datos necesarios del usuario.

     * @param contexto Q70ContextoEJIE.

     * @param usuario Datos del usuario.

     * @throws Exception 

     */        

    public void cargaPlazos( Q70ContextoEJIE contexto, Q02bUsuario usuario) throws Exception {

    	ArrayList listaPlazos = new ArrayList();

    	try{

    		if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":cargaPlazos: entrando: ");

			}

	    	this.beanSeguridad = new Q02bSeguridadBean();	    	

	    	//ArrayList listaPlazos = this.beanSeguridad.obtenerPlazos(usuario, 0);

	    	contexto.set(PLAZOS_CONTEXTO , listaPlazos);  

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":cargaPlazos: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " cargaPlazos: saliendo");                

            }             	    

       }    	

    }    

    

    

    /**

     * Método que comprueba si un usuario tiene permiso para ejecutar un proceso.

     * @param niUsuario número interno del usuario en bbdd. 

     * @param rutaProceso Ruta completa del proceso a ejecutar ej. s99bAnaliticasWar\comunJSP\s99binicio.do.

     * @param aplicacion Aplicación en la que nos encontramos

     * @return número interno del proceso al que se tiene permiso, -1 en caso de no tener permiso.

     * @throws Exception 

     */    

    public boolean esProcesoPermitido(String niUsuario,String nombreProcMnto,String aplicacion) throws Exception {

    	boolean esPermitido = false;

    	//String perfilesAcceso = "";

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":esPermitido: entrando"

						+ "niUsuario:" + niUsuario

						+ "Proceso: " + nombreProcMnto);	

			}	 

	    	

    	/*

	    	if(!"".equals(rutaProceso)){

				if (rutaProceso.indexOf(aplicacion+"ErrorAcceso")!= -1  || rutaProceso.indexOf(aplicacion+"Login")!= -1){

					esPermitido = true;

				}else{

					this.beanSeguridad = new Q02bSeguridadBean();

//					Se accede al properties, a ver si ese Mant tiene acesso el perfil del Usuario

		    		perfilesAcceso = Q02bConstantes.getString(rutaProceso);

		    		tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":esProcesoPermitido:-> perfilesAcceso: "+ perfilesAcceso);

		    		if(perfilesAcceso != null && !perfilesAcceso.equals("")){

		    			if (perfilesAcceso.indexOf(niUsuario)!= -1)

		    				esPermitido = true;

		    		}

			    	//numProceso = this.beanSeguridad.e .esProcesoPermitido(niUsuario,rutaProceso);

				}

			} */    	

	    	

	    	if (!nombreProcMnto.equals(""))

	    	{

	    		this.beanSeguridad = new Q02bSeguridadBean();

	    		if (tr.isTraceActive()){

					tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":obtenerEstado del Módulo: entrando: "

							+ ":proceso: " + nombreProcMnto + " usuario:"+ niUsuario );					

					} 

	    		esPermitido=this.beanSeguridad.esProcesoPermitido(niUsuario,nombreProcMnto);

	    	}	

	    	

	    	

	    	

	    	//esPermitido = true; 

	    	return esPermitido;

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":esPermitido: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " esPermitido: saliendo con " + esPermitido);                

            }             	    

        }    	

    }

   

    

    /**

     * Método que comprueba si el módulo al que se intenta acceder está activo    

     * @param nombreProcMnto nombre del proceso, se corresponde con el nombre de carpeta. q02bCuestionariosWar\agentesJSP ->agentes

     * @param aplicacion Aplicación en la que nos encontramos

     * @return  -1 en caso de no estar activo , 0 en caso contrario

     * @throws Exception 

     */    

    public boolean esModuloActivo(String nombreProcMnto,String aplicacion) throws Exception {

    	boolean esActivo = false;

    	String estadoModulo = "";

    	

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":esModuloActivo: entrando"						

						+ " rutaProceso: " + nombreProcMnto);	

			} 

	    	if (!nombreProcMnto.equals(""))

	    	{

	    		this.beanSeguridad = new Q02bSeguridadBean();

	    		if (tr.isTraceActive()){

					tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":obtenerEstado del Módulo: entrando: "

							+ ":proceso: " + nombreProcMnto);				} 

	    		estadoModulo= this.beanSeguridad.obtenerEstadoModulo(nombreProcMnto);

	    		if ( estadoModulo!= null && estadoModulo.equals(Q02bConstantes.REGISTRO_ACTIVO)){

	    			esActivo=true;
                }
	    	}	

	    	return esActivo;

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":esModuloActivo: " + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " esModuloActivo: saliendo con " + esActivo);                

            }             	    

        }    	

    }

   

    

    

    

    

    

    

    

    /**

     * Método que devuelve el nombre del Módulo War

     * 

     * @param HttpServletRequest request, Q70ContextoEJIE contexto

     * 

     * @throws Exception

     */

    private String obtenerNombreModulo(HttpServletRequest request, Q70ContextoEJIE contexto) throws Exception {

        //Definición de variables que no van a variar

    	final String METODO 				= ":obtenerNombreModulo:";

    	String nombreModulo					= "";

    	String rutaCompleta					= null;	

    	

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + METODO + " entrando ");

			}

		    //Se obtiene la ruta completa: será de la forma s99bXXXXWar/YYYYJSP/s99bZZZZ.do

		    rutaCompleta =(String)request.getRequestURI().substring(1);

		    //Se comprueba que la ruta exista

		    if(!Q02bFormatData.esVacio(rutaCompleta) && contexto!=null){

                //Se obtiene la aplicacion

	    	   	String aplicacion    	= (String)contexto.get("aplicacion");

		    	//Se obtiene el modulo: s99bXXXXWar

	    	    nombreModulo 	= rutaCompleta.substring(0,rutaCompleta.indexOf("/"));

	       		//Se obtiene el parámetro XXXXX

	    	    String moduloAux = nombreModulo.replaceFirst(aplicacion,"");

	    	    nombreModulo = moduloAux.substring(0,moduloAux.indexOf("W"));	

		    }

	    	

	    	return nombreModulo;

    	}catch(Exception ex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + METODO + sw.getBuffer ().toString());            

            throw ex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + METODO + " saliendo ");                

            }             	    

        }   

    }

    

    

    

    /**

     * Método que redirecciona a un pop up en la que se le indica al usuario que no tiene permiso para acceder 

     * alguna parte.

     * @param request 

     * @param servletResponse 

     * @param aplicacion

     * @param filterConfig

     * @throws ServletException, IOException 

     */  

    public void redireccionarErrorPopUp(HttpServletRequest request,ServletResponse servletResponse,

    		String aplicacion,FilterConfig filterConfig) 

    	throws ServletException, IOException{

		//recuperamos la página de error a la que va a ir

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":redireccionarErrorPopUp: entrando");

			}	

	    	RequestDispatcher dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"ErrorAccesoPopUp.do");

	    	dispatcher.forward(request, servletResponse);

    	}catch(ServletException sex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            sex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarErrorPopUp: " + sw.getBuffer ().toString());            

            throw sex;

    	}catch(IOException ioex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ioex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarErrorPopUp: " + sw.getBuffer ().toString());            

            throw ioex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " redireccionarErrorPopUp: saliendo");                

            }             	    

        }    	

    }

    

   

    

    

    /**

     * Método que redirecciona el flujo a una parte concreta que se le indica

     * @param request 

     * @param servletResponse 

     * @param patron

     * @param FilterConfig filterConfig

     * @return 

     * @throws ServletException, IOException  

     */  

    public void redireccionarFlujo(HttpServletRequest request,ServletResponse servletResponse,

    		String patron,FilterConfig filterConfig) throws ServletException, IOException{

    	//Variables que no se modifican

    	final String METODO = ":redireccionarFlujo:";

    	//recuperamos la página de error a la que va a ir

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + METODO + " entrando");

			}

	    	RequestDispatcher dispatcher = filterConfig.getServletContext().getRequestDispatcher(patron);

			dispatcher.forward(request, servletResponse);

    	}catch(ServletException sex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            sex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + METODO + sw.getBuffer ().toString());            

            throw sex;

    	}catch(IOException ioex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ioex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + METODO + sw.getBuffer ().toString());            

            throw ioex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + METODO + " saliendo");                

            }             	    

        }    	

    }

    /**

     * Método que redirecciona a una página en la que se le indica al usuario que no tiene permiso para acceder alguna parte.

     * @param request 

     * @param servletResponse 

     * @param aplicacion

     * @return 

     * @throws ServletException, IOException 

     */  

     public void redireccionarLogin(HttpServletRequest request,ServletResponse servletResponse,String aplicacion) throws ServletException, IOException{

    	//recuperamos la página de error a la que va a ir

    	try{

	    	if (tr.isTraceActive()){

				tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName() + ":redireccionarLogin: entrando");

			}

	    	RequestDispatcher dispatcher = filterConfig.getServletContext().getRequestDispatcher("/comunJSP/"+aplicacion+"Login.do");

			dispatcher.forward(request, servletResponse);

    	}catch(ServletException sex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            sex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarLogin: " + sw.getBuffer ().toString());            

            throw sex;

    	}catch(IOException ioex){

            java.io.StringWriter sw = new java.io.StringWriter();

            java.io.PrintWriter pw = new java.io.PrintWriter(sw);

            ioex.printStackTrace(pw);

            tr.trace(COMPONENTE, Q70TraceLevel.ERROR, this.getClass().getName() + ":redireccionarLogin: " + sw.getBuffer ().toString());            

            throw ioex;

        }finally{            	

    	    if (tr.isTraceActive()){

    		    tr.trace(COMPONENTE, Q70TraceLevel.INFO, this.getClass().getName()  + " redireccionarLogin: saliendo");                

            }             	    

        }    	

    }

    /* (non-Javadoc)

     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)

     */

    public void init(FilterConfig filterConfig) {

    	this.filterConfig = filterConfig;    

    }



    /* (non-Javadoc)

     * @see javax.servlet.Filter#destroy()

     */

    public void destroy(){

    	this.filterConfig = null;

    }



    /* (non-Javadoc)

     * @see javax.servlet.Filter#getFilterConfig()

     */

    public FilterConfig getFilterConfig() {

    	return this.filterConfig;

    }

    

    /* (non-Javadoc)

     * @see javax.servlet.Filter#setFilterConfig()

     */

    public void setFilterConfig(FilterConfig f) {

    	this.filterConfig = f;

    }

                       



}  

   