Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Consultor:
David Carrera Pérez
Enero 2008
Filtrado WEB con JAVA J.A.Placín
AGRADECIMIENTOS
2
Filtrado WEB con JAVA J.A.Placín
RESUMEN Y PLANIFICACIÓN
La programación se realizará en Java, con lo que será portable a cualquier sistema, cuyo único requisito
será tener instalada una máquina virtual Java (JVM).
Organización:
En primer lugar se expone el plan de trabajo diseñado para la consecución de los objetivos. A continuación
se explicará la situación actual del filtrado web, y se introducirá algo de teoría sobre las tecnologías en las
que se basa la aplicación.
Seguidamente se muestra el desarrollo llevado a cabo durante el diseño, para continuar en los últimos
apartados explicando su implementación.
Al final se explican la instalación y manejo de la aplicación resultante
3
Filtrado WEB con JAVA J.A.Placín
4
Filtrado WEB con JAVA J.A.Placín
5
Filtrado WEB con JAVA J.A.Placín
ÍNDICE DE CONTENIDOS
PORTADA Filtrado WEB con JAVA....................................................................................................... ...........1
AGRADECIMIENTOS....................................................................................................................... ...........2
RESUMEN Y PLANIFICACIÓN................................................................................................. ..................3
FILTRADO DE PÁGINAS WEB CON JAVA........................................................................... .................3
OBJETIVOS GENERALES Y ESPECÍFICOS:......................................................... .........................3
ORGANIZACIÓN:.............................................................................................................. ................3
PLANIFICACIÓN CON PLAZOS Y TEMPORIZACIÓN:................................................ ....................4
ÍNDICE DE CONTENIDOS................................................................................................................... .......6
ÍNDICE DE ILUSTRACIONES.................................................................................................... .................9
1 TEORÍA...................................................................................................................................................... ..10
1.1 ESTUDIO DE LA SITUACIÓN ACTUAL. ...................................................................... .......................10
1.1.2 EVALUACIÓN DE LA UTILIDAD.......................................................................................... .........12
1.1.3 EVALUACIÓN DEL USO........................................................................................................... ....12
1.2 PROTOCOLOS.......................................................................................................... ..........................13
1.2.1 PROTOCOLO HTTP. ................................................................................... ........................13
1.2.1.1 Introducción........................................................................................................................ ...13
1.2.1.2 Características.......................................................................................................... ............13
1.2.1.3 Peticiones (Request) HTTP ....................................................................... ..........................14
1.2.1.4 Respuestas (Response) HTTP......................................................................... ...................14
1.2.1.5 Cabeceras HTTP................................................................................................. .................15
1.3 LENGUAJE HTML........................................................................................................................... .....16
1.3.1 ESTRUCTURA DE LOS DOCUMENTOS HTML.............................................................. ...........16
1.3.2FORMULARIOS HTML............................................................................................ .....................17
2 ANÁLISIS............................................................................................................................................. ........18
2.1 REQUISITOS................................................................................................................ .......................18
2.2 DOMINIO.......................................................................................................................... ...................19
2.3 NEGOCIO............................................................................................................................... .............19
2.4 GLOSARIO DEL MODELO DE NEGOCIO......................................................................... .................20
Usuario:..................................................................................................................... .................20
Administrador:............................................................................................................................ .20
Servidor:.................................................................................................................... .................20
Petición:............................................................................................................................ ..........20
Permiso usuario:................................................................................................................... ......20
Puerto:.............................................................................................................................. ..........20
Dominio:.............................................................................................................. .......................20
Códigos ICRA: .................................................................................................................. .........20
Lista Dominios:............................................................................................................ ...............20
Lista Palabras:............................................................................................................. ...............21
Registro:.............................................................................................................. .......................21
2.5 DOCUMENTACIÓN TEXTUAL DE LOS CASOS DE USO.................................................................21
6
Filtrado WEB con JAVA J.A.Placín
2.6 ESPECIFICACIÓN DE LAS CLASES......................................................................................... .........25
2.6.1 IDENTIFICACIÓN DE LAS CLASES DE IDENTIDAD.................................................................25
2.7 DIAGRAMAS DE COLABORACIÓN........................................................................................... .........27
Administrar registro: ............................................................................................................... ....27
Administrar códigos ICRA: ...................................................................................................... ...28
Administrar lista de palabras: ......................................................................... ...........................28
Comprobar petición: ........................................................................................... .......................28
Comprobar permisos usuario: .......................................................................... .........................29
Comprobar dominio: .................................................................................................. ................29
Comprobar puerto: ........................................................................................... .........................29
Solicitar recurso: .............................................................................................................. ..........29
Comprobar recurso: .............................................................................................................. .....30
Comprobar ICRA: ....................................................................................................... ...............30
Comprobar contenido: ............................................................................................. ..................30
Retransmitir recurso: ........................................................................................ .........................30
Comunicar resultado: ................................................................................................................ .30
Registrar petición: ............................................................................................................... .......30
2.8 INTERFACE DE USUARIO....................................................................................................... ..........31
Menú inicial:......................................................................................................................... .......31
Administrar usuarios:.................................................................................................. ................31
Administrar lista negra:.................................................................................................. .............32
Administrar dominios:............................................................................................... ..................32
Administrar códigos ICRA:....................................................................................................... ...33
Administrar registro:.................................................................................................................. ..33
Administrar puertos......................................................................................... ...........................34
3 DISEÑO......................................................................................................................................... .............35
3.1 DISEÑO DE LOS CASOS DE USO............................................................................... ......................35
Administrar usuarios:...................................................................................................... ............35
Administrar lista negra................................................................................................... .............36
Administrar dominios................................................................................................ ..................36
Administrar códigos ICRA...................................................................................................... .....37
Administrar puertos......................................................................................... ...........................38
Administrar registro................................................................................................................... ..38
3.2 DIAGRAMA ESTÁTICO DEL DISEÑO........................................................................ ........................39
4 IMPLEMENTACIÓN CON JAVA........................................................................................................... .......40
4.1 SOCKETS............................................................................................................................. ...............40
4.2 THREADS.......................................................................................................................................... ..40
4.3 PERSISTENCIA. ...................................................................................................................... .........41
4.4 API JAVA................................................................................................................................... ..........41
4.5 CLASES .................................................................................................................. ...........................44
Servidor: ....................................................................................................................... ..................44
ThreadServidor: .................................................................................................................... ..........44
7
Filtrado WEB con JAVA J.A.Placín
Menu: ............................................................................................................................................. .46
CrearFicheros: ................................................................................................................... .............46
Usuario: ................................................................................................................. .........................47
Dominio: ................................................................................................................ .........................48
Peticion: .............................................................................................................................. ............48
CodigoICRA: ............................................................................................................................... ....49
Lista: .................................................................................................................................. .............49
ListaUsuarios: ....................................................................................................................... ..........50
listaCodigos: .................................................................................................................... ...............50
listaDominios: ............................................................................................................ .....................50
4.6 DIAGRAMA DE CLASES ......................................................................................................... ...........51
4.7 DIAGRAMA DE FLUJO SIMPLIFICADO DE LA APLICACIÓN .................................................... ......52
5 MANUAL DE LA APLICACIÓN.................................................................................................. ..................53
5.1 INSTALACIÓN................................................................................................................................. .....53
5.2 GESTIÓN ........................................................................................................................................ ....54
6 CONCLUSIONES................................................................................................................... .....................55
6.1 MEJORAS..................................................................................................................................... ......55
7 BIBLIOGRAFÍA................................................................................................................................... .........56
8 GLOSARIO........................................................................................................................... .......................57
8
Filtrado WEB con JAVA J.A.Placín
ÍNDICE DE ILUSTRACIONES
Tabla peticiones HTTP...................................................................................................................... ..............14
Códigos respuestas HTTP............................................................................................................... ...............15
Modelo del dominio.............................................................................................................................. ...........19
Casos de usos del modelo de negocio.................................................................................... .......................19
Diagrama de clases de entidad............................................................................................ ..........................26
Colaboración caso de uso Administrar usuarios................................................................................. ............27
Colaboración caso de uso Administrar registro............................................................................................ ...27
Colaboración caso de uso Administrar dominios............................................................................ ................28
Colaboración caso de uso Comprobar petición......................................................................... .....................29
Colaboración caso de uso Comprobar recurso........................................................................................... ....30
Pantalla Menu Inicial.......................................................................................................................... .............31
Pantalla Administrar Usuarios.............................................................................................................. ...........31
Pantalla Administrar Lista Palabras......................................................................................... .......................32
Pantalla Administrar dominios........................................................................................................................ .32
Pantalla Administrar Códigos................................................................................................................... .......33
Pantalla Administrar Registro....................................................................................................................... ...33
Pantalla Administrar Puertos............................................................................................... ...........................34
Diagrama estático del diseño....................................................................................................................... ...39
Clase Servidor............................................................................................................................... .................44
Clase ThreadServidor............................................................................................................................ .........45
Clase Menu................................................................................................................................................... ..46
Clase CrearFicheros.................................................................................................................... ...................47
Clase Usuario........................................................................................................................ .........................47
Clase Dominio...................................................................................................................... ..........................48
Clase Peticion.................................................................................................................................... .............48
Clase CodigoICRA..................................................................................................................................... .....49
Clase Lista......................................................................................................................................... .............49
Clase listaUsuarios......................................................................................................................... ................50
Clase listaCodigos.......................................................................................................................... ................50
Clase listaDominios.................................................................................................................. ......................50
Diagrama de clases................................................................................................................ ........................51
Diagrama de flujo....................................................................................................................................... .....52
9
Filtrado WEB con JAVA J.A.Placín
1 TEORÍA
Para un primer filtrado se han utilizado sitios de internet que promueven enlaces a software, y se han
seleccionado los más descargados por los usuarios, así como los mejor valorados. De todos ellos a
continuación hay una lista con algunos de los mejor colocados y sus características (no están ordenados por
ningún criterio).
Características:
•Filtro de contenidos.
•Permite configurar el nivel de acceso según las necesidades del usuario.
•Protección contra virus.
•Protección contra programas publicitarios.
•Bloqueo de ventanas emergentes.
•Bloqueo de programas que realizan llamadas telefónicas (dialers).
•Elimina rastros de navegación en Internet.
•Totalmente configurable.
Características:
Características:
10
Filtrado WEB con JAVA J.A.Placín
•Guarda historiales.
•Interfaz sencilla.
Características:
Características:
Características:
Como se puede ver todos implementan las funcionalidades que se han previsto para el presente desarrollo
y bastantes más, pero no son multiplataforma.
Un tema que se ha considerado tan interesante como para decidir implementarlo en esta aplicación es el
reconocimiento del etiquetado ICRA, descubierto durante la investigación de las aplicaciones anteriores. El
estudio de sus especificaciones nos permitirá filtrar un gran número de sitios y contenidos con rapidez, pues
sólo se ha de analizar la etiqueta ICRA, en la que aparecen una serie de códigos, que avisan del tipo de
contenido.
11
Filtrado WEB con JAVA J.A.Placín
Etiqueta ICRA de una página real, con los códigos marcados en color azul:
<META HTTPEQUIV="picslabel" content='(pics1.1 "http://www.icra.org/ratingsv02.html" l gen true
for "http://www.eportalsur.com.ar" r (cb 1 lz 1 nz 1 oz 1 vz 1)
"http://www.rsac.org/ratingsv01.html" l gen true for "http://www.eportalsur.com.ar" r (n 0 s 0 v 0
l 0))'>
12
Filtrado WEB con JAVA J.A.Placín
1.2 PROTOCOLOS
Para este trabajo se ha estudiado el protocolo HTTP, imprescindible para la navegación en internet. El
protocolo HTTP es el encargado de la comunicación y el transporte de los documentos HTML leídos por los
navegadores.
1.2.1.1 Introducción
HTTP (Hiper Text Transfer Protocol o Protocolo de Transferencia de Hipertexto) es el lenguaje de
comunicación utilizado en Internet para que los clientes y los servidores puedan comunicarse entre sí.
HTTP es un protocolo a nivel de aplicación que se utiliza en sistemas de información para el intercambio de
datos entre los mismos, y viene siendo utilizado por el www desde 1990.
La primera versión HTTP/0.9 era un protocolo destinado sólo a transferir datos, y rápidamente fue mejorada
a la versión HTTP/1.0, definida en la RFC 1945 en 1996, y que la dota de capacidades que van más allá de la
simple transferencia de hipertexto, permitiendo mensajes tipo MIME, con meta información sobre los datos
transferidos y nuevas extensiones en las cabeceras y códigos de error.
Sin embargo, HTTP/1.0 no tiene en consideración las necesidades de conexiones persistentes, caché,
proxies, seguridad, sistemas que necesitan conocer la capacidad real del otro comunicante, etc... para lo
cual se ha desarrollado el protocolo HTTP/1.1, definido en el año 1999 en la especificación RFC 2610 , y
actualizado en junio de 2007 en la RFC2610bis.
1.2.1.2 Características
•Arquitectura cliente-servidor:
El servidor, una aplicación que permanece a la espera de conexiones generalmente a través del
puerto 80 , responde a las peticiones solicitadas por la aplicación cliente. El protocolo usado
mayoritariamente para la conexión es el TCP.
•Sin estado:
No se conserva la información de una petición a otra, aunque en la práctica se utilizan métodos
que permiten guardar datos sobre conexiones anteriores, como por ejemplo las cookies.
•Localización universal:
El protocolo usa referencias dadas por URI.
•Datos:
HTTP usa los tipos MIME (Multipart Internet Mail Extension).
13
Filtrado WEB con JAVA J.A.Placín
El método le indica al servidor lo que ha de hacer con el URI, y la versión como su nombre indica es el
número de versión del protocolo que el cliente implementa. HTTP/1.1 incorpora ocho tipos de peticiones
(tabla 1.2.1.x), aunque sólo obliga a implementar GET y HEAD. El resto son opcionales, pero los servidores
que los ejecuten han de cumplir sus especificaciones. HTTP/1.0 sólo implementaba GET, POST y HEAD, que
son los más utilizados.
A continuación de la versión, se añade un mensaje compatible con MIME, con los parámetros de la petición,
datos del cliente y otros campos con datos opcionales, para el servidor.
Petición Descripción breve
GET Retorna el recurso solicitado de la URL pedida.
Sólo retorna la información de la cabecera. HEAD es más rápido que
GET, ya que se envía menos información. Se usa para ver si el documento
HEAD solicitado ha cambiado desde la última vez que se accedió a él, cuando se
usa caché. Si es el mismo, la copia de la caché es usada de nuevo, sino se
tiene que recuperar la versión actual con el método GET.
Es usado para enviar datos del cliente al servidor. Los datos del cuerpo
de la solicitud se enviarán al URI especificado. Este URI será una
POST
referencia a una aplicación que procesará los datos de alguna manera,
típicamente será un programa CGI.
PUT Envía el recurso indicado en la URL del cliente al servidor.
OPTIONS Solicita información sobre las opciones de comunicación del servidor.
TRACE Permite al cliente ver lo que recibe el servidor.
DELETE Pide al servidor que borre el recurso URL solicitado
CONNECT Para comunicaciones con SSL
Ilustración 1: Tabla peticiones HTTP
14
Filtrado WEB con JAVA J.A.Placín
Código Descripción
200 OK El servidor ha enviado la información solicitada.
204 NO CONTENT El cuerpo de la respuesta está vacío.
301 MOVED El URI solicitado no está en el servidor. Ha sido movido a
PERMANENTLY otro sitio.
400 BAD REQUEST Error de sintaxis en la petición del cliente.
Indica que el documento solicitado no está disponible,
404 NOT FOUND
porque el URI ha sido mal escrito o la página no existe ya.
500 INTERNAL
Error interno en el servidor.
SERVER ERROR
Ilustración 2: Códigos respuestas HTTP
•De entidad:
Contienen información relacionada con el recurso que se envía.
•De solicitud:
Son utilizados por el cliente para enviar información adicional al servidor.
•De respuesta:
Utilizados por el servidor para enviar información adicional al cliente.
HTTP dispone de un mecanismo de extensión que posibilita la inclusión de campos no estandarizados en las
cabeceras. Si una implementación del protocolo no reconoce un determinado campo, sólo ha de ignorarlo, o
retransmitirlo tal y como está, si se trata de un servidor intermediario.
15
Filtrado WEB con JAVA J.A.Placín
El HyperText Markup Language (HTML) es un lenguaje de marcas utilizado para crear documentos que nos
permiten representar contenidos de manera enriquecida, referenciar otros documentos o recursos,
implementar formularios, y mucho más.
Actualmente proporciona funciones muy avanzadas que permiten crear páginas de contenido muy
complejo. Se ha especificado también un nuevo lenguaje de marcas compatible con HTML, el XHTML
( Extensible Hipertext Marhup Language) que es una versión más estricta de HTML y compatible con el
estándar XML, y cuya última especificación es la recomendación 1.1 del W3C.
La última especificación de HTML es la 4.01 de 24 de Diciembre de 1999 que define la estructura que han
de cumplir estos documentos.
Para especificar la estructura y los contenidos se utilizan las etiquetas HTML (tags), que se escriben entre
los caracteres < TAG > principio de etiquetado y </TAG> final de etiquetado .
Pueden existir espacios en blanco antes o después de cada sección, pero la cabecera y el cuerpo han de
encontrarse entre las etiquetas <html> y </html>.
Existe una gran variedad de etiquetas HTML, pero para el desarrollo de esta aplicación es vital la
localización de la cabecera, donde residirá la información referente a los códigos ICRA, en aquellas páginas
que cumplan este sistema de etiquetado.
Dentro de la cabecera existe la posibilidad de incorporar meta datos, de manera que el autor del
documento puede informar sobre los datos del contenido y otros recursos accesibles.
Los documentos que incorporan el sistema de etiquetado ICRA, incluirán el tag META dentro de la cabecera,
de la siguiente forma:
<HEAD>
<META HTTP-EQUIV=”pics-label” content=”etiquetas_ICRA”>
……..
</HEAD>
16
Filtrado WEB con JAVA J.A.Placín
Un formulario HTML posibilita al usuario enviar información a través del navegador hacia la aplicación
cliente. Como la interface del programa estará implementada con formularios HTML, también es necesario
acceder a los datos retornados por estos.
• METHOD :
Esta etiqueta indica si será un método GET o POST.
• NAME :
Asigna un nombre al formulario.
• ENCTYPE :
Especifica el tipo de codificación a utilizar para el envío.
Los elementos básicos de los formularios, que nos permitirán introducir los datos a enviar son:
• INPUT :
Es el campo de entrada más utilizado. Existen muchos tipos de elementos INPUT, que son
especificados por el atributo TYPE. El más importante probablemente sea el tipo SUBMIT, pues es el
que realiza la función de aceptación y envío de los datos.
• SELECT :
Nos permite seleccionar una o más, entre varias opciones.
• TEXTAREA :
En este tipo de campo el usuario puede introducir múltiples líneas de texto.
17
Filtrado WEB con JAVA J.A.Placín
2 ANÁLISIS.
2.1 REQUISITOS.
Esta aplicación ha cumplir los siguientes requisitos:
Será programada en JAVA, y funcionará sobre cualquier sistema operativo que tenga instalada una
JVM (Java Virtual Machine), que puede ser descargada desde el sitio web de Sun Microsystems.
La aplicación se iniciará al arrancar el sistema, y permanecerá a la espera de solicitudes por parte de
las aplicaciones cliente.
Al recibir una petición, primero aplicará el filtrado de puertos.
Si es a un puerto permitido, seguirá los siguientes pasos:
Comprobará si el destino está en la lista de dominios registrados. Si está registrado puede estar
prohibido o permitido. Si está prohibido denegará el servicio. Si está permitido no realizará filtrado
alguno.
Si el dominio no está registrado en la lista de dominios, comprobará si la URL contiene alguna
palabra prohibida, y si no es así solicitará el recurso que le ha pedido la aplicación cliente y al
recibirlo:
■Comprobará si tiene etiquetado ICRA, y si es así validará los códigos para determinar si esa
página es accesible para el usuario de la aplicación.
■Si no tiene etiquetado ICRA habrá de comprobar el cuerpo del mensaje, para determinar si es
o no accesible al usuario de la aplicación.
■Si se rechaza el recurso lo notificará a la aplicación cliente, y si se acepta se lo retransmitirá.
Si el usuario es administrador, no se realiza filtrado de ningún tipo, ni se registra sus peticiones al
web.
Se registrarán todas las peticiones de los usuarios no administradores.
Una vez realizado esto quedará de nuevo a la espera de otra solicitud.
18
Filtrado WEB con JAVA J.A.Placín
2.2 DOMINIO.
En una primera aproximación podemos diferenciar las siguientes clases del dominio de la aplicación:
Ilustración 3: Modelo del dominio
2.3 NEGOCIO.
El diagrama de casos de usos del modelo de negocio sería:
Ilustración 4: Casos de usos del modelo de negocio
19
Filtrado WEB con JAVA J.A.Placín
Usuario:
Actor usuario del equipo en el que corre nuestra aplicación, cuya actividad a través de internet se
pretende filtrar y registrar.
Administrador:
Actor que es también usuario, pero además con permisos para modificar la configuración de la aplicación, o
sea su modo de funcionamiento, y visualizar y modificar el registro del filtrado.
Servidor:
Es la parte de nuestra aplicación que se encarga de ejecutar el filtrado.
Petición:
Es la solicitud de un recurso de internet, por parte del cliente o navegador al servidor, y ejecutada por un
usuario.
Permiso usuario:
A efectos de permisos, en nuestra aplicación un usuario podrá ser administrador, o no. El servidor filtrará
todas las peticiones de aquellos usuarios que no sean administradores.
Puerto:
Interface lógica a través de la que se comunica una aplicación. Están numerados del 0 al 65535 y
clasificados en tres grupos:
Dominio:
Nombre que identifica un equipo o conjunto de ellos en internet, de manera más fácil que si lo hacemos por
su dirección IP.
Códigos ICRA:
Listado de códigos que definen el tipo de contenido de una página web.
Lista Dominios:
Lista de dominios registrados, que serán inaccesibles si son prohibidos, o no filtrados si son permitidos.
20
Filtrado WEB con JAVA J.A.Placín
Lista Palabras:
Lista de palabras, cuya aparición en el contenido de un recurso provocará que sea inaccesible al usuario.
Registro:
Listado de los recursos solicitados por los usuarios, sólo si la petición ha sido bloqueada a consecuencia del
filtrado, guardando la información de la hora y tiempo de conexión para cada una de ellas.
Caso de uso: “Iniciar Servidor”
Caso de uso: “Administrar usuarios”
Caso de uso: “Administrar registro”
-Funcionalidad: Revisar el registro de actividades de los usuarios y mantenerlo. Dependiendo del volumen
de datos registrados, habrá de limpiar el fichero del registro y optar por guardar los datos en otra ubicación,
o eliminarlos.
-Actor: Administrador.
-Precondición: Identificarse como Administrador.
-Postcondición: Fichero de registro actualizado.
Caso de uso: “Administrar Dominios”
21
Filtrado WEB con JAVA J.A.Placín
Caso de uso: “Administrar ICRA”
-Funcionalidad: Modificar listado de códigos ICRA, cuya aparición en un recurso provocará su denegación en
caso de filtrado.
-Actor: Administrador.
-Precondición: Identificarse como Administrador.
-Postcondición: Lista de códigos ICRA actualizada.
Caso de uso: “Administrar Lista Palabras”
Caso de uso: “Comprobar petición”
Caso de uso: “Comprobar permisos usuario”
-Funcionalidad: Comprobar si el usuario del equipo está en la lista de usuarios y cual es su nivel.
-Casos de uso relacionados: Comprobar petición , Comunicar resultado, Solicitar recurso
-Actor: Servidor.
-Precondición: Se está ejecutando el caso de uso Comprobar petición.
-Postcondición: Se le comunica al caso de uso Comprobar petición el nivel al que pertenece el usuario.
Caso de uso: “Comprobar dominio”
-Funcionalidad: Comprobar si el dominio al que se refiere la petición está en la lista de dominios prohibidos.
-Casos de uso relacionados: Comprobar petición.
-Actor: Servidor.
-Precondición: Se está ejecutando el caso de uso Comprobar petición.
-Postcondición: Se le comunica al caso de uso Comprobar petición si el dominio está en la lista negra o no.
22
Filtrado WEB con JAVA J.A.Placín
Caso de uso: “Comprobar puerto”
Caso de uso: “Solicitar recurso”
Caso de uso: “Comprobar recurso”
Caso de uso: “Comprobar ICRA”
Caso de uso: “Comprobar contenido”
-Funcionalidad: Comprobar si en el contenido del recurso recibido hay palabras de la lista de prohibidas.
-Casos de uso relacionados: Comprobar recurso.
-Actor: Servidor.
-Precondición: Se está ejecutando el caso de uso Comprobar recurso.
-Postcondición: Se le comunica al caso de uso Comprobar recurso la existencia o no de palabras prohibidas.
Caso de uso: “Retransmitir recurso”
23
Filtrado WEB con JAVA J.A.Placín
-Actor: Servidor.
-Precondición: Se ha ejecutado el caso de uso Comprobar recurso.
-Postcondición: Se le retransmite un recurso permitido al cliente.
Caso de uso: “Comunicar resultado”
Caso de uso: “Registrar petición”
-Funcionalidad: Insertar una nueva entrada en el registro para guardar los datos de la petición, haya sido
aceptada o no.
-Actor: Servidor.
-Precondición: Ha finalizado la ejecución del filtrado de una petición.
-Postcondición: Se ha insertado una nueva entrada en el registro de peticiones.
24
Filtrado WEB con JAVA J.A.Placín
25
Filtrado WEB con JAVA J.A.Placín
O usuario: String
•Registro. En esta clase de entidad, representamos la lista de peticiones registradas, y será
persistente en el fichero “registro”. Sus atributos:
O listaPeticiones: Lists de string.
Ilustración 5: Diagrama de clases de entidad
26
Filtrado WEB con JAVA J.A.Placín
Administrar usuarios:
En este caso de uso el usuario a través del navegador solicita al servidor la página del menú de la
aplicación, que no es más que un formulario html. El servidor comprueba si ese usuario es administrador, y
si es así se la envía al navegador, y el usuario solicita la página de control de usuarios. El servidor le envía
al navegador el formulario de control de usuarios, y el usuario administrador lo rellena como crea adecuado,
para volvérselo a enviar al servidor, que con los datos recibidos actuará sobre el fichero “listauarios”.
Ilustración 6: Colaboración caso de uso Administrar usuarios
Administrar registro:
Es igual que el caso de uso anterior hasta el momento en que el usuario administrador rellena el
formulario solicitando la página, en este caso, de control del registro. El servidor se la envía al navegador y
el usuario a través de ella podrá solicitar la lista completa de registros, borrar algunos seleccionados, o
borrarlos todos.
Ilustración 7: Colaboración caso de uso Administrar registro
Administrar dominios:
27
Filtrado WEB con JAVA J.A.Placín
Es igual que los anteriores pero ahora el usuario solicita la página de control de dominios . El servidor se
la envía al navegador y el usuario por medio de ese formulario podrá ver el listado, añadir y modificar
dominios censados.
Ilustración 8: Colaboración caso de uso Administrar dominios
Administrar códigos ICRA:
Es igual que los anteriores pero ahora el usuario solicita la página de control de códigos ICRA. Lo único que
cambia con respecto al diagrama anterior es que en este caso el objeto a manipular es la lista de códigos
ICRA “listaCodigos”, así que no representaremos su diagrama de colaboración. Con el formulario de control
de códigos ICRA, el usuario podrá ver el listado de códigos, añadir nuevos, modificar y borrar.
Administrar lista de palabras:
Igual que los anteriores pero ahora el usuario solicita la página de control de palabras prohibidas. Lo único
que cambia con respecto al diagrama anterior es que en este caso el objeto a manipular es la lista de
palabras prohibidas “listaPalabras”, así que tampoco lo representaremos. Con el formulario de control de
palabras prohibidas, el usuario podrá ver el listado de palabras, añadir nuevas y modificar o borrar.
Comprobar petición:
En este caso de uso el servidor recibe una petición de un recurso de internet, y ha de comprobar en primer
lugar si el usuario es administrador o no. Si no lo es entonces comprobará si el dominio al que va dirigida
está censado y si es prohibido o no. Si está censado como prohibido dará mensaje de “pagina no accesible”
al navegador. Si está censado como no prohibido se limitará a solicitar el recurso al web, y retransmitir al
navegador lo que le llegue. Si el dominio no está en la lista, solicitará el recurso al web e irá comprobando si
existen palabras prohibidas comparándolo con la lista ”listaPalabras”.
28
Filtrado WEB con JAVA J.A.Placín
Ilustración 9: Colaboración caso de uso Comprobar petición
Comprobar permisos usuario:
Este caso de uso extiende de los casos de uso “Comprobar petición” y los relativos a la administración.
El servidor consulta la lista de Usuarios, para comprobar si el usuario actual es administrador o no. Es muy
simple y no lo representaremos aquí.
Comprobar dominio:
Este caso de uso extiende del caso de uso “Comprobar petición”.
El servidor consulta la lista de Dominios, para comprobar si el dominio al que pertenece el recurso solicitado
está censado y si está prohibido o no. También es simple y no lo representaremos.
Comprobar puerto:
Al igual que el anterior, este caso de uso extiende del caso de uso “Comprobar petición”.
El servidor consulta la lista de Puertos, para comprobar si el puerto solicitado está permitido o no. También
es muy simple y no lo representaremos.
Solicitar recurso:
Este caso de uso se ejecuta tras el de “Comprobar petición”. El servidor se limita a solicitar al web el recurso
de la petición. Si se recibe un código “200” indicará que ha recibido la página correctamente, e irá
guardando los datos que reciba, para después ejecutar el caso de uso “Comprobar recurso”.
29
Filtrado WEB con JAVA J.A.Placín
Comprobar recurso:
En este caso de uso el servidor comprobará si el contenido de “pagina”, la página recibida, pasa los filtros
de los códigos ICRA y de las palabras prohibidas.
Si la página contiene códigos ICRA, los analiza y actuará según el resultado, y ya no será necesario filtrar
por palabras.
Ilustración 10: Colaboración caso de uso Comprobar recurso
Comprobar ICRA:
Este caso de uso extiende al anterior “Comprobar recurso” y como sólo se ejecutaría dentro de él, lo
eliminaremos.
Comprobar contenido:
Igual que le sucede al anterior, sólo se ejecuta dentro del caso de uso “Comprobar recurso”, así que lo
eliminaremos también.
Retransmitir recurso:
Este caso de uso sólo refleja la ejecución por parte del servidor del envío de la página recibida desde
internet, hacia el cliente navegador. Es muy simple y no lo representaremos.
Comunicar resultado:
En este caso de uso el servidor comunica al cliente un código “400”, con “Página no encontrada”.
Es muy simple también.
Registrar petición:
En este caso de uso el servidor una vez completados todos los pasos, guardará en el fichero “registro” los
datos del resultado de la petición. Básicamente será registrar si se denegó o no la petición, el día y la hora
de la petición, el tiempo que duró la conexión, el URI del recurso, el puerto usado y el usuario que la realizó.
30
Filtrado WEB con JAVA J.A.Placín
Menú inicial:
Es el punto de acceso a todas las demás pantallas y opciones del programa. El campo opciones es una lista
desplegable donde el administrador seleccionará: Administrar usuarios, Administrar lista negra, Administrar
dominios, Administrar códigos ICRA o Administrar el registro.
Ilustración 11: Pantalla Menu Inicial
Administrar usuarios:
Se accede a este menú desde el del menú inicial y permite optar por visualizar la lista de usuarios, añadir
uno nuevo, y eliminar o modificar uno existente.
Ilustración 12: Pantalla Administrar Usuarios
31
Filtrado WEB con JAVA J.A.Placín
Administrar lista negra:
Se accede a este menú a través del menú inicial. En el se podrá optar por ver el listado de palabras
prohibidas, añadir palabras nuevas y borrar existentes.
Ilustración 13: Pantalla Administrar Lista Palabras
Administrar dominios:
Igual que los anteriores, para acceder a él ha de ser a través del menú inicial. En este menú se podrá optar
por ver el listado de dominios censados, añadir nuevos y modificar o borrar existentes.
Ilustración 14: Pantalla Administrar dominios
32
Filtrado WEB con JAVA J.A.Placín
Administrar códigos ICRA:
Se accede a esta pantalla también a través del menú inicial. En ella seleccionaremos si queremos visualizar
la lista de códigos ICRA que tenemos en el fichero “listacodigos”, añadir nuevos códigos y borrar o
actualizar alguno existente ya.
Ilustración 15: Pantalla Administrar Códigos
Administrar registro:
Igual que todas las anteriores, será accesible por medio del menú inicial. En esta pantalla las opciones serán
visualizar un listado con todas las entradas del registro tal y como esté en ese momento, eliminar entradas
por fecha, y eliminar todas las entradas actuales, o lo que es lo mismo, borrar el registro.
Ilustración 16: Pantalla Administrar Registro
33
Filtrado WEB con JAVA J.A.Placín
Administrar puertos.
Desde esta pantalla accederemos a la configuración de los puertos que deseemos permitir para los usuarios
filtrados por el proxy. Aquí podremos ver la lista de puertos permitidos, añadir nuevos y borrar otros.
Ilustración 17: Pantalla Administrar Puertos
Además de las pantallas anteriores, existirán otras más simples, que servirán para informar al usuario del
resultado de cada transacción, y que no detallamos aquí, pues serán meros mensajes a través del
navegador.
34
Filtrado WEB con JAVA J.A.Placín
3 DISEÑO
Administrar usuarios:
El servidor envía la página “administrarusuarios.html” al cliente, y el usuario rellena este nuevo formulario.
En él hay tres campos para introducir el nombre del usuario ( campo “nombredelusuario”), su clave (campo
“clave usuario”) y si es administrador o no (campo “administrador”), así como las siguientes opciones:
Ver lista.
Si selecciona esta opción enviará el formulario con el campo “opcion” al valor “1” y el
servidor al recibirlo creará un documento html en el cual escribirá el contenido del fichero
“listausuarios” y se lo enviará al cliente.
Añadir.
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá los campos
“nombredelususario”, “clave usuario” y la opción “administrador”, para con ellos instanciar un
objeto de la clase Usuario, y añadirlo al fichero “Lista de Usuarios”.
Borrar.
Si selecciona esta opción el campo “opcion” toma el valor “3”, y el servidor borrará del fichero
“listausuarios” el objeto Usuario cuyo atributo nombre sea igual al valor del campo
“nombredelusuario”.
Modificar.
Con esta opción el campo “opcion” valdrá “4”, y el servidor sabrá que ha de actualizar los
datos del usuario cuyo nombre sea igual al valor del campo “nombredelusuario”.
35
Filtrado WEB con JAVA J.A.Placín
Administrar lista negra.
El servidor envía la página “administrarpalabras.html” al cliente, y el usuario rellena este nuevo formulario.
En él hay un campo para introducir la palabra ( campo “palabra”), así como las siguientes opciones:
Ver lista
Si selecciona esta opción enviará el formulario con el campo “opcion” al valor “1” y el
servidor al recibirlo creará un documento html en el cual escribirá el contenido del fichero
“listapalabras” y se lo enviará al cliente.
Añadir
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá el campo
“palabra”, para añadirlo al fichero “listapalabras”.
Borrar
Si selecciona esta opción el campo “opcion” toma el valor “3”, y el servidor borrará del fichero
“listapalabras” aquella que sea igual al valor del campo “palabra”.
Administrar dominios.
El servidor envía la página “administrardominios.html” al cliente, y el usuario rellena este nuevo formulario.
En él hay dos campos para introducir la URL del dominio ( campo “urldominio”) y validar si está prohibido o
permitido, así como las siguientes opciones:
Ver lista
Si selecciona esta opción enviará el formulario con el campo “opcion” al valor “1” y el
servidor al recibirlo creará un documento html en el cual escribirá el contenido del fichero
“listadominios” y se lo retransmitirá al cliente.
Añadir
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá el valor de los
campos “urldominio” y “prohibido”, para con ellos instanciar un objeto de la clase URL y
añadirlo al fichero “listadominios”.
Modificar
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá el campo
“urldominio” y “prohibido”, para localizar el objeto del fichero “listadominios” que tenga el
atributo dominio con el mismo valor que del campo “urldominio”, y actualizar su campo
“prohibido” al nuevo valor.
36
Filtrado WEB con JAVA J.A.Placín
Borrar
Si selecciona esta opción el campo “opcion” toma el valor “3”, y el servidor borrará del fichero
“listadominios” aquel objeto Dominio cuyo atributo dominio sea igual al valor del campo
“urldominio”.
Administrar códigos ICRA.
El servidor envía la página “administrarcodigos.html” al cliente, y el usuario rellena este nuevo formulario.
En él hay tres campos para introducir el código ICRA (campo “codigo”), su descripción ( campo
“descripcion”) y validar si está prohibido o permitido, así como las siguientes opciones:
Ver lista
Si selecciona esta opción enviará el formulario con el campo “opcion” al valor “1” y el
servidor al recibirlo creará un documento html en el cual escribirá el contenido del fichero
“listacodigos”, para enviárselo al cliente.
Añadir
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá el valor de los
campos “codigo”, “descripcion” y “prohibido”, para con ellos instanciar un objeto de la clase
Codigo y añadirlo al fichero “listacodigos”.
Modificar
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá los campos
“codigo”, “descripcion” y “prohibido”, para localizar el objeto del fichero “listacodigos” que
tenga el atributo codigo con el mismo valor que del campo “codigo”, y actualizar sus campos
“descripcion” y “prohibido” con los nuevos valores.
Borrar
Si selecciona esta opción el campo “opcion” toma el valor “3”, y el servidor borrará del fichero
“listacodigos” aquel objeto Codigo cuyo atributo codigo sea igual al valor del campo “codigo”.
37
Filtrado WEB con JAVA J.A.Placín
Administrar puertos.
El servidor envía la página “administrarpuertos.html” al cliente, y el usuario rellena este nuevo formulario.
En él hay un campo para introducir el número de puerto ( campo “numeroPuerto”), así como las siguientes
opciones:
Ver lista
Si selecciona esta opción enviará el formulario con el campo “opcion” al valor “1” y el
servidor al recibirlo creará un documento html en el cual escribirá el contenido del fichero
“listapuertos” y se lo enviará al cliente.
Añadir
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá el campo
“numeroPuerto”, para añadirlo al fichero “Lista de puertos”, si no existe ya.
Borrar
Si selecciona esta opción el campo “opcion” toma el valor “3”, y el servidor borrará del fichero
“listapuertos” aquel cuyo número sea igual al valor del campo “numeroPuerto”.
Administrar registro.
El servidor envía la página “administrarregistro.html” al cliente, y el usuario rellena este nuevo formulario.
En él hay dos campos para introducir el día de inicio ( campo “fechaInicio”) y el día final (campo “fechaFin”)
para la selección de los registros de peticiones,así como las siguientes opciones:
Ver lista
Si selecciona esta opción enviará el formulario con el campo “opcion” al valor “1” y el
servidor leerá los valores de “fechaInicio” y “fechaFin” para con ellos seleccionar los registros
del fichero “registro”, de las peticiones realizadas durante esos días, y crear un documento html
en el cual escribirá el contenido de los mismos y se lo enviará al cliente.
Borrar
Con esta opción enviará el campo “opcion” con el valor “2”, y el servidor leerá el valor de los
campos “fechaInicio” y “fechaFin”, para con ellos localizar los registros del fichero “registro” de
las peticiones realizadas esos días y eliminarlos del mismo.
Borrar TODO
Con esta opción enviará el campo “opcion” con el valor “3”, y el servidor borrará todos los
registros del fichero “registro”.
38
Filtrado WEB con JAVA J.A.Placín
Ilustración 18: Diagrama estático del diseño
39
Filtrado WEB con JAVA J.A.Placín
4.1 SOCKETS
Para la comunicación entre servidor y cliente de nuestra aplicación utilizaremos sockets.
Un socket es un punto final de un enlace de comunicación de dos vías, entre dos programas que se ejecutan
normalmente a través de una red, aunque también pueden correr en el mismo equipo.
Un socket queda completamente definido por una dirección IP, un protocolo y un número de puerto.
Existen dos tipos de sockets:
Orientado a la conexión.
Establece una ruta virtual entre el servidor y el cliente, que es fiable, en la cual no hay
pérdida de información ni duplicidad, y en la que los datos llegan en el orden en que se
envían.
El cliente inicia una sesión en el servidor, y éste guarda información sobre el estado del
cliente.
No orientado a conexión.
Se envían datagramas de tamaño fijo. Pueden existir pérdidas de información y los datos no
llegan ordenados. No se guarda información sobre el estado del cliente en el servidor, y así
es más tolerante a fallos.
Para que se establezca la conexión entre cliente y servidor, es necesario que el servidor permanezca a la
escucha en el puerto especificado. Para ello es iniciado el socket del servidor en primer lugar. Cuando un
cliente solicita una conexión a través del puerto donde espera el servidor, éste acepta la petición, y a partir
de aquí ya puede comenzar la transferencia de la información, entre las aplicaciones implicadas.
Cuando acaba la transferencia de información, el cliente cierra su canal o socket, y el servidor puede
permanecer a la espera de otra petición de un nuevo cliente o cerrar su socket también.
En nuestra aplicación es importante que el servidor pueda aceptar peticiones de varios clientes
simultáneamente, y para ello utilizaremos diferentes Threads para cada petición de un cliente nuevo.
4.2 THREADS
Un Thread es un flujo secuencial dentro de un programa o proceso. No puede ejecutarse por sí mismo, sino
siempre dentro de un proceso.
Todos los Threads de un proceso o programa, comparten los mismos recursos ( canales E/S, memoria, etc..),
de esa forma el cambio de contexto entre Threads es mucho más fácil para el sistema que en el caso de
cambio de contexto entre procesos diferentes.
Mientras que los programas de flujo único pueden realizar su tarea ejecutando las subtareas
secuencialmente, un programa multi-Thread permite que cada Thread comience y termine tan pronto como
sea posible. Este comportamiento presenta una mejor respuesta a la entrada en tiempo real.
En nuestro caso, cuando el servidor acepte la conexión de un nuevo cliente, iniciará un nuevo Thread que
será quién se encargue de la comunicación con el cliente, y él volverá a quedar a la espera de nuevas
peticiones.
40
Filtrado WEB con JAVA J.A.Placín
4.3 PERSISTENCIA.
La necesidad de guardar la información, nos lleva a tomar una decisión sobre como realizarlo. Tenemos dos
opciones básicas:
Serialización:
Los objetos señalados como serializable, pueden ser convertidos en una serie de bytes, de manera
que nos permitirá guardarla en cualquier soporte. Para recuperar esos objetos, se realiza una
deserialización.
Bases de datos:
Actualmente las base relacionales (BD) son los sistemas dominantes para el almacenamiento de
datos, pero las diferencias entre el paradigma de la orientación a objetos y el modelo relacional,
obliga a la creación de una capa de persistencia entre la aplicación y la base de datos. La
implementación de esta capa de persistencia podemos realizarla mediante clases Java que mapean
objetos a registros, y al revés, o utilizando un motor de persistencia o ORM, como Hibernate, que
nos evitará escribir todo ese código.
Para nuestra aplicación optaremos por la serialización, por varios motivos:
No nos obliga a instalar un SGBD.
La cantidad de datos a almacenar no es elevada.
Mayor simplicidad.
NOTA: Los ficheros de configuración son simples ficheros de texto, que también pueden ser modificados
directamente con cualquier editor. Queda fuera del alcance de este trabajo dotar a la aplicación de sistemas
de seguridad que impidan la modificación de dichos archivos por usuarios no autorizados.
ServerSocket:
Esta clase implementa el socket del lado del servidor. Una vez creado ha de permanecer a la escucha en el
puerto especificado, que en esta aplicación será el 8080, hasta que un cliente solicite conectarse con él.
Creamos un objeto con la siguiente llamada al constructor:
socket = new ServerSocket(8080);
41
Filtrado WEB con JAVA J.A.Placín
Socket:
Esta clase implementa la funcionalidad de los sockets. Es la que implementa el socket para el cliente.
Creamos un objeto con la siguiente llamada al construtor:
Socket socket_cli = socket.accept();
Thread:
La forma más directa para hacer un programa multi-thread es extender la clase Thread, y redefinir el
método run(). Este método es invocado cuando se inicia el thread (mediante una llamada al método start()
de la clase thread). El thread se inicia con la llamada al método run y termina cuando finaliza éste.
//Arrancamos el nuevo hilo
nuevaPeticion.run();
InputStream:
Esta clase abstracta declara los métodos para leer datos desde una fuente concreta y es la clase base de la
mayoría de los flujos de entrada. La usamos cuando obtenemos un objeto DataOutputStream con el método
getOutputStream() de la clase Socket.
OutputStream:
Esta clase abstracta es semejante a la anterior, pero declara los métodos para escribir datos a un flujo de
salida, en nuestro caso un socket. La utilizaremos para obtener un objeto DataInputStream con el método
getOutputStream() de la clase Socket.
DataInputStream:
Esta clase proporciona los métodos necesarios para leer datos primitivos de un flujo de entrada. En nuestra
aplicación será utilizada para leer los mensajes recibidos por el socket con el cliente.
//Leemos la petición del cliente
DataInputStream inCliente =
new DataInputStream(socket_cli.getInputStream());
42
Filtrado WEB con JAVA J.A.Placín
DataOutputStream:
Esta clase proporciona los métodos necesarios para escribir datos primitivos en un flujo de salida. En
nuestra aplicación será utilizada para enviar los mensajes por el socket hacia el servidor web.
//Instanciamos objeto para escribir mensajes al web
DataOutputStream outWeb =
new DataOutputStream(socketWeb.getOutputStream());
FileInputStream:
Esta clase nos proporciona los métodos necesario para la lectura de datos desde un fichero. La utilizamos
para la lectura de los ficheros de configuración de la aplicación.
Muestra de código de la aplicación donde es instanciado un objeto de esta clase, es leído el fichero y
enviados los datos al cliente:
fileIn = new FileInputStream(fitxer);
//Leemos el fichero entrado por parámetro
while((bytes = fileIn.read(buffer)) != 1 )
//Y se lo enviamos al cliente
socket_cli.getOutputStream().write(buffer, 0, bytes);
FileOutputStream:
Esta clase nos proporciona los métodos necesario para la escritura de datos en un fichero. La utilizamos
para escribir y crear los ficheros de configuración de la aplicación.
Muestra de código de la aplicación donde es instanciado un objeto de esta clase, y escribimos en el los
datos de un dominio:
FileOutputStream outFile = new FileOutputStream(fichero);
outFile.write((dominio.toString()+"\r\n").getBytes());
43
Filtrado WEB con JAVA J.A.Placín
4.5 CLASES
A continuación se explican con detalle las diferentes clases que han resultado durante la implementación
del diseño.
Servidor:
Es la clase principal e inicial del programa. Su especificación:
Ilustración 19: Clase Servidor
En primer lugar instanciará un objeto de la clase CrearFicheros, que se explica más adelante, y a
continuación crea un ServerSocket en el puerto 8080, permaneciendo a la espera de conexiones por parte
de los clientes. Cuando recibe una petición instancia un objeto de la clase Petición y otro de la clase
ThreadServidor. Al crear el objeto ThreadServidor le pasa por parámetro la nueva Petición y una variable
booleana que indica si el usuario que hace la petición es administrador o no. Una vez realizado esto, queda
a la espera de nuevas peticiones de clientes.
ThreadServidor:
Es la clase que ejecuta todo el proceso de comunicación con el cliente y con los servidores externos, así
como el filtrado de la misma.
Ya hemos explicado en apartados anteriores el funcionamiento básico de un thread.
En esta clase al ejecutarse el thread, método run(), en primer lugar leemos la petición del cliente, que en
nuestro caso es el navegador del mismo equipo, y extraemos los datos del protocolo HTTP necesarios:
Tipo de petición : que aquí sólo contemplamos GET y POST
URI : que también puede ser el nombre de uno de los ficheros de configuración de la aplicación.
Extraemos también la última línea de la petición, que será la respuesta en el caso de los
formularios de configuración.
Es importante recalcar que también eliminamos, de las peticiones que nos envía el navegador cliente, las
opciones :
- “Accept-Encoding”: Si recibimos los datos codificados, no podemos comprobar los contenidos.
- “Keep-Alive”: La cambiamos por “Connection: close”, así el servidor web cierra la conexión nada
más acabar el envío de la página solicitada.
44
Filtrado WEB con JAVA J.A.Placín
Ilustración 20: Clase ThreadServidor
45
Filtrado WEB con JAVA J.A.Placín
Menu:
Es la clase que implementa el menú de configuración de la aplicación. Su especificación:
Ilustración 21: Clase Menu
Al constructor de la clase se le pasa por parámetro el socket del cliente (programa navegador). Una vez
instanciado el objeto Menu, se puede ejecutar el método ejecutarMenu, al cual le pasaremos por
parámetros el fichero a manejar, el tipo de petición (GET o POST), la petición misma y un vector que
contendrá los nombres de los ficheros de configuración.
Este método es el que ejecutará las acciones necesarias para la gestión de la configuración del programa
CrearFicheros:
Es la clase que ejecuta la creación de los ficheros de configuración.
Cada vez que se inicia el Servidor, instancia un objeto de esta clase, el cual comprueba si ya existen los
ficheros de configuración. Para comprobar si existen instancia un objeto de la clase File , y si el fichero no
existe lo creará haciendo uso de la clase FileOutputStream. Para la creación de los diferentes ficheros usa
unos parámetros mínimos. Para el fichero “listausuarios” crea un primer usuario con el nombre del
usuario actual, que será administrador con una clave inicial “1000”.
Si el fichero “registro” ya existe comprueba su tamaño. Cuando este fichero, que registra todas las
peticiones que han sido bloqueadas, sobrepasa los 500Kbytes lo renombra como “regBackup” con una
extensión que es el retorno de la función System.currentTimeMillis(), y se crea un nuevo “registro”.
46
Filtrado WEB con JAVA J.A.Placín
Su especificación:
Ilustración 22: Clase CrearFicheros
Usuario:
Esta clase implementa un usuario. Su especificación:
Ilustración 23: Clase Usuario
47
Filtrado WEB con JAVA J.A.Placín
Dominio:
Esta clase implementa un dominio. Su especificación:
Ilustración 24: Clase Dominio
Peticion:
Es la clase que implementa una petición.
Esta clase tiene dos constructores diferentes. El primero es usado por la clase Servidor, para crear un
objeto nuevo con cada petición recibida. Sólo se le pasa por parámetro el nombre del usuario, el resto de
datos son creados automáticamente. El segundo constructor es usado por la clase CrearFicheros para
crear una primera petición ficticia durante la creación del fichero “registro” y necesita que le pasen por
parámetro el nombre del usuario y la url. Su especificación:
Ilustración 25: Clase Peticion
48
Filtrado WEB con JAVA J.A.Placín
CodigoICRA:
Esta clase implementa un código ICRA. Su especificación:
Ilustración 26: Clase CodigoICRA
Lista:
Esta clase implementa una array de strings formados a partir de las cadenas extraídas de los ficheros de
configuración.
Contiene los métodos necesarios para la consulta y modificación del contenido, así como la salvaguarda de
los datos ya modificados, en el mismo fichero.
Su especificación:
Ilustración 27: Clase Lista
49
Filtrado WEB con JAVA J.A.Placín
ListaUsuarios:
Esta clase heredera de “Lista” , implementa métodos específicos para poder creargestionar usuarios. Su
especificación:
Ilustración 28: Clase listaUsuarios
listaCodigos:
Esta clase también es heredera de “Lista”, e implementa la lista de códigos ICRA.
Su especificación:
Ilustración 29: Clase listaCodigos
listaDominios:
Esta clase implementa la lista de dominios registrados. Su especificación:
Ilustración 30: Clase listaDominios
50
Filtrado WEB con JAVA J.A.Placín
Ilustración 31: Diagrama de clases
51
Filtrado WEB con JAVA J.A.Placín
Ilustración 32: Diagrama de flujo
52
Filtrado WEB con JAVA J.A.Placín
5 MANUAL DE LA APLICACIÓN.
5.1 INSTALACIÓN
Los archivos necesarios para la instalación, y funcionamiento de la aplicación son:
proxy.jar : Este archivo contiene todas las clases de la aplicación.
Los documentos html que implementan la interface de configuración del programa:
■ menuinicial.html
■ administrarusuarios.html
■ administrarpalabras.html
■ administrardominios.html
■ administrarcodigos.html
■ administrarpuertos.html
■ administrarregistro.html
Para la ejecución del programa es suficiente copiar estos archivos en un mismo directorio, y desde éste
ejecutar: java -jar proxy.jar
En cuanto a los navegadores, se ha probado su funcionamiento con Mozilla Firefox 2.0.0.2 y con
Internet Explorer versiones 6 y 7.
Es necesario configurarlos en el apartado “Red” para que utilicen el proxy “localhost” en el puerto 8080.
Con estas condiciones, la aplicación ha sido comprobada, siendo correcto su funcionamiento, en las
siguientes plataformas con la versión “jre1.5.0_06” de JVM :
53
Filtrado WEB con JAVA J.A.Placín
5.2 GESTIÓN
En el apartado anterior se ha explicado como instalar y ejecutar la aplicación.
Desde el inicio del diseño, se ha contemplado la aplicación como servicio residente del sistema, de manera
que no se le ha dotado de método propio, para finalizarla a voluntad.
Si se desea parar el programa se tendrá que hacer mediante comandos de sistema, y esto será dependiente
de la plataforma donde se esté ejecutando.
Es importante recalcar que la primera vez que se ejecute el programa, al crear el fichero “listausuarios”, se
crea el primer usuario administrador, adjudicándole el nombre del usuario actual del sistema.
La interface de usuario se limita a la gestión de la configuración del filtrado que la aplicación realizará.
Esta gestión será llevada a cabo por los usuarios registrados como administradores por medio de cualquier
navegador web. Para ello bastará con introducir en la barra de direcciones del navegador el nombre del
fichero del menú inicial “menuinicial.html” , y a partir de este menú acceder a las diferentes opciones.
También es posible acceder directamente a cualquiera de los ficheros de configuración, introduciendo su
nombre en el navegador.
Tal y como se especificó durante la fase de diseño, el administrador podrá :
• Añadir, borrar y modificar usuarios.
• Añadir, borrar y modificar dominios registrados.
• Añadir, borrar y modificar palabras prohibidas.
• Añadir, borrar y modificar códigos ICRA.
• Consultar y borrar las peticiones registradas.
Los ficheros iniciales, sólo incorporan los mínimos elementos para la ejecución del programa, por ello, si se
desea un buen filtrado se han de ampliar estos ficheros, incorporando palabras y dominios.
El administrador también tendrá que encargarse del control de los archivos de registro. Como ya se explicó
en el apartado de implementación, cuando el fichero de registro sobrepasa los 500Kbytes se crea un nuevo
fichero “regBackup.xxxxxxxxxxxxx” , donde las “x” son el retorno de la función System.currentTimeMillis(),
y el original queda vacío. Así con el paso del tiempo pueden llegar a ser muy numerosos y ocupar espacio
de disco necesario para otros usos. Queda a cargo del administrador la eliminación de los ficheros antiguos.
54
Filtrado WEB con JAVA J.A.Placín
6 CONCLUSIONES.
La aplicación obtenida cumple con los requisitos que se establecieron desde el inicio.
En cuanto a la gestión del programa, cabe destacar la interface de configuración del mismo, por su sencillez
y funcionalidad.
A medida que se iba desarrollando la aplicación, se hacían patentes posibles funcionalidades y mejoras a
añadir, pero hubieran supuesto una carga de trabajo, que hubiese imposibilitado la entrega en el plazo
previsto.
Destacar también que la creación inicial del plan de trabajo ha sido imprescindible para cumplir el objetivo
final. La obligatoriedad de cumplir los plazos propuestos en el plan de trabajo han supuesto un reparto muy
apropiado de la carga de trabajo que supone este proyecto.
6.1 MEJORAS
✔ En un principio se preveía ejecutar un control más estricto a la hora de autentificar a los usuarios
administradores, y por ello la clase Usuario contiene el atributo “clave”, pero durante el desarrollo
del código, se optó por validarlos mediante el atributo “esAdministrador”. Así el atributo “clave” no
es utilizado para la identificación.
✔ En cuanto al filtrado utilizando el etiquetado ICRA, este programa busca los tags de las mismas en
cada página para filtrarlos. Este método no es el más adecuado, puesto que según las
recomendaciones de la organización que regula este sistema de etiquetado, es mejor crear enlaces
en las páginas a ficheros RDF, donde se especifican las etiquetas.
Así si se desea una correcta utilización de estas etiquetas, se tendría que localizar el enlace y a
partir de éste acceder al archivo RDF para interpretarlo. Una mejora imprescindible, pero que no ha
podido ser implementada durante este plazo.
55
Filtrado WEB con JAVA J.A.Placín
7 BIBLIOGRAFÍA.
Freed, N. and N. Borenstein, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet
Message Bodies , RFC 2045, November 1996.
Berners-Lee, T., Fielding, R. and H. Frystyk, Hypertext Transfer Protocol -- HTTP/1.0 , RFC 1945, May 1996.
Palme, J., Common Internet Message Headers , RFC 2076, February 1997. [jg640]
Berners-Lee, T., Universal Resource Identifiers in WWW , RFC 1630, June 1994.
Berners-Lee, T., Masinter, L. and M. McCahill, Uniform Resource Locators (URL) , RFC 1738, December 1994.
Ignacio Díaz Asenjo, Universidad Carlos III de Madrid, Hibernate: Persistencia de objetos en JAVA.
Enric Peig Olivé i Xavier Perramon Tornil, Universitat Oberta de Catalunya, Programació de Sockets.
José M. Barceló Ordina i Jordi Íñigo Griera, Universitat Oberta de Catalunya, TCP/IP Els protocols de la xarxa
Internet.
Ramon Martí Escalé i Xavier Perramon Tornil, Universitat Oberta de Catalunya, Aplicacions de Internet.
56
Filtrado WEB con JAVA J.A.Placín
8 GLOSARIO.
URL: Un URL (Uniform Resource Locator) es el localizador que permite acceder a un recurso (página) web.
ejemplo: http : //www.direccion.com/
URI: Un URI (Uniform Resource Identifier) se diferencia de un URL en que permite acceder a una
subdirección dentro de la dirección especificada por la URL.
ejemplo: http : //www.direccion.com/ ?pagina=2 # inicio
HTML: Lenguaje de marcas utilizado como estándar en las páginas web.
XML: Metalenguaje extensible de etiquetas.
XHTML: La versión XML de HTML.
CGI: Permite solicitar datos de un programa ejecutado en un servidor web. CGI especifica el estándar para
transferir datos entre el cliente y el programa.
MIME: Son una serie de especificaciones dirigidas a que se puedan intercambiar a través de internet todo
tipo de archivos (texto, audio, vídeo, etc.) de forma transparente para el usuario.
COOKIE: Datos almacenados en el ordenador del visitante de una página web por el servidor de la misma.
SHAREWARE: Básicamente es software gratuito con limitaciones de uso. (Como periodo de prueba).
PROTOCOLO: Normas que regulan la comunicación entre diferentes elementos de una red.
SOCKET: Punto final de un enlace de comunicación de dos vías, entre dos programas, normalmente a través
de la red.
57