====== Filtros para Bloquear el Acceso a la Aplicación ====== En FundeWeb 2.0 y en FundeWeb 1.5 tenemos disponibles varios filtros para bloquear el acceso a la aplicación. Este bloqueo de acceso tiene dos tipos: informar de que la aplicación esta en mantenimiento o no tener autorizado el acceso a la aplicación. Los filtros son los siguientes: - **//RemoteAddressAccessControlFilter//**: Bloqueamos el acceso a la aplicación ciertas direcciones IP. - **//RemoteHostAccessControlFilter//**: Bloqueamos el acceso a la aplicación ciertos nombres de host. - **//TimeIntervalLockAccessControlFilter//**: Bloqueamos el acceso a la aplicación en un cierto intervalo de tiempo. Como son filtros tiene por definición las propiedades: - **//url-pattern//**: usado para indicar que solicitudes son filtradas, por defecto se filtran todas. //url-pattern// es un patrón al estilo de //Tomcat// que permite sufijos //wildcard// (*). - **//regex-url-pattern//**: usado para indicar que solicitudes son filtradas, por defecto se filtran todas. //regex-url-pattern// es una expresión regular para indicar la ruta de solicitud filtrada. - **//disabled//**: usado para indicar si el filtro esta deshabilitado. ===== RemoteAddressAccessControlFilter ===== Este filtro permite bloquear el acceso a la aplicación a determinadas direcciones IP que se especifican mediante una [[https://docs.oracle.com/javase/tutorial/essential/regex/|expresión regular]]. Para poder utilizar el filtro, tendremos que realizar los siguientes pasos: 1.- Hay que añadir el siguiente espacio de nombres en el elemento raíz //// del fichero //components.xml// (donde están definidos el resto de espacio de nombres): Para FundeWeb 1.2.x: xmlns:fdw-control="http://www.umu.org/atica/seam/web/control"\\ Para FundeWeb 2.0.x: xmlns:fdw-control="http://www.um.es/atica/seam/web/control"\\ 2.- En la propiedad _xsi:schemaLocation_ añadimos lo siguiente: Para FundeWeb 1.2.x: http://www.umu.org/atica/seam/web/control http://www.umu.org/atica/seam/web/control-1.5.0.xsd\\ Para FundeWeb 2.0.x: http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd\\ 3.- Añadir la configuración del filtro: Para tener una redirección a una página personalizada de FundeWeb. ... O para devolver una respuesta directa sin redirección. ... Las propiedades importantes son las siguientes: - **//disabled//**: indica si el filtro esta desactivado (con valor //true//) o activado (con valor //false//). Por defecto el filtro esta desactivado. - **//allow//**: lista separada por comas o espacios de expresiones regulares para indicar que direcciones IP pueden acceder a la aplicación. Puede dejarse vacia para dejar pasar todas las peticiones desde IPs no especificadas en la propiedad //deny//. - **//deny//**: lista separada por comas o espacios de expresiones regulares para indicar que direcciones IP **no** pueden acceder a la aplicación. - **//access-lock//**: tipo de bloqueo de acceso, que puede ser: //MAINTENANCE// o //AUTHORIZATION//. Por defecto es //MAINTENANCE//. - **//access-lock-page//**: el //viewId// la página de bloqueo. Por defecto es: ///fundeweb/accessLock.xhtml//. - **//http-error//**: código de estado HTTP que queremos devolver en una respuesta directa sin redirección. - **//http-error-message//**: mensaje asociado al anterior código de estado. ===== RemoteHostAccessControlFilter ===== Este filtro permite bloquear el acceso a la aplicación a determinados nombres de HOST que se especifican mediante una [[https://docs.oracle.com/javase/tutorial/essential/regex/|expresión regular]]. Para poder utilizar el filtro, tendremos que realizar los siguientes pasos: 1.- Hay que añadir el siguiente espacio de nombres en el elemento raíz //// del fichero //components.xml// (donde están definidos el resto de espacio de nombres): Para FundeWeb 1.2.x: xmlns:fdw-control="http://www.umu.org/atica/seam/web/control"\\ Para FundeWeb 2.0.x: xmlns:fdw-control="http://www.um.es/atica/seam/web/control"\\ 2.- En la propiedad _xsi:schemaLocation_ añadimos lo siguiente: Para FundeWeb 1.2.x: http://www.umu.org/atica/seam/web/control http://www.umu.org/atica/seam/web/control-1.5.0.xsd\\ Para FundeWeb 2.0.x: http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd\\ 3.- Añadir la configuración del filtro: Para tener una redirección a una página personalizada de FundeWeb. ... O para devolver una respuesta directa sin redirección. ... Las propiedades importantes son las siguientes: - **//disabled//**: indica si el filtro esta desactivado (con valor //true//) o activado (con valor //false//). Por defecto el filtro esta desactivado. - **//allow//**: lista separada por comas o espacios de expresiones regulares para indicar que nombres de HOST pueden acceder a la aplicación. Puede dejarse vacia para dejar pasar todas las peticiones desde HOSTs no especificados en la propiedad //deny//. - **//deny//**: lista separada por comas o espacios de expresiones regulares para indicar que nombres de HOST **no** pueden acceder a la aplicación. - **//access-lock//**: tipo de bloqueo de acceso, que puede ser: //MAINTENANCE// o //AUTHORIZATION//. Por defecto es //MAINTENANCE//. - **//access-lock-page//**: el //viewId// la página de bloqueo. Por defecto es: ///fundeweb/accessLock.xhtml//. - **//http-error//**: código de estado HTTP que queremos devolver en una respuesta directa sin redirección. - **//http-error-message//**: mensaje asociado al anterior código de estado. ===== TimeIntervalLockAccessControlFilter ===== Este filtro permite bloquear el acceso a la aplicación durante un periodo de tiempo. Para poder utilizar el filtro, tendremos que realizar los siguientes pasos: 1.- Hay que añadir el siguiente espacio de nombres en el elemento raíz //// del fichero //components.xml// (donde están definidos el resto de espacio de nombres): Para FundeWeb 1.2.x: xmlns:fdw-control="http://www.umu.org/atica/seam/web/control"\\ Para FundeWeb 2.0.x: xmlns:fdw-control="http://www.um.es/atica/seam/web/control"\\ 2.- En la propiedad _xsi:schemaLocation_ añadimos lo siguiente: Para FundeWeb 1.2.x: http://www.umu.org/atica/seam/web/control http://www.umu.org/atica/seam/web/control-1.5.0.xsd\\ Para FundeWeb 2.0.x: http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd\\ 3.- Añadir la configuración del filtro. Ejemplo de configuracion para bloqueo con rango de fechas-tiempo (DATETIME) mostrando la página de autorización (en lugar de la de mantenimiento, que es la página por defecto): ... Las propiedades importantes son las siguientes: - **//disabled//**: indica si el filtro esta desactivado (con valor //true//) o activado (con valor //false//). Por defecto el filtro esta desactivado. - **//start//**: instante de inicio del intervalo de bloqueo de acceso a la aplicación. Tiene que cumplir el patrón 'dd/MM/yyyy HH:mm:ss' si //temporal-format// tiene los valores //DATETIME// ó //TIME_IN_DAYS//, y el patrón 'HH:mm:ss' si //temporal-format// tiene el valor //TIME//. - **//end//**: instante de fin del intervalo de bloqueo de acceso a la aplicación. Tiene que cumplir el patrón 'dd/MM/yyyy HH:mm:ss' si //temporal-format// tiene los valores //DATETIME// ó //TIME_IN_DAYS//, y el patrón 'HH:mm:ss' si //temporal-format// tiene el valor //TIME//. - **//temporal-format//**: indica el comportamiento de bloqueo con respeto a la configuración temporal. Valores admitidos: //DATETIME//, //TIME//, //TIME_IN_DAYS//. El valor por defecto es //DATETIME//. - **//access-lock//**: tipo de bloqueo de acceso, que puede ser: //MAINTENANCE// o //AUTHORIZATION//. Por defecto es //MAINTENANCE//. - **//access-lock-page//**: el //viewId// la página de bloqueo. Por defecto es: ///fundeweb/accessLock.xhtml//. ==== Modos de Funcionamiento ==== El modo de funcionamiento se configura en la propiedad //temporal-format//: Admite tres modos de funcionamiento: //DATETIME//, //TIME//, y //TIME_IN_DAYS//. === DATETIME (o Rango de Fecha con Tiempo) === Es la opción por defecto. El [[https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html|patrón válido]] para las propiedades //start// y //end// es 'dd/MM/yyyy HH:mm:ss'. En este modo de funcionamiento, se bloqueara toda petición (redirijiendose a la página de bloqueo configurada) cuya fecha de llegada al servidor este comprendida entre el rango de fechas con tiempo, especificado en las propiedades //start// y //end//. Ejemplo: ... En este ejemplo se bloquean las peticiones con fecha de llegada al servidor comprendidas entre las //08:00:00// horas del dia //17/10/2015// y las //08:00:00// horas del dia //25/10/2015//. Redirijiendose a la página de mantenimiento. === TIME (o Rango de Tiempo) === El [[https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html|patrón válido]] para las propiedades //start// y //end// es 'HH:mm:ss'. En este modo de funcionamiento, se bloqueara toda petición (redirijiendose a la página de bloqueo configurada) cuyo tiempo (hora:minuto:segundo) de fecha de llegada al servidor este comprendida entre el rango de tiempo, especificado en las propiedades //start// y //end//. Se aplica todos los días. Ejemplo: ... En este ejemplo se bloquean las peticiones con fecha de llegada al servidor comprendidas entre las //00:00:00// horas y las //06:00:00// horas, todos los días que este activo el filtro (//disabled="false"//). Redirijiendose a la página de mantenimiento. === TIME_IN_DAYS (o Rango de Tiempo aplicado al rango de Fechas) === El [[https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html|patrón válido]] para las propiedades //start// y //end// es 'dd/MM/yyyy HH:mm:ss'. En este modo de funcionamiento, se bloqueara toda petición (redirijiendose a la página de bloqueo configurada) cuyo tiempo (hora:minuto:segundo) de fecha de llegada al servidor este comprendida entre el rango de tiempo, especificado en las propiedades //start// y //end//. Se aplica solo al rango de fechas especificado en el patrón 'dd/MM/yyyy' especificado en las propiedades //start// y //end//. Ejemplo: ... En este ejemplo se bloquean las peticiones con fecha de llegada al servidor comprendidas entre las //00:00:00// horas y las //06:00:00// horas, los días comprendidos entre el //17/10/2015// y el //25/10/2015//. Redirijiendose a la página de mantenimiento. ===== Tipos de Bloque de Acceso ===== Los tipos de bloqueo de acceso a la aplicación son: - **//MAINTENANCE//**: indica que la aplicación esta en proceso de modificación o mantenimiento. Es la opción por defecto. - **//AUTHORIZATION//**: indica que no se tienen permisos de acceso a la aplicación. Veamos la configuración de la página de bloqueo para el bloqueo de mantenimiento: {{ :fdw2.0:fundeweb2.0:gt:gt-filtros-bloqueo-acceso:bloqueo-mantenimiento.jpg?800 | Página de Bloqueo de Acceso por Mantenimiento}} Veamos la configuración de la página de bloqueo para el bloqueo de autorización: {{ :fdw2.0:fundeweb2.0:gt:gt-filtros-bloqueo-acceso:bloqueo-autorizacion.jpg?800 | Página de Bloqueo de Acceso por Autorización}} ===== Herramientas ===== Para poder testear las expresiones regulares, tenemos varias webs que lo permiten online: [[http://www.regexplanet.com/advanced/java/index.html|Regular Expression Test Page for Java]] [[http://www.ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/|Visual Regex Tester]] [[http://myregexp.com|Online Regex Tester]] [[http://java-regex-tester.appspot.com|Java Regex Tester]] ===== Bibliografia ===== [[https://docs.oracle.com/javase/tutorial/essential/regex/|Lesson: Regular Expressions]] [[http://www.vogella.com/tutorials/JavaRegularExpressions/article.html|Java Regex - Tutorial]] [[http://www.tutorialspoint.com/java/java_regular_expressions.htm|Java - Regular Expressions]] [[http://www.ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-1/|Guide to Regular Expressions in Java (Part 1)]] [[http://www.ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-2/|(Part 2)]] [[http://www.regular-expressions.info/java.html|Using Regular Expressions in Java]] [[http://www.javatpoint.com/java-regex|Java Regex]] [[http://tutorials.jenkov.com/java-regex/index.html|Java Regex - Java Regular Expressions ]] ---- --- //[[juanmiguelbg@um.es|JUAN MIGUEL BERNAL GONZALEZ]] 2015/09/03 12:20//