Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Appliance Antispam”
PROYECTO DE TESIS DE GRADO
6TO CURSO DE GRADUACIÓN
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
ALCÌVAR VILLAMAR GEORGE HUMBERTO
PINARGOTE SAVINIEN FREDDY JOHANN
TOALA MOSQUERA DAVID LEONEL
GUAYAQUIL – ECUADOR
Año: 2009
II
AGRADECIMIENTO
Agradezco a todas las personas que me
brindaron su apoyo, para lograr culminar
este sueño. Entre ellos mis padres, mis
amigos y catedráticos que impartieron sus
conocimientos.
Alcívar Villamar George Humberto
III
AGRADECIMIENTO
Agradezco a mis padres, por el apoyo
incondional que me brindaron a lo largo de
la carrera. A mis profesores y compañeros,
que por medio de las enseñanzas,
investigaciones y discusiones, me hicieron
crecer en conocimiento y madurar como
persona.
Pinargote Savinien Freddy Johann
IV
AGRADECIMIENTO
En agradecimiento a la Universidad Estatal
de Guayaquil, Facultad de Ciencias Físicas
y Matemáticas, en especial a su Carrera de
Ingeniería en Sistemas Computacionales,
por haberme forjado para ser un
profesional competente, listo para afrontar
los desafíos laborales y profesionales.
Toala Mosquera David Leonel
V
DEDICATORIA
Dedico todo este trabajo a mi padre a mis
hermanos que los quiero tanto, y a mi
querida madre Piedad Villamar.
Alcívar Villamar George Humberto
VI
DEDICATORIA
Dedico este trabajo a mi equipo del
proyecto de grado y a todas aquellas
personas quienes buscan usar la ciencia
en pos de ayudar a los demás.
Pinargote Savinien Freddy Johann
VII
DEDICATORIA
Este trabajo esta dedicado a mis padres
por haberme ensañado que la
perseverancia es la clave del éxito, que el
esfuerzo constante nos convierte día a día
en mejores seres humanos, capaces de
enfrentar la vida con valentía
Toala Mosquera David Leonel
VIII
TRIBUNAL DE GRADUACIÓN
Presidente del Tribunal Primer Vocal
Segundo Vocal Secretario
IX
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”.
(Reglamento de Graduación de la Carrera de Ingeniería en Sistemas
Computacionales, Art. 26).
___________________________ ____________________________
George Humberto Alcívar Villamar Pinargote Savinien Freddy Johann
C.I: 0913524831 C.I: 0911170991
_____________________________
Toala Mosquera David Leonel
C.I: 0923179980
X
RESUMEN
Bizshield (Appliance AntiSpam) es un sistema experto, que tiene como
objetivo, identificar el correo electrónico spam. El sistema experto dispone de
una interfaz de usuario Web, donde el experto en el tema de spam, configura
las heurísticas de detección de correo electrónico spam. Las heurísticas se
configuran mediante una expresión lógica, a manera de regla que evalúan las
variables del correo electrónico en búsqueda de casuísticas de spam,
además, configura acciones (rechazar correos, quitar archivos adjuntos,
poner en cuarentena, alertas en el contenido etc.) a ejecutarse para mitigar el
daño que puede causar el spam. Bizshield viene con una configuración por
defecto para la detección de spam.
XI
ÍNDICE GENERAL
AGRADECIMIENTO .................................................................................................................II
DEDICATORIA .........................................................................................................................v
TRIBUNAL DE GRADUACIÓN............................................................................................ VIII
DECLARACIÓN EXPRESA ................................................................................................... IX
RESUMEN ............................................................................................................................... X
INDICE GENERAL ................................................................................................................. XI
CAPÍTULO 1 ............................................................................................................................1PLANIFICACIÓN DEL PROYECTO ........................................................................................11.1 Visión.................................................................................................................................1
1.2 Misión................................................................................................................................ 2
1.3 Análisis FODA ................................................................................................................... 2
1.4 Factibilidad ........................................................................................................................ 31.4.1 De Producirlo ................................................................................................................... 31.4.2 De Comercializarlo.......................................................................................................... 3
1.5 Ámbito del proyecto. ........................................................................................................ 3
1.6 Ventajas O Beneficios ...................................................................................................... 41.6.1 Ventajas Del Proyecto...................................................................................................... 41.6.2 Ventajas Para la empresa................................................................................................ 4
1.7 Definición de un Spam. .................................................................................................... 4
1.8 Antecedentes y definición del problema ........................................................................ 6
1.9 Solución Propuesta ........................................................................................................ 111.9.1 Gestión centralizada ...................................................................................................... 121.9.2 Fácil de Usar .................................................................................................................. 131.9.3 Inversión Baja ................................................................................................................ 131.9.4 Alta flexibilidad ............................................................................................................... 14
1.10 Diagrama........................................................................................................................ 14
1.11 Objetivos del proyecto. ................................................................................................ 151.11.1 Objetivos Generales..................................................................................................... 151.11.2 Objetivos específicos. .................................................................................................. 15
XII
1.12 Alcance del proyecto. ................................................................................................... 16
1.13 Recursos necesarios para el proyecto. ..................................................................... 171.13.1 Recurso Humano ......................................................................................................... 171.13.2 Recurso Hardware ....................................................................................................... 171.13.3 Recurso Software DEL PROYECTO ........................................................................... 19
1.14 Cronograma................................................................................................................... 21
1.15 Metodología .................................................................................................................. 22
CAPÍTULO 2 ..........................................................................................................................23ANÁLISIS DEL SISTEMA ......................................................................................................23
2.1 Levantamiento de Información..................................................................................... 232.1.1 Encuesta ........................................................................................................................ 25
2.2 Análisis de Requerimientos........................................................................................... 282.2.1 Servicio Antispam (BIZSHIELD SERVICE) ................................................................... 322.2.2 Aplicación Web Administrador Antispam (BIZSHIELD WEB ADMINISTRATOR)......... 32
2.3 ROLES DEL SISTEMA..................................................................................................... 332.3.1 Administrador ................................................................................................................. 332.3.2 Usuario........................................................................................................................... 34
2.4 ANÁLISIS DE DATOS...................................................................................................... 342.4.1 EMPRESA...................................................................................................................... 342.4.2 ROL................................................................................................................................ 342.4.3 USUARIO....................................................................................................................... 342.4.4 USUARIO_ROL ............................................................................................................. 352.4.5 ACCIÓN ......................................................................................................................... 352.4.6 COMPONENTE_OPERADOR_REGLA ........................................................................ 352.4.7 COMPONENTE_OPERANDO_CONJUNTO ................................................................ 362.4.8 COMPONENTE_OPERANDO_CONSTANTE .............................................................. 362.4.9 COMPONENTE_OPERANDO_REGLA ........................................................................ 362.4.10 COMPONENTE_OPERANDO_VARIABLE................................................................. 372.4.11 COMPONENTE_REGLA ............................................................................................. 372.4.12 CORREO ..................................................................................................................... 372.4.13 DATO_EJECUCION_PROCESO ................................................................................ 372.4.14 EJECUCION_ACCION ................................................................................................ 382.4.15 EJECUCION_PROCESO ............................................................................................ 382.4.16 ELEMENTO_CONJUNTO ........................................................................................... 382.4.17 EVALUACION_REGLA................................................................................................ 382.4.18 OPERADOR................................................................................................................. 392.4.19 PARAMETRO_ACCION .............................................................................................. 392.4.20 PARAMETRO_TIPO_ACCION.................................................................................... 392.4.21 PROCESO ................................................................................................................... 402.4.22 REGLA ......................................................................................................................... 402.4.23 REGLA_ACCION ......................................................................................................... 402.4.24 REGLA_PROCESO..................................................................................................... 412.4.25 SISTEMA ..................................................................................................................... 412.4.26 SUBSISTEMA .............................................................................................................. 41
XIII
2.4.27 SUBTIPO_DATO ......................................................................................................... 412.4.28 TIPO_ACCION............................................................................................................. 412.4.29 TIPO_ACCION_INCONSISTENTE ............................................................................. 422.4.30 TIPO_DATO................................................................................................................. 422.4.31 TIPO_OPERADOR ...................................................................................................... 422.4.32 VARIABLE.................................................................................................................... 422.4.33 VARIABLE_PROCESO................................................................................................ 43
2.5 CASOS DE USO............................................................................................................... 43
2.6 DIAGRAMA DE FLUJO ANTISPAM................................................................................ 48
CAPÍTULO 3...........................................................................................................................523. DISEÑO DEL SISTEMA .....................................................................................................52
3.1 ARQUITECTURA COMPUTACIONAL ............................................................................ 53
3.2 DISEÑO DE DATOS......................................................................................................... 54
3.3 DIAGRAMA ENTIDAD – RELACIÓN .............................................................................. 54
3.4 ARQUITECTURA GENERAL DE SOFTWARE ............................................................... 703.4.1 CONSIDERACIONES PARA EL MODELO ................................................................... 723.4.2 CONSIDERACIONES PARA EL CONTROLADOR ...................................................... 733.4.3 CONSIDERACIONES PARA LA VISTA ........................................................................ 74
3.5 ARQUITECTURA ESPECÍFICA DE SOFTWARE DEL SUB-SISTEMA BizShield WebAdministrator......................................................................................................................... 753.5.1 CAPA CLIENTE WEB.................................................................................................... 753.5.2 CAPA WEB .................................................................................................................... 76
3.6 ARQUITECTURA ESPECÍFICA DE SOFWTARE DEL SUB-SISTEMA BizShieldService.................................................................................................................................... 783.6.1 Arranque y Parada del Servicio ..................................................................................... 793.6.2 Atención a peticiones SMTP......................................................................................... 813.6.3 Procesamiento de Correos ............................................................................................ 83
3.7 ARQUITECTURA ESPECÍFICA DE SOFWTARE DEL SUB-SISTEMA BIZSHIELDLOGIC AND PERSISTENCES ............................................................................................... 853.7.1 Business Object ............................................................................................................. 86
CAPÍTULO 4...........................................................................................................................904. CODIFICACIÓN (DISEÑO A NIVEL DE COMPONENTES) ..............................................90
4.1 ESTANDARES DE CODIFICACIÓN................................................................................ 90
4.2 Consideraciones Generales........................................................................................... 91
4.3 Convenciones De Nombrado......................................................................................... 914.3.1 Definición de término CamelCase ................................................................................. 92
XIV
Inicio Tabla 41. Covenciones de nombrado. ...................................................................... 934.3.2 Sentencias ..................................................................................................................... 954.3.3 Espacios en blanco ..................................................................................................... 102
4.4 DETALLES DE LOS PROCESOS Y COMPONENTES DEL SISTEMA BIZSHIELD .. 104
4.5 DETALLES de CODIFICACIÓN DEL SUBSISTEMA BIZSHIELD SERVICE .............. 1064.5.1 Arranque del Subsistema Bizshield Service. ............................................................... 1074.5.2 Proceso de atención de peticiones SMTP. .................................................................. 1114.5.3 Procesamiento de Correos. ........................................................................................ 1144.5.4 Monitoreo de Cambios de Reglas............................................................................... 1194.5.5 Monitoreo para actualizaciones automática de las Reglas.......................................... 121
4.6 DETALLES DE CODIFICACIÓN DE LOS COMPONENTES DEL SUBSISTEMABIZSHIELD LOGIC AND PERSISTENCE ........................................................................... 1244.6.1 Clases BO .................................................................................................................... 1244.6.2 Clases DAO. ................................................................................................................ 1284.6.3 Clases Persistentes. .................................................................................................... 134
4.7 DETALLES de CODIFICACIÓN DE LOS COMPONENTES DEL SUBSISTEMABIZSHIELD WEB ADMINISTRATOR .................................................................................. 1404.7.1 Introducción a JavaServer Faces ................................................................................ 1404.7.2 Managed Beans .......................................................................................................... 1424.7.3 Páginas JSF................................................................................................................ 1594.7.4 El archivo de configuración faces-config.xml.............................................................. 1664.7.5 Archivo faces-config.xml de Bizshield Web Administrator.......................................... 168
CAPÍTULO 5.........................................................................................................................1725. PRUEBAS.........................................................................................................................172
5.1 Infraestructura Local. ................................................................................................... 172
5.2 Infraestructura De Prueba En Internet ....................................................................... 1755.3 Pruebas Unitarias e Integrales........................................................................................ 1765.3.1 Pruebas Unitarias......................................................................................................... 1775.3.2 Pruebas Funcionales e Integrales .............................................................................. 1805.3.2.1 Pruebas Funcionales e Integrales Bizshield Web Administrator .............................. 180
5.3.2.3 Prueba De Correo Entrante.............................................................................. 202Información registrada en la base de datos.......................................................................... 211Figura 55. Caso de Prueba 6: Información registrada en la base de datos ......................... 213Figura 56. Caso de Prueba 6: Correo Encolado con Id Correo 13....................................... 214
5.3.2.2 Prueba De Correo Saliente.................................................................................... 215
CAPÍTULO 6.........................................................................................................................2286. RECOMENDACIONES Y CONCLUSIONES ...................................................................228
6.1 Recomendaciones ........................................................................................................ 228
XV
ÍNDICE DE FIGURAS
FIGURA 1. DIAGRAMA DE ESTRUCTURA DONDE FUNCIONARÁ EL BIZSHIELD............................. 14
FIGURA 2. CRONOGRAMA DEL PROYECTO ANTISPAM. .............................................................. 21
FIGURA 3. DIAGRAMA GENERAL DE CASOS DE USO DEL SISTEMA.............................................. 43
FIGURA 4. DIAGRAMA DE FLUJO ANTISPAM. ............................................................................. 49
FIGURA 5. ESQUEMA GENERAL DE FUNCIONAMIENTO DEL APPLIANCE ANTISPAM..................... 54
FIGURA 6. MVC ..................................................................................................................... 71
FIGURA 7. ARQUITECTURA SUB-SISTEMA DE ADMINISTRACIÓN ANTISPAM ................................... 75
FIGURA 8. DIAGRAMA DE SECUENCIA DE ARRANQUE Y PARADA DE BIZSHIELD SERVICE. ............. 78
FIGURA 9. DIAGRAMA DE SECUENCIA DE ATENCIÓN A PETICIONES SMTP Y ALMACENAMIENTO EN
LA COLA DE CORREOS......................................................................................................... 81
FIGURA 10. DIAGRAMA PARA RECUPERAN LOS CORREOS DE LA COLA Y SE COMIENZAN A
PROCESAR PARA DETERMINAR SI SON CORREO SPAM O NO................................................. 83
FIGURA 11. DIAGRAMA DE AMBIENTE DE PRUEBAS LOCAL ...................................................... 173
FIGURA 12. INFRAESTRUCTURA DE PRUEBA EN INTERNET. ...................................................... 175
FIGURA 13. EJECUCIÓN DE LAS PRUEBAS UNITARIAS DE LOS CALCULADORES DE VARIABLES. ... 179
FIGURA 14. CASO DE USO: CREACIÓN DE REGLA SIN INGRESAR CAMPOS OBLIGATORIOS .......... 181
FIGURA 15. CASO DE USO: EDICIÓN DE REGLA....................................................................... 182
FIGURA 16. CASO DE USO: CREACIÓN DE REGLA UTILIZANDO LAS VARIABLES
DIRECCIONES_DESTINOS, DOMINIO_REMITENTE, DOMINIO_REMITENTE_VALIDO ................... 184
FIGURA 17 . CASO DE USO: CREACIÓN DE REGLA UTILIZANDO LAS VARIABLES
ESTA_SMTP_TO_IGUAL_MIME_TO, ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS,
EXTENCIONES_ARCHIVOS_ADJUNTOS................................................................................ 185
FIGURA 18 . CASO DE USO: REGLA UTILIZANDO LAS VARIABLES IP_ORIGEN,
JUEGOS_CARACTERES, MIME_FROM...................................................................... 186
XVI
FIGURA 19. CASO DE USO: CREACIÓN DE REGLA UTILIZANDO LAS VARIABLES
NOMBRES_ARCHIVOS_ADJUNTOS, NUMERO_DESTINATARIOS, SUBJECT....... 187
FIGURA 20. CASO DE USO: EN EL MÓDULO DE CONFIGURACIÓN DE REGLA, OPCIÓN DE EDICIÓN DE
REGLA, SE INTENTA EDITAR UNA REGLA EXISTENTE............................................................. 188
FIGURA 21. CASO DE USO: SE INTENTA CONSULTAR UNA REGLA EXISTENTE ............................ 189
FIGURA 22.CASO DE USO: ELIMINACIÓN DE REGLA CASO DE USO: CONFIGURACIÓN DE ACCIONES
....................................................................................................................................... 190
FIGURA 23. CASO DE USO: CREACIÓN DE ACCIÓN SIN INGRESAR TODOS LOS PARAMETROS...... 191
FIGURA 24. CASO DE USO: CREACIÓN DE ACCIÓN UTILIZANDO UN NOMBRE YA EXISTENTE ....... 192
FIGURA 25. CASO DE USO: CREACIÓN DE ACCIÓN DE TIPO ACEPTAR CORREO .................. 193
FIGURA 26. CASO DE USO: EN EL MÓDULO DE CONFIGURACIÓN DE ACCIÓN, OPCIÓN DE EDICIÓN
DE ACCIÓN, SE INTENTA EDITAR UNA ACCIÓN EXISTENTE..................................................... 194
FIGURA 27. CASO DE USO SE INTENTA CONSULTAR UNA ACCIÓN EXISTENTE ............................ 195
FIGURA 28. CASO DE USO: EN EL MÓDULO DE CONFIGURACIÓN DE ACCIÓN, OPCIÓN DE
ELIMINACIÓN DE ACCIÓN, SE INTENTA ELIMINAR UNA ACCIÓN EXISTENTE SE INTENTA CONSULTAR
UNA ACCIÓN EXISTENTE .................................................................................................... 196
FIGURA 29. CASO DE USO: CREACIÓN DE USUARIO SIN INGRESAR CAMPOS OBLIGATORIOS ...... 197
FIGURA 30. CASO DE USO: CREACIÓN DE USUARIO MENSAJE DE USUARIO EXIXTENTE. ............ 198
FIGURA 31. CASO DE USO: SE INTENTA EDITAR UN USUARIO EXISTENTE .................................. 199
FIGURA 32. CASO DE USO: SE INTENTA CONSULTAR UN USUARIO EXISTENTE........................... 200
FIGURA 33. CASO DE USO SE INTENTA ELIMINAR UN USUARIO EXISTENTE. ............................... 201
FIGURA 34. CASO DE PRUEBA 1: SUBJECT SOSPECHOSO EN CORREO ENTRANTE ................. 202
FIGURA 35. CASO DE PRUEBA 1: VARIABLES CALCULADAS ..................................................... 203
FIGURA 36. CASO DE PRUEBA 1: CORREO ENCOLADO CON ID CORREO 4 ............................... 203
FIGURA 37. CASO DE PRUEBA 1: RESULTADO DE LA EVALUACIÓN DE REGLAS......................... 204
FIGURA 38. CASO DE PRUEBA 2: BODY SOSPECHOSO EN CORREO ENTRANTE ........................ 204
FIGURA 39. CASO DE PRUEBA 2: BODY SOSPECHOSO EN CORREO ENTRANTE ........................ 205
XVII
FIGURA 40. CASO DE PRUEBA 2: CORREO ENCOLADO CON ID CORREO 3 ............................... 205
FIGURA 41. CASO DE PRUEBA 2: RESULTADO DE EVALUACIÓN DE REGLAS ............................. 206
FIGURA 42. CASO DE PRUEBA 3: FROM SOSPECHOSO ........................................................... 206
FIGURA 43. CASO DE PRUEBA 3: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS ................ 207
FIGURA 44. CASO DE PRUEBA 3: CORREO ENCOLADO CON ID CORREO 5 ............................... 207
FIGURA 45. CASO DE PRUEBA 3: RESULTADO DE EVALUACIÓN DE REGLAS ............................. 208
FIGURA 46. CASO DE PRUEBA 4: SMTP FROM SOSPECHOSO. .............................................. 208
FIGURA 47. CASO DE PRUEBA 4: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS ............... 209
FIGURA 48. CASO DE PRUEBA 4: CORREO ENCOLADO CON ID CORREO 8 ............................... 209
FIGURA 49. CASO DE PRUEBA 4: RESULTADO DE EVALUACIÓN DE REGLAS ............................. 210
FIGURA 50. CASO DE PRUEBA 5: LENGUAJE INVÁLIDO............................................................ 210
FIGURA 51. CASO DE PRUEBA 5: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS ................ 211
FIGURA 52. CASO DE PRUEBA 5: CORREO ENCOLADO CON ID CORREO 12 ............................. 211
FIGURA 53. CASO DE PRUEBA 5: RESULTADO DE EVALUACIÓN DE REGLAS ............................. 212
FIGURA 54. CASO DE PRUEBA 5: MAIL DE RESPUESTA........................................................... 212
FIGURA 55. CASO DE PRUEBA 6: JUEGO DE CARACTERES INVÁLIDO ....................................... 213
FIGURA 56. CASO DE PRUEBA 6: RESULTADO DE EVALUACIÓN DE REGLAS ............................. 214
FIGURA 57. CASO DE PRUEBA 6: RESULTADO DE EVALUACIÓN DE REGLAS ............................. 215
FIGURA 58. CASO 1: SUBJECT SOSPECHOSO EN CORREO SALIENTE ....................................... 215
FIGURA 59. CASO 1: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS .................................. 216
FIGURA 60. CASO 1: CORREO ENCOLADO CON ID 6 ............................................................... 216
FIGURA 61. CASO 1: CORREO ENCOLADO CON ID 6 ............................................................... 217
FIGURA 62. CASO 2: PRUEBA DE BODY SOSPECHOSO ........................................................... 217
FIGURA 63. CASO 2: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS .................................. 218
FIGURA 64. CASO 2: CORREO ENCOLADO CON ID 16.............................................................. 218
FIGURA 65. CASO 2: RESULTADO DE EVALUACIÓN................................................................. 219
FIGURA 66. CASO DE PRUEBA 3: LENGUAJE INVÁLIDO............................................................ 220
XVIII
FIGURA 67. ENVIO DE CORREO CON LENGUAJE INVALIDO........................................................ 221
FIGURA 68. CASO DE PRUEBA 3: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS ................ 221
FIGURA 69. CASO DE PRUEBA 3: CORREO ENCOLADO CON ID 17 ........................................... 222
FIGURA 70. CASO DE PRUEBA 3: RESULTADO DE EVALUACIÓN............................................... 222
FIGURA 71. CASO DE PRUEBA 3: CORREO DE RESPUESTA ..................................................... 223
FIGURA 72. CASO DE PRUEBA 4: DOMINIO REMITENTE INVALIDO............................................. 223
FIGURA 73. CASO DE PRUEBA 4: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS ................ 224
FIGURA 74. CASO DE PRUEBA 4: CORREO ENCOLADO CON ID 25 ........................................... 224
FIGURA 75. CASO DE PRUEBA 4: RESULTADOS DE EVALUACIÓN ............................................. 225
FIGURA 76. CASO DE PRUEBA 5: ARCHIVOS ADJUNTOS SOSPECHOSO EN CORREO SALIENTE ... 225
FIGURA 77. CASO DE PRUEBA 5: INFORMACIÓN REGISTRADA EN LA BASE DE DATOS ................ 226
FIGURA 78. CASO DE PRUEBA 5: CORREO ENCOLADO CON ID 81 ........................................... 226
FIGURA 79. CASO DE PRUEBA 5: RESULTADO DE EVALUACION............................................... 227
FIGURA 80. CASO DE PRUEBA 5: CORREO CON INFORMACIÓN DE ARCHIVOS PELIGROSOS ....... 227
XIX
ÍNDICE DE TABLAS
TABLA 1. SISTEMAS OPERATIVOS............................................................................................... 19
TABLA 2. SERVICIOS UTILIZADOS EN EL ANTISPAM. .................................................................... 19
TABLA 3. CONFIGURACIÓN DE REGLAS....................................................................................... 44
TABLA 4. CONFIGURACIÓN DE ACCIONES. .................................................................................. 45
TABLA 5. GESTION DE USUARIOS. .............................................................................................. 46
TABLA 6. REPORTE DE CORREOS ANALIZADOS. .......................................................................... 47
TABLA 7. REPORTE DE REGLAS EVALUADAS. .............................................................................. 48
TABLA 8. AS_EMPRESA......................................................................................................... 55
TABLA 9. AS_ROL ................................................................................................................... 55
TABLA 10. AS_USUARIO ........................................................................................................ 56
TABLA 11. AS_USUARIO_ROL............................................................................................... 56
TABLA 12. DT_ACCION .......................................................................................................... 57
TABLA 13. DT_COMPONENTE_OPERADOR_REGLA ......................................................... 57
TABLA 14. DT_COMPONENTE_OPERADOR_REGLA ......................................................... 57
TABLA 15. DT_COMPONENTE_OPERANDO_CONSTANTE ............................................... 58
TABLA 16. DT_COMPONENTE_OPERANDO_REGLA ......................................................... 58
TABLA 17. DT_COMPONENTE_OPERANDO_VARIABLE .................................................... 58
TABLA 18. DT_COMPONENTE_REGLA ................................................................................ 59
TABLA 19. DT_CORREO......................................................................................................... 59
TABLA 20. DT_DATO_EJECUCION_PROCESO ................................................................... 60
TABLA 21. DT_EJECUCION_ACCION ................................................................................... 60
TABLA 22. DT_EJECUCION_PROCESO ............................................................................... 61
TABLA 23. DT_ELEMENTO_CONJUNTO .............................................................................. 61
TABLA 24. DT_EVALUACION_REGLA................................................................................... 62
XX
TABLA 25. DT_OPERADOR.................................................................................................... 62
TABLA 26. DT_PARAMETRO_ACCION ................................................................................. 63
TABLA 27. DT_PARAMETRO_TIPO_ACCION ....................................................................... 63
TABLA 28. DT_PROCESO...................................................................................................... 64
TABLA 29. DT_REGLA ............................................................................................................ 64
TABLA 30. DT_REGLA_ACCION ............................................................................................ 65
TABLA 31. DT_REGLA_PROCESO ........................................................................................ 66
TABLA 32. DT_SISTEMA......................................................................................................... 66
TABLA 33. DT_SUBSISTEMA ................................................................................................. 67
TABLA 34. DT_SUBTIPO_DATO............................................................................................. 67
TABLA 35. DT_TIPO_ACCION................................................................................................ 68
TABLA 36. DT_TIPO_ACCION_INCONSISTENTE................................................................. 68
TABLA 37. DT_TIPO_DATO.................................................................................................... 69
TABLA 38. DT_TIPO_OPERADOR ......................................................................................... 69
TABLA 39. DT_VARIABLE....................................................................................................... 69
TABLA 40. DT_VARIABLE_PROCESO................................................................................... 70
FIN TABLA 41. COVENCIONES DE NOMBRADO.............................................................................. 95
TABLA 42. PROCESOS Y COMPONENTES DEL SISTEMA BIZSHIELD............................................... 106
TABLA 43. CASO DE USO: CONFIGURACIÓN DE REGLAS ............................................................. 180
CAPÍTULO 1
PLANIFICACIÓN DEL PROYECTO
1.1 Visión
Proporcionar una solución antispam de
calidad, flexible, que se adapte
rápidamente a las cambiantes casuísticas
y tácticas de detección de spam.
2
1.2 Misión
Destacarse en el mercado, diferenciándose de las demás soluciones
antispam, aplicando de sistemas expertos en la lucha contra el correo spam.
1.3 Análisis FODA
Fortalezas
Experiencia en el desarrollo de sistemas.
Oportunidades
En costo podemos competir con respecto a los otros productos
antispam del mercado, ya que la mayoría de estos poseen un elevado
precio.
Debilidades
Conocimientos básicos de redes.
Amenazas
Otras empresas proveedoras de soluciones antispam que ya están
posicionadas en el mercado y que tienen productos funcionalmente
maduros.
3
1.4 Factibilidad
1.4.1 De Producirlo
Este proyecto se encuentra factible de realizar en razón de las herramientas
de desarrollo que se utilizan y el personal de desarrollo capacitado para
llevar a cabo esta labor.
1.4.2 De Comercializarlo
Hay grandes posibilidades de a nivel empresarial el poder vender este
sistema para la protección de ataques al servidor de correo y de todas sus
cuentas.
1.5 Ámbito del proyecto.
El ámbito en el que se va a desarrollar nuestro proyecto es empresarial ya
que se va a integrar con el correo entrante y saliente de la empresa. En
general nos referiremos al (Spam) como un tipo de correo basura el cual
llena o satura el servidor de correo.
4
1.6 Ventajas O Beneficios
1.6.1 Ventajas Del Proyecto
La programación como es realizada en JAVA, que es un lenguaje OO
(orientado a objetos). Tiene la particularidad de ser muy portable por lo cual
se puede instalar en cualquier sistema operativo.
1.6.2 Ventajas Para la empresa
Realizando una inversión inicial, la empresa se verá beneficiada, con ahorro
de tiempo en resolver problemas causados por este tipo de correo ya que
por lo general hacen que se invierta más dinero en resolver estos problemas.
Se ahorra en tiempo invertido por el personal en resolver esta afectación,
pudiendo dedicarse al negocio o labor que realmente se desea realizar de
una manera mas rápida y eficaz. Por lo tanto el Ahorro de dinero en la
empresa está bien fundamentado.
1.7 Definición de un Spam.
Se llama spam, correo basura o sms basura a los mensajes no solicitados,
habitualmente de tipo publicitario, enviados en grandes cantidades (incluso
5
masivas) que perjudican de alguna o varias maneras al receptor. La acción
de enviar dichos mensajes se denomina spamming.
Aunque se puede hacer por distintas vías, la más utilizada entre el público en
general, es la basada en el correo electrónico. Otras tecnologías de internet,
que han sido objeto de correo basura incluyen grupos de noticias, usenet,
motores de búsqueda, wikis, foros, blogs, también a través, de popups y todo
tipo de imágenes y textos en la web. El correo basura, también puede tener
como objetivo los teléfonos móviles (a través de mensajes de texto) y los
sistemas de mensajería instantánea como por ejemplo Outlook, Lotus Notes,
etc.
El correo basura mediante el servicio de correo electrónico nació el 5 de
marzo de 1994. Este día una firma de abogados, Canter and Siegel, publica
en Usenet un mensaje de anuncio de su firma legal; el día después de la
publicación, facturó cerca de 10.000 dólares por casos de sus amigos y
lectores de la red. Desde ese entonces, el marketing mediante correo
electrónico, ha crecido a niveles impensados desde su creación.
6
Aunque existen otras versiones de su origen que lo datan hace 30 años: El 3
de mayo de 1978, 393 empleados de Arpanet, el predecesor de Internet
gestionado por el gobierno estadounidense, recibían con sorpresa un correo
de la compañía de ordenadores DEC invitándoles al lanzamiento de un
nuevo producto.
El correo basura por medio del fax (spam-fax), es otra de las categorías de
esta técnica de marketing directo, y consiste en enviar faxes masivos y no
solicitados a través de sistemas electrónicos automatizados hacia miles de
personas o empresas cuya información ha sido cargada en bases de datos
segmentadas según diferentes variables.
En Estados Unidos se promulgó la ley CAN-SPAM, que prácticamente no ha
sido poco o nada efectiva.
1.8 Antecedentes y definición del problema
El correo electrónico no deseado o spam, supone uno de los mayores frenos
para la expansión de Internet como medio de comunicación.
7
El correo electrónico supuso un extraordinario impulso para el uso de la Red,
convirtiendo la misma en una poderosa herramienta de comunicación capaz
de unir personas en cualquier parte del mundo con una gran facilidad y
efectividad. Al ir generalizándose su uso, éste fue invadiendo distintas áreas,
tanto las personales como las profesionales, de tal forma que ésta
herramienta se convirtió en parte esencial de la vida de multitud de personas y
en una herramienta de gran utilidad en la actividad empresarial. Pero
entonces llegó el llamado spam.
La determinación de, ¿Qué puede considerarse spam?, ha sido muy
controvertida y se presentan distintos matices desde varias posiciones, pero
podemos considerar el spam, de forma consensuada, como el envío de
correos electrónicos a destinatarios que no han autorizado previamente la
recepción de los mismos.
La evolución del spam desde sus orígenes, ha sido espectacular. Según
datos de la compañía Brightmail, en 2001 el spam representaba el 10% del
total de correos enviados, actualmente esta cifra se eleva al 65%. El spam
crea problemas de distinta índole: atenta contra la vida privada, confunde a
los consumidores, perjudica a menores y crea gastos derivados de la pérdida
8
de productividad. Pero, ¿tanto daño hace el spam? Pues sí, tan grande
como difícilmente cuantificable. Los problemas para las empresas y
proveedores son incontables, muchas veces, el costo adicional causado por el
spam es transferido a la cuenta a ser pagada por los usuarios.
No se pueden calcular las horas que los usuarios pierden manejando spam,
ni el espacio de la Red que ocupan los millones de bits cargados de basura
no solicitada. Eso, sin contar los medios empleados en desarrollar
herramientas automáticas para acabar con la plaga: las compañías que se
esmeran en filtrar el spam consiguen unos usuarios satisfechos, lo que
probablemente se traduzca en un aumento del número de clientes.
¿Por qué existe el spam? Por una cuestión económica. Aún cuando molesten
al 99.9% de la gente que lo recibe, y sólo el 0.1% haga caso de sus avisos
(sean o no comerciales), es tan barato enviar spam, que el resultado hace
que a los spammers les valga la pena.
Para el proveedor de servicio de correo el SPAM presenta problemas de
múltiple índole. Una es que sus suscriptores alegan que el proveedor ha
"vendido" su lista de correos para ser utilizada por quienes envían los
9
mensajes, siendo esta acusación, en la mayoría de los casos, falsa.
Otro problema es la carga que ocasiona en el procesamiento de mensajes
que no han sido solicitados. La implementación de filtros en el sistema de
correo es ya una herramienta ampliamente difundida. Por lo general, los
sistemas de correo electrónico le permiten al usuario activar filtros para
bloquear un remitente, o un asunto en el mensaje, y hasta el contenido que
incluya el mensaje. Esto se puede hacer tanto en el servidor de correo
directamente como en el sistema que recibe el mensaje en el PC como el
Outlook. Sin embargo, el mensaje ya ha llegado al servidor de correo, y
genera una carga alta en los sistemas que lo procesan.
Lo anterior con respecto al mensaje entrante. Otro problema serio es cuando
el servidor de correo del ISP ha sido utilizado para enviar el SPAM. Algunos
sistemas proceden a bloquear automáticamente un proveedor que envié
correo en masas, con el perjuicio directo para todos los usuarios del servidor,
que sin razón alguna, ven que sus mensajes o no llegan o son devueltos.
La mayoría de los mensajes spam publicitan bienes y servicios que son de
dudosa procedencia y calidad o que contienen ofertas falsas, engañosas o
fraudulentas tales como esquemas ilegales de piramidación, planes de
10
mercadotecnia multi-nivel, publicidad falsa, incluyendo material pornográfico
ofensivo y juegos de apuestas. Más aún, el spam es comúnmente utilizado
como un canal para la diseminación de virus, spyware, así como para
cometer conductas penales ilícitas a través de técnicas Phishing, las cuales
son modalidades de fraude al consumidor que se incrementan
constantemente y que ocasionan pérdidas millonarias a instituciones
financieras y consumidores alrededor del mundo. El spam no es un problema
que se origina únicamente en las computadoras personales; el spam se ha
extendido a teléfonos móviles, servicios de mensajero instantáneo, weblogs y
redes inalámbricas.
En definitiva, el spam constituye una seria amenaza para el desarrollo de
Internet como medio de comunicación para la cual todavía no se ha
encontrado remedio.
Sus nefastos efectos se acrecientan año tras año suponiendo miles millones
de dólares de pérdidas para las empresas así como una violación de la
privacidad individual. La puerta está abierta para las nuevas ideas e
iniciativas que permitan doblegar a este terrible enemigo del sistema.
11
1.9 Solución Propuesta
El hecho que BizShield sea una solución integrada de Hardware y Software
(Appliance) que no cobra licenciamiento por usuario lo hace una herramienta
muy viable para la Empresa ya que tiene un muy corto periodo de Retorno de
Inversión (ROI), aparte el hecho de que viene pre-configurado, es puesto a
punto en poco tiempo y puede ser mantenido con el mínimo esfuerzo.
Una gran ventaja es que el correo no deseado tiene, generalmente, una serie
de características que lo hacen relativamente fácil de identificar.
Prácticamente, en todos ellos se insta a la compra de algún producto
utilizando unas palabras muy similares. De esa manera, BizShield puede
elaborar un determinado perfil del correo recibido para poder catalogarlo
como spam y eliminarlo antes de que sea descargado en el cliente de correo
electrónico o en los buzones de los usuarios.
La mayor parte del spam que recibimos consiste en:
Cadenas de mensajes.
Otros esquemas de "hágase rico fácilmente" o "gane plata
Avisos de servicios y/o sitios pornográficos.
Avisos de servicios de envío masivo de e-mails publicitarios (spam).
12
Avisos de software y bases de datos para hacer spam.
Ofertas de hosting (muchos de ellos toleran y/o hacen del spam su
negocio).
Avisos de acciones de empresas nuevas "que van a subir hasta el
cielo".
Productos milagrosos y remedios de muy dudoso efecto y origen.
Software ilegal, películas y/o música pirateada.
Se pueden establecer diversos filtros y protecciones para frenar estos
correos, desde aquellos que simplemente bloquean correos que contengan
determinadas palabras, hasta los que permiten introducir una lista de
direcciones aceptadas y sólo permiten la entrada de correos provenientes de
las mismas.
Las características de BizShield son:
1.9.1 Gestión centralizada
Al ser una solución Antispam a nivel de servidor, se elimina la necesidad de
instalar y actualizar la aplicación en cada estación de trabajo.
13
1.9.2 Fácil de Usar
La instalación del Sistema AntiSpam BizShield es rápida y fácil, ya que no es
necesario instalar ningún software ni modificar los sistemas de correo
electrónico existentes. Una vez instalado, el administrador del sistema utiliza
una interfaz web intuitiva para el control y el mantenimiento.
Los análisis y filtros, con estadísticas del spam importantes, tales como el
volumen de spam, el volumen por categoría, la precisión y la eficacia, ofrecen
mucha ayuda en la gestión de amenazas, permitiendo el perfeccionamiento
de la sensibilidad de las reglas y las opciones de eliminación.
1.9.3 Inversión Baja
Las Compañías Grandes y Pequeñas demandan igualmente una solución de
Inversión mínima que no la tienen hasta el día de hoy y peor aún cuando
ellos crecen. BizShield habilita el escalamiento sin preocuparse del
incremento de los licenciamientos de usuarios, ya que no tiene un costo de
licenciamiento por usuario, por lo que es la Solución de Inversión más baja
de Antispam.
14
1.9.4 Alta flexibilidad
El filtrado flexible, con opciones para borrar, poner en cuarentena, etiquetar y
otras, mejoran la flexibilidad. El administrador tiene la opción de crear sus
propias listas blancas y negras para aceptar o rechazar un mensaje como
spam. Esto mejora la precisión y la eficacia del filtrado de spam a lo largo del
tiempo, y proporciona un filtrado más personalizado para cada usuario.
1.10 Diagrama
El diagrama siguiente especifica la estructura computacional donde
funcionará Bizshield.
Internet Firewall BizShield Mail Server Mail Client
FIGURA 1. Diagrama de estructura donde funcionará el Bizshield.
Este diagrama puede determinar la estructura general en el cual se
desempeña la aplicación, el servidor de correo estará siempre protegido por
el servidor antispam, ya que todo correo que salga y que entre pasará por el
15
antispam. Aquí vemos en orden, primero el firewall, segundo el antispam,
tercero el servidor de correo y cuarto los clientes de correo.
1.11 Objetivos del proyecto.
1.11.1 Objetivos Generales
Evitar la saturación del Servidor de Correo y de las cuentas de los
usuarios debido a la recepción de correo electrónico no deseado.
Proteger la integridad y la productividad de los usuarios de correo para
que no reciban correo ofensivo, y que no pierdan tiempo eliminándolo.
1.11.2 Objetivos específicos.
Proteger valiosas herramientas de negocios de la empresa como el
correo electrónico de ataques como el spam, a través de un sistema
potente, efectivo y fácil de configurar.
Brindar herramientas que permitan el monitoreo y la eliminación de
correo electrónico no deseado.
16
1.12 Alcance del proyecto.
La estrategia de antispam es agregar una capa antes del Servidor de Correo
que intercepte todo el correo entrante y saliente, lo analice en base a reglas
configuradas por el administrador del sistema y acepte o rechace el paso del
mensaje al Servidor de Correo Destino siempre que cumpla o no con las
reglas. Para tal efecto, la capa que utiliza el BizShield Antispam System,
provee de un Servicio Antispam llamado BizShield Service cuya función es
interceptar el tráfico de mensajes desde y hacia el Servidor de Correo. Por
otra parte una Aplicación Web llamada BizShield Web Administrator que
permite configurar el Servicio Antispam definiendo reglas con sus
respectivas acciones a ejecutar. Esta Aplicación Web también permite
obtener las estadísticas del funcionamiento del Sistema con respecto al
tráfico, el spam detectado, reglas aplicadas y las acciones tomadas.
El alcance de este proyecto, es entregar una solución completa, con el mejor
soporte out-of-the-box para las empresas. Para esto, el producto a ofrecer
consiste en un Sistema Appliance, una solución que incluye un Servidor
Fedora Core 9 con el BizShield Antispam System pre-instalado y pre-
configurado, el BizShield Antispam Appliance.
17
1.13 Recursos necesarios para el proyecto.
Los recursos necesarios para la implementación del proyecto se detallan a
continuación:
1.13.1 Recurso Humano
El equipo del proyecto estará conformado por las tres personas:
George Humberto Alcívar Villamar
Freddy Johann Pinargote Savinién
David Leonel Toala Mosquera
1.13.2 Recurso Hardware
Se detalla el hardware necesario para la implementación del proyecto
SERVIDOR 1
Destinado para Servidor de aplicaciones, base de datos y correo
electrónico. Deberá tener las siguientes características:
o Memoria RAM 2 GB
o Disco duro 120 GB
o Core 2 Duo – 2 Ghz
18
SERVIDOR 2
Destinado para Servicio Antispam. Deberá tener las siguientes
características:
o Memoria RAM 1 GB
o Disco duro 80 GB
o Core 2 Duo – 2 Ghz
MAQUINA DE DESARROLLO
Se utilizaran 3 máquinas para el desarrollo. Estas deberán tener las
siguientes características:
o Memoria RAM 1 GB
o Disco duro 80 GB
o Core 2 Duo – 2 Ghz
SWITCH
Se utilizará para armar la red de datos para el desarrollo
19
1.13.3 Recurso Software DEL PROYECTO
Sistemas Operativos
Nombre SistemaOperativo
Descripción deUso
Cantidad
Fedora Core 9
Utilizado para el
appliance
antispam
1
Windows Server
2003
Utilizado para los
servidores de
correo electrónico
y DNS.
2
Windows XP
Utilizado para los
clientes de correo
electrónico
5
Tabla 1. Sistemas Operativos.
Servicios
Nombre delServicio
Descripción deUso
Cantidad
JES Servidor SMTP 2
Apache Tomcat
6.0
Contenedor de
Servlets y JSPs1
MySQL 5.0Servidor de Bases
de Datos1
Tabla 2. Servicios utilizados en el Antispam.
20
Herramientas de Desarrollo
Las herramientas ofimáticas y de diseño que se utilizarán durante el
desarrollo del proyecto son las siguientes:
Eclipse
EMS MySQL
MySQL GUI Tools
ANTLRWorks
Herramientas Ofimáticas y de Diseño
Las herramientas ofimáticas y de diseño que se utilizarán durante el
desarrollo del proyecto son las siguientes:
Microsoft Word
Microsoft Project
Microsoft Visio
DBDesigner
21
1.14 Cronograma
FIGURA 2. Cronograma del proyecto Antispam.
22
1.15 Metodología
Para el análisis y diseño general del sistema se combinarán las metodologías
estructurada y orientada a objetos. Para el diseño detallado se utilizaran
patrones de diseño y diagramas UML. Para el desarrollo se emplearan
técnicas y métodos de programación orientada a objetos.
Para la pruebas se utilizarán técnicas de pruebas unitarias y funcionales
integrales. Las pruebas unitarias son realizadas con la herramienta JUnit y
las funcionales e integrales son realizadas siguiendo la metodología plan de
pruebas.
CAPÍTULO 2
ANÁLISIS DEL SISTEMA
2.1 Levantamiento de Información
Para el levantamiento de información, se
utilizó como instrumento la encuesta.
25
2.1.1 Encuesta
Direccionamiento: Instrumento dirigido a profesionales del área de
tecnología encargado del manejo de servidores.
Objetivo: Obtener la información sobre los siguientes puntos.
El porcentaje de empresas que utilizan un AntiSpam
Cuantos desearían comprar un AntiSpam si no lo tuvieran.
Instructivo: Lea detenidamente cada una de las preguntas y proceda a
contestar en la opción que usted considere valida, utilizando el cuadro de la
derecha.
Encuesta Nº ________
Información General
1.- ¿De qué tipo es su empresa?
1.- Comercial
2.- Industrial
3.- Servicios
4.- Otro
26
2.- Ubicación
1.- Norte
2.- Centro
3.- Sur
Información Específica
3.- ¿Tiene un departamento de sistemas?
SI NO
4.- ¿Su empresa tiene un servidor de correos?
SI NO
5.- ¿La empresa cuenta con un AntiSpam?
SI NO
6.- ¿Se prioriza el envío y recepción de correos por medio del servidor interno
de la organización?
SI NO
27
7. ¿Cuántas personas tienen cuentas de correo de su organización?
1.- de 5 a 10
2.- de 10 a 20
3.- de 20 a 50
5.- de 50 a 100
8.- ¿Con que frecuencia se llena su cuenta de correo basura o Spams?
1.- Todos los dias
2.- Una vez a la semana
3.- Cada 15 dias
4.- Cada mes
9.-¿Le gustaría invertir en un programa corporativo AntiSpam?
SI NO
10.- Que sugerencias daría usted al momento de escoger un programa
AntiSpam.
28
2.2 Análisis de Requerimientos
Un sistema de detección de spam se lo puede catalogar como un sistema
experto, al cual se le configura heurísticas para la detección de correo spam
(base de conocimiento).
El contenido del correo (base de hechos) será utilizado para evaluar las
heurísticas configuradas (motor de inferencia) y detectar los correos spam y
no spam. Este sistema experto deberá ejecutar acciones de control para
mitigar el riesgo de correo spam.
Variables
Existen diferentes variables que deben evaluarse para determinar si un
correo electrónico se lo puede considerar como spam o no. Las variables
más comunes a considerar para la detección de spam son las siguientes:
Correos que provienen de unas IP que pertenecen a servidores que han
sido identificado como generadores de SPAM.
Correos que provienen de un dominio que han sido identificado como
generadores de SPAM.
29
Correos que contienen en mensajes con publicidad, pornografía,
información no relacionada con las actividades de la empresa etc.
Correos que contiene archivos adjuntos ejecutables, considerados como
posibles portadores de virus.
Correos donde los datos MIME cumplen con los patrones típicos de los
correos spam. Los patrones típicos de correo catalogado como SPAM
son los siguientes.
MIME FROM vacio
MIME FROM mal formado.
MIME FROM con caracteres numéricos.
SMTP TO y MIME TO son diferentes.
Juego de caracteres inválidos
Idioma del correo.
Extensa lista de destinatarios.
Correo contiene solo imágenes.
Dominio de remitente invalido.
Las variables más comunes a considerar para identificar a un correo como
no spam son los siguientes:
Correo proveniente de IP de servidores SMTP que se sabe que no son
generadores de SPAM.
30
Correo con un dominio remitente de confianza.
Correo con una dirección remitente de confianza.
Las variables anteriormente expuestas se pueden conjugar de diferentes
formas, para detectar correo spam y no spam. Cada una de estas variables
está en función del correo.
Estas variables se conjugan para formar reglas (funciones booleana), las
cuales definirán condiciones que identificaran correos que son spam o no
spam.
Estas reglas pueden ser de 2 tipos:
1. Habilitantes: Las reglas habilitantes al cumplirse, sobre un correo,
permitirán el paso del correo a su destino.
2. Excluyentes: Las reglas excluyentes al cumplirse, sobre un correo,
consideraran el correo como spam, no permitiendo el paso del correo a
su destino.
31
Acciones de Control
Una vez identificado un correo electrónico como SPAM o no, se deben
ejecutar ciertas acciones de control sobre el correo, estas acciones pueden
ser las siguientes:
Eliminación de archivos adjuntos: Esta acción eliminará del correo
los archivos adjuntos cuyo nombre cumpla con un patrón de caracteres.
Poner en cuarentena archivos adjuntos: Esta acción eliminará del
correo los archivos adjuntos cuyo nombre cumpla con un patrón de
caracteres, pero almacena el archivo en una carpeta de cuarentena.
Re-direccionar a una cuenta de correo: Esta acción enviará el correo
a una dirección de correo configurada para ello, generalmente el
administrador.
Responder a remitente: Esta acción enviara una respuesta al correo
electrónico del remitente.
Mensajes en Body y Subject: Esta acción permite agregar una
etiqueta en el SUBJECT o BODY del correo.
32
El sistema Anti-spam BizShield está compuesto por dos componentes:
1. BIZSHIELD SERVICE
2. BIZSHIELD WEB ADMINISTRATOR
2.2.1 Servicio Antispam (BIZSHIELD SERVICE)
BizShield Service es un sistema experto, que analizara todos los correos
electrónicos de la empresa, filtrando y permitiendo la recepción de los
mismos sólo si cumplen con las reglas de seguridad configuradas. El servicio
antispam, evaluará las reglas y ejecutará las acciones previamente
configuradas para cada uno de los correos que lleguen o salgan de la red
informática de la empresa.
2.2.2 Aplicación Web Administrador Antispam (BIZSHIELD WEB
ADMINISTRATOR)
Es una aplicación web que se utilizará para realizar las tareas administrativas
del sistema Antispam. Está compuesta por dos módulos: Módulo de
Configuración y Módulo de Reportes.
33
Módulo de Configuración: En este módulo el administrador del
servicio antispam podrá configurar las reglas que serán evaluadas y
acciones que serán ejecutadas por BizShield Service.
Módulo de Reportes: Es un módulo compuesto por reportes que
contendrán la información de los correos que han sido procesados por el
servicio antispam. En el reporte en general se mostrarán los correos
electrónicos procesados en un rango de fechas, las reglas evaluadas y
acciones ejecutadas sobre los correos. Mediante los reportes se podrá dar
seguimiento del uso del correo electrónico en toda la organización.
2.3 ROLES DEL SISTEMA
Los tipos de usuarios de la Aplicación Web Administrador Antispam son:
2.3.1 Administrador
Puede utilizar el Módulo de Configuración, el cual permite establecer,
modificar y eliminar las reglas y acciones de control ejecutadas por el servicio
antispam y gestionar a los usuarios normales. También puede utilizar el
Módulo de Reportes.
34
2.3.2 Usuario
Sólo puede utilizar el Módulo de Reportes.
2.4 ANÁLISIS DE DATOS
2.4.1 EMPRESA
Representa la empresa que adquirió el producto Bizshield Antispam
Appliance. En el ámbito de Bizshield, una empresa básicamente consta de
usuarios y sistemas.
2.4.2 ROL
Representa los roles utilizados en Bizshield Web Administrator. Actualmente
son ADMINISTRADOR Y USUARIO. Dependiendo del rol, un usuario puede
acceder o no a los módulos de la aplicación web.
2.4.3 USUARIO
Representa los usuarios de Bizshield Web Administrator. Sólo los usuarios
registrados pueden utilizar la aplicación web. Esta tabla es utilizada por el
contenedor J2EE para el proceso de autenticación.
35
2.4.4 USUARIO_ROL
Identifica que rol tiene asignado un usuario dentro de Bizshield Web
Administrator. Esta tabla es utilizada por el contenedor J2EE para el
proceso de autenticación.
2.4.5 ACCIÓN
Representa la acción de un tipo determinado, que se ejecutará siempre y
cuando la regla a la cual esté asociada sea evaluada positivamente. Por
ejemplo, se puede definir una acción llamada NOTIFICAR ELIMINACIÓN DE
ARCHIVOS ADJUNTOS, cuyo tipo de acción sea AÑADIR MENSAJE EN
BODY.
2.4.6 COMPONENTE_OPERADOR_REGLA
Representa un operador dentro de una regla de Bizshield. Por ejemplo, si se
define una regla como IP_ORIGEN = “172.18.9.225”, se almacenará el
operador =.
36
2.4.7 COMPONENTE_OPERANDO_CONJUNTO
Representa un operando de tipo conjunto dentro de una regla de Bizshield.
Por ejemplo, si se define una regla como
EXTENCIONES_ARCHIVOS_ADJUNTOS INTERSECT
{"exe","com","bat","dll"} se almacenará el operando
EXTENCIONES_ARCHIVOS_ADJUNTOS.
2.4.8 COMPONENTE_OPERANDO_CONSTANTE
Representa un operando de tipo constante dentro de una regla de Bizshield.
Por ejemplo, si se define una regla como IP_ORIGEN = “172.18.9.225”, se
almacenará el operando constante “172.18.9.225”.
2.4.9 COMPONENTE_OPERANDO_REGLA
Representa un operando dentro de una regla de Bizshield. Un operando
puede ser variable, constante y conjunto. A nivel de objetos de la capa de
persistencia, esta entidad es superclase de las entidades
componente_operando_variable, componente_operando_conjunto y
componente_operando_constante.
37
2.4.10 COMPONENTE_OPERANDO_VARIABLE
Representa un operando de tipo variable dentro de una regla de Bizshield.
Por ejemplo, si se define una regla como IP_ORIGEN = “172.18.9.225”, se
almacenará el operando variable “IP_ORIGEN”.
2.4.11 COMPONENTE_REGLA
Representa un componente dentro de una regla de Bizshield. Un
componente puede ser un operador o un operando. A nivel de objetos de la
capa de persistencia, esta entidad es superclase de las entidades
componente_operando_regla y componente_operador_regla.
2.4.12 CORREO
Representa un correo analizado por Bizshield Service.
2.4.13 DATO_EJECUCION_PROCESO
Contiene los datos de todas las variables que se calcularon durante la
ejecución de un proceso de Bizshield.
38
2.4.14 EJECUCION_ACCION
Representa la ejecución de una acción. Las acciones se ejecutan como
resultado de la evaluación positiva de una regla de Bizshield.
2.4.15 EJECUCION_PROCESO
Representa la ejecución de un proceso dentro de Bizshield. Al ejecutarse un
proceso se evalúan todas las reglas asociadas a ese proceso.
2.4.16 ELEMENTO_CONJUNTO
Representa un elemento de un operando de tipo conjunto. Por ejemplo, si se
define una regla como EXTENCIONES_ARCHIVOS_ADJUNTOS
INTERSECT {"exe","com","bat","dll"} se almacenarán los elementos "exe",
"com", "bat" y "dll".
2.4.17 EVALUACION_REGLA
Representa la evaluación de una regla de Bizshield, esta evaluación puede
ser positiva o negativa. Cuando se evalúa positivamente una regla se
ejecutan todas sus acciones asociadas.
39
2.4.18 OPERADOR
Representa un operador de Bizshield Rules Language.
2.4.19 PARAMETRO_ACCION
Representa los parámetros de una acción antispam determinada y son
necesarios para configurarla. Por ejemplo, para la acción NOTIFICAR
ELIMINACION DE ARCHIVOS ADJUNTOS, cuyo tipo de acción es AÑADIR
MENSAJE EN BODY y parámetro de tipo de acción es MENSAJE HTML, se
puede definir el parámetro <strong>Copyright © 2009 Realmsoft. All rights
reserved.</strong>
2.4.20 PARAMETRO_TIPO_ACCION
Representa los parámetros de un tipo de acción antispam determinada y que
son necesarios para configurarla. Por ejemplo el tipo de acción AÑADIR
MENSAJE EN BODY tiene los parámetros MENSAJE TXT y MENSAJE
HTML.
40
2.4.21 PROCESO
Representa un proceso de Bizshield. Actualmente Bizshield tiene definidos
dos procesos: CORREO ENTRANTE Y CORREO SALIENTE.
2.4.22 REGLA
Representa una regla de Bizshield. Una regla Antispam es una función
booleana que utiliza como variables los diferentes elementos que componen
un correo electrónico (subject, body, etc.) y como resultado de su evaluación
retorna un valor de verdadero o falso el cual determinará si un correo es spam
o no. Una regla a su vez está formada de componentes, los cuales pueden
ser operandos u operadores. Por ejemplo, se puede definir una regla como
CORREO_REMITENTE = "[email protected]", la cual se evaluará como
verdadera si la dirección de correo del remitente es [email protected].
Una regla se define mediante una sentencia escrita en Bizshield Rules
Language.
2.4.23 REGLA_ACCION
Identifica las acciones asociadas a las reglas de Bizshield. Una regla puede
tener asociadas muchas acciones, siempre que éstas no sean inconsistentes
entre sí.
41
2.4.24 REGLA_PROCESO
Identifica las reglas asociadas a los procesos de Bizshield.
2.4.25 SISTEMA
Representa un Sistema de la empresa que utiliza Bizshield. Un sistema
puede tener varios subsistemas.
2.4.26 SUBSISTEMA
Representa un subsistema de la empresa.
2.4.27 SUBTIPO_DATO
Representa un tipo de dato específico de Bizshield Rules Language.
2.4.28 TIPO_ACCION
Representa los tipos de acciones que se pueden ejecutar al evaluar
positivamente una regla de Bizshield, estos tipos de acciones están definidas
por el Sistema. Cada tipo de acción tiene su conjunto de parámetros bien
definidos que lo permiten configurar. Por ejemplo, para definir acciones que
42
tengan que adicionar información al body del correo se puede crear una
acción cuyo tipo sea AÑADIR MENSAJE EN BODY.
2.4.29 TIPO_ACCION_INCONSISTENTE
Identifica las acciones que no pueden configurarse juntas dentro de una regla
de Bizshield, ya que son excluyentes.
2.4.30 TIPO_DATO
Representa un tipo de dato general de Bizshield Rules Language.
2.4.31 TIPO_OPERADOR
Representa un tipo de operador de Bizshield Rules Language.
2.4.32 VARIABLE
Representa una variable de Bizshield Rules Language.
43
2.4.33 VARIABLE_PROCESO
Identifica cuáles son las variables asociadas a un proceso de Bizshield.
2.5 CASOS DE USO
El siguiente caso de uso describe de forma general la funcionalidad que
ofrecerá el sistema.
FIGURA 3. Diagrama general de casos de uso del Sistema
44
Nombre: Configuración de Reglas
Alias: Mantenimiento de Reglas
Actores: Administrador del sistema
Función:
Permitir el mantenimiento de las reglas de
Bizshield
Dentro del Módulo de Configuración de
Bizshield Web Administrator, el usuario
Administrador del sistema tiene la opción
de realizar las siguientes operaciones de
mantenimiento sobre las reglas: “Crear”,
“Editar”, “Consultar” y “Eliminar”.
Cada una de estas operaciones se realiza
a través de un formulario, en el cual se
ejecutan las validaciones necesarias según
el tipo de operación.
Para crear o editar una regla, por ejemplo,
se valida que el contenido de la regla
ingresado sea una expresión Bizshield
Rules Language válida.
Referencias:
Tabla 3. Configuración de reglas.
45
Nombre: Configuración de Acción
Alias: Mantenimiento de Acciones
Actores: Administrador del sistema
Función:
Permitir el mantenimiento de las acciones de
Bizshield
Dentro del Módulo de Configuración de
Bizshield Web Administrator, el usuario
Administrador del sistema tiene la opción de
realizar las siguientes operaciones de
mantenimiento sobre las acciones: “Crear”,
“Editar”, “Consultar” y “Eliminar”.
Cada una de estas operaciones se realiza a
través de un formulario, en el cual se
ejecutan las validaciones necesarias según
el tipo de operación.
Para crear o editar una acción, por ejemplo,
se valida que los parámetros de la acción
ingresados sean correctos, dependiendo del
tipo de dato del parámetro.
Referencias:
Tabla 4. Configuración de acciones.
46
Nombre: Gestión de Usuarios
Alias: Mantenimiento de Usuarios
Actores: Administrador del sistema
Función:
Permitir el mantenimiento de los usuarios de
Bizshield
Dentro del Módulo de Configuración de
Bizshield Web Administrator, el usuario
Administrador del sistema tiene la opción de
realizar las siguientes operaciones de
mantenimiento sobre los usuarios: “Crear”,
“Editar”, “Consultar” y “Eliminar”.
Cada una de estas operaciones se realiza a
través de un formulario, en el cual se
ejecutan las validaciones necesarias según
el tipo de operación.
Para crear o editar un usuario, por ejemplo,
se valida que los datos del usuario
ingresados sean correctos, dependiendo del
tipo de dato del campo.
Referencias:
Tabla 5. Gestion de Usuarios.
47
Nombre: Reporte de Correos Analizados
Alias: Visualización de Correos Analizados
Actores:
Administrador del sistema, Usuario del
Sistema
Función:
Presentar el Reporte de Correos Analizados
en Bizshield
Dentro del Módulo de Reportes de Bizshield
Web Administrator, los usuarios del sistema
con roles de Administrador y Usuario tienen
la opción de visualizar el Reporte de Correos
Analizados en Bizshield. El sistema valida
que se ingresen valores correctos en todos
los parámetros de búsqueda, permite
visualizar el contenido del correo analizado en
formato MIME y exportar los resultados a
diferentes formatos.
Referencias:
Tabla 6. Reporte de correos analizados.
48
Nombre: Reporte de Reglas Evaluadas
Alias: Visualización de Reglas Evaluadas
Actores:
Administrador del sistema, Usuario del
Sistema
Función:
Presentar el Reporte de Reglas Evaluadas en
Bizshield
Dentro del Módulo de Reportes de Bizshield
Web Administrator, los usuarios del sistema
con roles de Administrador y Usuario tienen
la opción de visualizar el Reporte de Reglas
Evaluadas en Bizshield. El sistema valida que
se ingresen valores correctos en todos los
parámetros de búsqueda y permite exportar
los resultados a diferentes formatos.
Referencias:
Tabla 7. Reporte de reglas evaluadas.
2.6 DIAGRAMA DE FLUJO ANTISPAM
EL siguiente diagrama de flujo describe de forma general el funcionamiento
del servicio antispam.
49
FIGURA 4. Diagrama de flujo Antispam.
ACEPTAREMAIL
REGLAS HABILITANTES
REGLA ACCIONES 2
REGLA ACCIONES 3
REGLA ACCIONES 4
REGLA Y ACCIONES 1
REGLAS EXCLUYENTES
REGLA ACCIONES 2
REGLA ACCIONES 3
REGLA ACCIONES 4
REGLA Y ACCIONES 1
RECHAZAREMAIL
REGLAS CONTROLADORAS
REGLA ACCIONES 2
REGLA ACCIONES 3
REGLA ACCIONES 4
REGLA Y ACCIONES 1
50
El correo electrónico es evaluado por el servicio anti-spam, el resultado final
de la evaluación es:
Aceptar el correo electrónico si el correo no es spam.
Rechazar el correo electrónico si el correo es spam.
Consideraciones Principales
Para obtener este resultado se ejecuta las siguientes consideraciones:
1. Se ejecutan las reglas habilitantes, las reglas habilitantes son reglas que
tienen configuradas condiciones y heurísticas que identifican correo
electrónico catalogado como no spam, si un correo cumple con alguna de las
reglas habilitantes entonces el correo deberá ser aceptado.
2. Se ejecutan las reglas excluyentes, las reglas excluyentes son reglas que
tiene configuradas condiciones y heurísticas que identifican correo electrónico
catalogado como spam, si un correo cumple con alguna de las reglas
excluyentes y no cumple con reglas habilitantes entonces el correo será
rechazado.
51
3.Se ejecutan las reglas controladoras, las reglas controladoras son reglas
que tiene configurado condiciones y heurísticas que identifican correo
electrónico al cual hay que ejecutar acciones de control, el listado de reglas
de control disponibles se listan en el punto 2.2.1.2 (Acciones de Control), si
un correo cumple con alguna de las reglas controladoras entonces se
ejecutaran acciones de control sobre el correo electrónico. En caso de que
un correo hay cumplido solamente reglas controladoras entonces el correo
deberá ser aceptado.
4.En caso de que un correo no haya cumplido con ningunas de las reglas
entonces el correo deberá ser aceptado.
52
CAPÍTULO 3
3. DISEÑO DEL SISTEMA
El Diseño de sistemas es el arte de definir la
arquitectura de hardware y software,
componentes, módulos y datos de un sistema
de cómputo para satisfacer ciertos
requerimientos. Es la etapa posterior al análisis
de sistemas.
53
3.1 ARQUITECTURA COMPUTACIONAL
Aquí se muestra de una forma clara el funcionamiento del Antispam.
El correo llega desde el internet el cual llega en primer lugar al
Antispam.
Este coreo se evalua en base a las reglas configuradas tanto por
defecto como por el administrador del antispam.
Se determina si es spam o no.
Si es spam se aplican acciones a este correo, que pueden ser, eliminar,
quitar archivos adjuntos, enviar mensaje al destinatario, etc etc.
Este correo es enviado al servidor de correos el cual envía el correo a
sus diferentes cuentas.
Y de forma inversa se repite el proceso desde los clientes.
54
FIGURA 5. Esquema general de funcionamiento del Appliance antispam.
3.2 DISEÑO DE DATOS
3.3 DIAGRAMA ENTIDAD – RELACIÓN
En el diagrama entidad relación se encuentra la estructura de la base de
datos.
Ver anexo 1.
55
Nombre de Campo Tipo Descripción
id_empresa integer Identificador de empresa
razon_social varchar(255) Razón social de la empresa
Representante varchar(255)
Representante legal de la
empresa
Teléfono varchar(64) Teléfono de empresa
Email varchar(64) Email de empresa
licencia_producto varchar(255) Número de licencia de Bizshield
Administrador varchar(64)
Nombre de usuario
administrador
Password varchar(64)
Password de usuario
administrador
Logo blob Logo de empresa
Estado varchar(3) Estado de registro
Tabla 8. AS_EMPRESA
Nombre deCampo Tipo Descripción
id_rol integer identificador de rol
nombre_rol varchar(64) Nombre del rol
Descripción varchar(255) Descripción del rol
Estado varchar(3) Estado del registro
Tabla 9. AS_ROL
56
Nombre deCampo Tipo Descripción
id_usuario integer Identificador de usuario
id_empresa integer
Identificador de empresa a la que
pertenece el usuario
Username varchar(64) Nombre de usuario en el sistema
Password varchar(64) Contraseña de usuario en el sistema
Nombres varchar(128) Nombres del usuario
Apellidos varchar(128) Apellidos del usuario
Dirección varchar(255) Dirección del usuario
Teléfono varchar(64) Teléfono del usuario
Email varchar(64) Email del usuario
Estado varchar(3) Estado del registro
Tabla 10. AS_USUARIO
Nombre deCampo Tipo Descripción
id_usuario integer Identificador del usuario
id_rol integer
Identificador del rol asignado al
usuario
nombre_rol varchar(64)
Nombre del rol. Este campo es
necesario para la autenticación
vía contenedor J2EE
username varchar(64)
Nombre de usuario en el sistema.
Este campo es necesario para la
autenticación vía contenedor
J2EE
Tabla 11. AS_USUARIO_ROL
57
Nombre de Campo Tipo Descripción
ID_ACCION integer Identificador de acción
ID_TIPO_ACCION integer
Identificador de tipo de
acción
NOMBRE varchar(64) Nombre de la acción
FECHA_INICIO_VIGENCIA datetime
Fecha de inicio de
vigencia de la acción
FECHA_FIN_VIGENCIA datetime
Fecha de fin de vigencia
de la acción
Tabla 12. DT_ACCION
Nombre de Campo Tipo Descripción
ID_COMPONENTE_REGLA integer
Identificador de
componente de regla
ID_OPERADOR integer Identificador de operador
Tabla 13. DT_COMPONENTE_OPERADOR_REGLA
Nombre de Campo Tipo Descripción
ID_COMPONENTE_REGLA integer
Identificador de componente
de regla
ID_SUBTIPO_DATO integer
Identificador de subtipo de
dato
VALOR_CONJUNTO varchar(4096)
Valor del operando
conjunto. Contiene todos
los elementos del conjunto
Tabla 14. DT_COMPONENTE_OPERADOR_REGLA
58
Nombre de Campo Tipo Descripción
ID_COMPONENTE_REGLA integer
Identificador de
componente de regla
VALOR_CONSTANTE varchar(256)
Valor del operando
constante. Contiene el
literal constante
Tabla 15. DT_COMPONENTE_OPERANDO_CONSTANTE
Nombre de Campo Tipo Descripción
ID_COMPONENTE_REGLA integer
Identificador de
componente de regla
Tabla 16. DT_COMPONENTE_OPERANDO_REGLA
Nombre de Campo Tipo Descripción
ID_COMPONENTE_REGLA integer
Identificador de componente
de regla
ID_VARIABLE integer Identificador de variable
Tabla 17. DT_COMPONENTE_OPERANDO_VARIABLE
59
Nombre de Campo Tipo Descripción
ID_COMPONENTE_REGLA integer
Identificador de componente de
regla
ID_REGLA integer Identificador de regla
ORDEN integer
Orden del componente dentro de la
regla
Tabla 18. DT_COMPONENTE_REGLA
Nombre de Campo Tipo Descripción
ID_CORREO integer Identificador de correo
DE varchar(512) Remitente del correo
PARA varchar(512) Destinatario del correo
CONTENIDO longblob
Contenido original del
correo en formato MIME
IP_ORIGEN varchar(64)
Dirección IP del
remitente
ES_CORREO_ENTRANTE enum('S','N')
Indica si el correo es
entrante
SE_EJECUTARON_REGLAS enum('S','N')
Indica si se evaluaron
reglas para este correo
ES_SPAM enum('S','N','D')
Indica si el correo se
evaluó como spam
CONTENIDO_FINAL longblob
Contenido final del
correo en formato MIME
Tabla 19. DT_CORREO
60
Nombre de Campo Tipo Descripción
ID_DATO_EJECUCION_PROCESO integer
Identificador del dato de
ejecución del proceso
ID_EJECUCION_PROCESO integer
Identificador de la
ejecución del proceso
ID_VARIABLE integer
Identificador de la
variable calculada
VALOR longtext
Valor de la variable
calculada
Tabla 20. DT_DATO_EJECUCION_PROCESO
Nombre de Campo Tipo Descripción
ID_EJECUCION_ACCION integer
Identificador de la ejecución
de acción
ID_EVALUACION_REGLA integer
Identificador de la evaluación
de la regla
ID_ACCION integer
Identificador de la acción
ejecutada
Tabla 21. DT_EJECUCION_ACCION
61
Nombre de Campo Tipo Descripción
ID_EJECUCION_PROCESO integer
Identificador de la
ejecución del proceso
ID_PROCESO integer Identificador del proceso
FECHA_EJECUCION_PROCESO datetime
Fecha de ejecución del
proceso
ID_CORREO integer
Identificador del correo
analizado
Tabla 22. DT_EJECUCION_PROCESO
Nombre de Campo Tipo Descripción
ID_ELEMENTO_CONJUNTOinteger
Identificador del elemento
del conjunto
ID_COMPONENTE_REGLAinteger
Identificador de
componente de regla
VALOR_CONSTANTEvarchar(256)
Valor del elemento del
conjunto
Tabla 23. DT_ELEMENTO_CONJUNTO
62
Nombre de Campo Tipo Descripción
ID_EVALUACION_REGLA integer
Identificador de evaluación
de la regla
ID_REGLA integer
Identificador de la regla
evaluada
FECHA_EVALUACION_REGLA datetime
Fecha de evaluación de la
regla
RESULTADO enum('S','N')
Resultado de evaluación
de la regla
ID_EJECUCION_PROCESO integer
Identificador de la
ejecución del proceso
Tabla 24. DT_EVALUACION_REGLA
Nombre de Campo Tipo Descripción
ID_OPERADOR Integer Identificador del operador
ID_TIPO_OPERADOR Integer Identificador del tipo de operador
NOMBRE_OPERADOR varchar(64) Nombre del operador
OPERADOR varchar(32) Símbolo del operador
NUMERO_OPERANDOS
int(11)
unsigned Número de operandos del operador
OPERADOR_DROOLS varchar(32) Operador equivalente en drools
Tabla 25. DT_OPERADOR
63
Nombre de Campo Tipo Descripción
ID_PARAMETRO_ACCIONinteger
Identificador de parámetro
de acción
ID_ACCION integer Identificador de acción
ID_PARAMETRO_TIPO_ACCIONinteger
Identificador de parámetro
de tipo de acción
VALORvarchar(255)
Valor del parámetro de la
acción
Tabla 26. DT_PARAMETRO_ACCION
Nombre de Campo Tipo Descripción
ID_PARAMETRO_TIPO_ACCIONinteger
Identificador de parámetro
de tipo de acción
ID_TIPO_ACCIONinteger
Identificador de tipo de
acción
NOMBRE_PARAMETRO varchar(255) Nombre de parámetro
ID_SUBTIPO_DATOinteger
Identificador de subtipo de
dato del parámetro
NOMBRE_ATRIBUTO
varchar(256)
Es el nombre del atributo de
la clase Java que contendrá
el valor de este parámetro
Tabla 27. DT_PARAMETRO_TIPO_ACCION
64
Nombre de Campo Tipo Descripción
ID_PROCESO Integer Identificador de proceso
ID_SUBSISTEMA Integer Identificador de subsistema
NOMBRE varchar(64) Nombre del proceso
NOMBRE_CLASE_PROCESO varchar(255)
Nombre de clase java que
representa el proceso
CAMBIARON_REGLAS enum('S','N')
Indica si las reglas
asociadas al proceso han
cambiado y por lo tanto es
necesario generar
nuevamente el archivo de
drools
Tabla 28. DT_PROCESO
Nombre de Campo Tipo Descripción
ID_REGLA integer Identificador de regla
NOMBRE_REGLA varchar(64) Nombre de regla
DESCRIPCION_REGLA varchar(512) Descripción de regla
ID_USUARIO_CREO integer
Identificador de usuario creador de
la regla
FECHA_CREO datetime Fecha de creación de la regla
CONTENIDO_REGLA varchar(4096)
Contenido de la regla, contiene la
sentencia escrita en BRL
FECHA_INICIO_VIGENCIA datetime
Fecha de inicio de vigencia de la
regla
FECHA_FIN_VIGENCIA datetime Fecha de fin de vigencia de la regla
Tabla 29. DT_REGLA
65
Nombre de Campo Tipo Descripción
ID_REGLA_ACCION integer
Identificador de la
relación regla - acción
ID_REGLA integer
Identificador de la
regla
ID_ACCION integer
Identificador de la
acción
FECHA_INICIO_VIGENCIA datetime
Fecha de inicio de
vigencia de la relación
regla -acción
ID_USUARIO_INICIO_VIGENCIA integer
Identificador del
usuario que estableció
la fecha de inicio de
vigencia
FECHA_FIN_VIGENCIA datetime
Fecha de fin de
vigencia de la relación
regla - acción
ID_USUARIO_FINALIZO_VIGENCIA integer
Identificador del
usuario que estableció
la fecha de fin de
vigencia
Tabla 30. DT_REGLA_ACCION
66
Nombre de Campo Tipo Descripción
ID_REGLA_PROCESO integer
Identificador de la relación
regla - proceso
ID_REGLA integer Identificador de la regla
ID_PROCESO integer Identificador del proceso
FECHA_INICIO_VIGENCIA datetime
Fecha de inicio de vigencia
de la relación regla - proceso
ID_USUARIO_INICIO_VIGENCIA integer
Identificador del usuario que
estableció la fecha de inicio
de vigencia
FECHA_FIN_VIGENCIA datetime
Fecha de fin de vigencia de la
relación regla - proceso
ID_USUARIO_FINALIZO_VIGENCIA integer
Identificador del usuario que
estableció la fecha de fin de
vigencia
Tabla 31. DT_REGLA_PROCESO
Nombre de Campo Tipo Descripción
ID_SISTEMA integer Identificador de sistema
NOMBRE_SISTEMA varchar(64) Nombre del sistema
ID_EMPRESA integer Identificador de empresa
Tabla 32. DT_SISTEMA
67
Nombre de Campo Tipo Descripción
ID_SUBSISTEMA Integer Identificador de subsistema
ID_SISTEMA Integer Identificador de sistema
NOMBRE_SUBSISTEMA varchar(64) Nombre del subsistema
Tabla 33. DT_SUBSISTEMA
Nombre de Campo Tipo Descripción
ID_SUBTIPO_DATO Integer Identificador de subtipo de dato
NOMBRE_SUBTIPO_DATO varchar(64) Nombre del subtipo de dato
ID_TIPO_DATO Integer Identificador de tipo de dato
CLASE_VALIDADORA varchar(255)
Clase java encargada de
validar que el dato sea correcto
según el subtipo
CLASE_JAVA varchar(255)
Clase java con la que se puede
representar el subtipo de dato
Tabla 34. DT_SUBTIPO_DATO
68
Nombre de Campo Tipo Descripción
ID_TIPO_ACCION Integer
Identificador
de tipo de
acción
NOMBRE varchar(64)Nombre del
tipo de acción
CLASE_EJECUTORA_ACCION varchar(128)
Es la clase
Java
encargada de
ejecutar el tipo
de acción
CLASE_DATOS_PARA_EJECUTAR_ACCION varchar(128)
Es la clase
Java que
contendrá los
datos
necesarios
para la
ejecución de la
acción
Tabla 35. DT_TIPO_ACCION
Nombre de Campo Tipo Descripción
id_tipo_accion_inconsistente integer
Identificador de tipo de
acción inconsistente
id_tipo_accion integer
Identificador de tipo de
acción
id_tipo_accion_incorrecta integer
Identificador de tipo acción
incorrecta
Tabla 36. DT_TIPO_ACCION_INCONSISTENTE
69
Nombre de Campo Tipo Descripción
ID_TIPO_DATO integer Identificador de tipo de dato
NOMBRE_TIPO_DATO varchar(64) Nombre del tipo de dato
Tabla 37. DT_TIPO_DATO
Nombre de Campo Tipo Descripción
ID_TIPO_OPERADOR integer Identificador de tipo de operador
NOMBRE varchar(64) Nombre del tipo de operador
Tabla 38. DT_TIPO_OPERADOR
Nombre de Campo Tipo Descripción
ID_VARIABLE integer Identificador de variable
NOMBRE_VARIABLE varchar(64) Nombre de variable
ID_SUBTIPO_DATO integer Identificador de subtipo de dato
ES_CONJUNTO enum('S','N')
Indica si la variable es un
conjunto
Tabla 39. DT_VARIABLE
70
Nombre de Campo Tipo Descripción
ID_VARIABLE_PROCESO Integer
Identificador de la
relación variable -
proceso
ID_PROCESO Integer
Identificador de
proceso
ID_VARIABLE Integer
Identificador de
variable
PROGRAMA_CALCULADOR_VARIABLE varchar(255)
Clase java
encargada de
calcular el valor de
la variable de
correo
NOMBRE_ATRIBUTO varchar(255)
Atributo de clase
java que
representa la
variable de correo
Tabla 40. DT_VARIABLE_PROCESO
3.4 ARQUITECTURA GENERAL DE SOFTWARE
El sistema anti-spam está diseñado con metodologías Orientadas a Objetos y
tomando como arquitectura base el patrón MVC (Modelo – Vista –
Controlador).
71
El patrón MVC divide el sistema informático en 3 macro componentes:
Modelo (Datos), Vista (Interfaz de Usuario y/o procesos necesarios para
generar la Interfaz de Usuario, generadores de respuesta) y Controlador
(Lógica de Control) los cuales, tiene claramente definidas sus
responsabilidades, marco de acción, interfaces de programa, mecanismos de
comunicación y componentes que los conforman.
Las ventajas que trae la utilización de este patrón de diseño:
Alta modularidad
Alta Cohesión
Bajo Acoplamiento
Aumenta las oportunidades de Reutilización de Componentes
Disminuye la Complejidad del Mantenimiento de las Aplicaciones
FIGURA 6. MVC
72
3.4.1 CONSIDERACIONES PARA EL MODELO
El modelo está formado por el conjunto de componentes que representan las
transacciones y lógica de negocio.
Los componentes del modelo implementados respetan las siguientes
directrices.
Sólo los componentes del modelo conocen los detalles de la tecnología
utilizada para acceder a los datos. (JDBC, Toplink, JDO, Hibernate,
Sistema de Archivos, etc.).
Los componentes de modelo son los responsables de administrar la
conexión de la fuente de información (base de datos, sistema de
archivos, LDAP, servidor de Correo Electrónico, etc.), debe encargarse
de obtener los recursos de conexión y liberarlos apropiadamente.
Los componentes del modelo son responsables de asegurar la
atomicidad e integridad de las transacciones. Por ejemplo :
En caso de que el repositorio de datos sea una base de datos, los
componentes del modelo, una vez que confirman que todas las operaciones
de la transacción han sido exitosas, deben concluir con un commit, en caso
73
de detectar algún error en las operaciones de la transacción deberá ejecutar
un rollback.
Los errores que ocurran en la transacción, ya sea por errores de
fallos tecnológicos o de lógica del negocio, tienen que ser propagados
por el modelo para que el usuario que está realizando la transacción se
entere del problema.
El conjunto de operaciones que se realizan en una transacción deben
ser realizadas con una sola conexión hacia la base de datos.
Los componentes del modelo conoce todo los detalles de la lógica,
restricciones y flujo de las transacciones del negocio.
3.4.2 CONSIDERACIONES PARA EL CONTROLADOR
El controlador es el encargado de direccionar las acciones del usuario o de
procesos a las transacciones correspondientes.
Los componentes controladores implementados respetan las siguientes
directrices.
El controlador debe formatear los datos del usuario o procesos
ejecutores al formato requerido por las transacciones.
74
El controlador es el encargado de manejar los errores de las
aplicaciones re direccionando el control al componente de la vista que
informe del error al usuario.
En el controlador no debe conocer de la tecnología utilizada por el
modelo para acceder a los datos.
Cuando el controlador quiera ejecutar una transacción deberá
recolectar todos los parámetros necesarios y luego ejecutar la
transacción con un solo llamado al modelo.
3.4.3 CONSIDERACIONES PARA LA VISTA
La vista está conformada por las Interfaces Graficas de Usuario, procesos
generadores de Interfaz Grafica y/o generadores de respuesta.
Los componentes de la Vista implementados respetan las siguientes
directrices.
Los componentes de la Vista no debe tener embebida lógica de
negocio ni validaciones transaccionales.
Los componentes de la Vista deben separar, mientras sea posible, el
contenido de la información del formato en el que se presenta por
medio del uso de plantillas y/o cascadas de estilo.
75
3.5 ARQUITECTURA ESPECÍFICA DE SOFTWARE DEL SUB-SISTEMA
BizShield Web Administrator
La aplicación Web está desarrollada utilizando la siguiente arquitectura
FIGURA 7. Arquitectura sub-sistema de administración antispam
3.5.1 CAPA CLIENTE WEB
Esta es la capa que permitirá a los usuarios acceder a la aplicación sin
necesidad de tenerla instalada en sus computadores.
Los requisitos necesarios para que los clientes puedan acceder a la aplicación
son:
Tener instalado Navegador Web (Browser), la aplicación funcionará con
cualquier navegador, Internet Explorer, Mozilla, FireFox etc.
76
Tener permisos de red necesarios para poder acceder al servidor de
aplicaciones.
3.5.2 CAPA WEB
Los componentes que intervienen en esta capa están implementados con los
siguientes patrones de diseño.
Front Controller
Este es el componente que se encarga de atender a las peticiones de
los Clientes Web. Sin importar las particularidades de la petición este
componente realizara lo siguiente:
Recuperar los datos que envía el cliente web desde el Browser, para
luego formatearlos según el formato requerido por las transacciones.
Luego se deberán ejecutar el llamado a la transacción correspondiente.
Una vez ejecutada la transacción se deberá llamar al componente que
dibuja la respuesta al usuario. En caso de que ocurriera algún error se
deberá llamar al componente que mostrara el mensaje de error.
77
Front Controller es implementación web del componente Controlador
del Patrón MVC.
View Builder
Este es el componente que se encarga de generar las páginas web que
van a ser visualizada en la capa Cliente WEB. Las páginas generadas
respetan las siguientes directrices
o Las páginas generadas separan el contenido de su formato por
medio del uso de cascada de estilos. Los atributos de diseño y
formato de las paginas (tipo de fuente, tamaño de letra, colores
etc.) son manejados con archivos de estilo (CSS).
o Las páginas generadas no tienen embebida ninguna lógica de
negocio. Las únicas validaciones que se permitirán en las páginas
web son validaciones simples para las formas web, donde se
validen el formato de los campos (por ejemplo que un campo solo
permita ingresarse números, o que la fecha este en formato
dd/mm/yyyy) y restricciones sencillas de los datos (que un campo
sea obligatorio que el usuario lo llene).
View Builder es la implementación web del componente Vista del
Patrón MVC.
78
3.6 ARQUITECTURA ESPECÍFICA DE SOFWTARE DEL SUB-SISTEMA
BizShield Service
El servicio anti-spam es un proceso servidor compatible exclusivamente con
el protocolo SMTP, es un servicio capaz de atender a varios clientes SMTP,
los cuales enviaran correos electrónicos, estos correos serán aceptados en
una primera instancia por el servidor y almacenados en la base de datos.
Los correos serán recuperados desde la base datos y evaluados para
determinar si son correo SPAM o no. En caso de que no sean correo SPAM
el correo será aceptado y podrá entrar al servidor de correo de la
organización (en caso de ser correo entrante) y salir hacia los servidores de
correos externos (en caso de ser correo saliente). Todo este trabajo es
descrito con más detalles en los siguientes diagramas de secuencia.
FIGURA 8. Diagrama de secuencia de arranque y parada de BizshieldService.
79
3.6.1 Arranque y Parada del Servicio
El siguiente diagrama de secuencia muestra los mensajes e interacciones
entre las clases involucradas en el proceso de arranque y parada del
BizShield Service. A continuación se da una descripción general de las
responsabilidades de las clases que intervienen en el diagrama anterior.
Operador: Es el actor, normalmente el administrador de BizShield Service o
el Sistema Operativo, encargados de ejecutar el arranque o la parada de
BizShield Service.
BizshieldService: Es la clase encargada de levantar cada uno de los hilos
involucrados en el procesamiento antispam. Para iniciar el levantamiento de
hilos se debe ejecutar el método main. En caso de que soliciten, esta clase
también podrá detener cada uno de los hilos de procesamiento antispam.
Para detener los hilos se deberá ejecutar el método shutdown.
ServidorTCPMultihilo: Es la clase responsable de la gestión del pool de
hilos que atenderán las peticiones de los clientes. Es una clase muy general
e independiente del protocolo de aplicación implementado sobre TCP (smtp,
80
http, etc), son los hilos del pool los que implementan el protocolo de
aplicación y hacen el trabajo a bajo nivel, esta clase solo los controla. A todos
los hilos del pool se les proporciona el mismo objeto ServerSocket para que
realicen las tareas de procesamiento sobre TCP. Todos los hilos arrancaran
cuando se ejecute el método run y se intentaran detener con el método
shutdown.
ProcesadorCorreos: Es la clase tipo hilo, responsable de procesar los
correos que han sido encolados previamente, este clase estará censando
continuamente la existencia de correos nuevos, para posteriormente
determinar si el correo es o no es spam. En caso de que se determine que el
correo electrónico no es SPAM entonces el correo será aceptado y reenviado
al servidor de correos interno (para el caso de correo entrante) o servidor de
correos externos (para el caso de correo saliente). Este hilo es iniciado
ejecutando el método run y detenido utilizando el método shutdown.
Monitor Reglas: Es la clase tipo hilo, responsable de detectar los cambios
que son realizados en las reglas y heurísticas de detección de spam. En caso
de detectar ha ocurrido una modificación esta clase actualizara los elementos
necesarios de las base de conocimiento. Este hilo es iniciado ejecutando el
método run y detenido utilizando el método shutdown.
81
Monitor Actualizaciones: Es la clase encargada de censar las
actualizaciones sobre el repositorio de reglas públicas, en caso detectar una
nueva actualización actualizara las reglas del sistema. Este hilo es iniciado
ejecutando el método run y detenido utilizando el método shutdown.
3.6.2 Atención a peticiones SMTP
En esta fase los correos electrónicos son almacenados en la cola de
procesamiento de correos. El siguiente diagrama de secuencia muestra los
mensajes e interacciones entre las clases involucradas en el proceso de
atención a peticiones SMTP y almacenamiento en la cola de correos.
FIGURA 9. Diagrama de secuencia de atención a peticiones SMTP yalmacenamiento en la cola de correos.
82
A continuación se da una descripción general de las responsabilidades de las
clases que intervienen en el diagrama anterior.
ProcesadorSMTP: Es la clase tipo hilo, responsable detectar y atender
conexiones SMTP, para lo cual espera conexiones en el ServerSocket
otorgado para trabaje, una vez detectado el requerimiento de un nuevo cliente
SMTP, ejecuta la lógica de procesamiento del protocolo SMTP, aceptando el
mensaje y su contenido para luego utilizar los componentes de
almacenamiento para persistir el mensaje en la base de datos.
CorreoBO: Es la clase que contiene todas las reglas de negocio y
transacciones relacionadas con el procesamiento de correos electrónicos.
Tiene a disposición los métodos de guardarCorreo para encolar el correo
electrónico para el procesamiento SPAM y procesarCorreo para determinar si
el correo es o no es SPAM.
Correo: Objeto que contiene todos los datos del Correo.
CorreDAO: Es la clase encargada de encapsular las operaciones de registro,
actualización, eliminación y recuperación de los correos electrónicos.
83
3.6.3 Procesamiento de Correos
En esta fase se recuperan los correos de la cola y se comienzan a procesar
para determinar si son correo SPAM o no. El siguiente diagrama de
secuencia muestra los mensajes e interacciones entre las clases
involucradas para cumplir este objetivo.
FIGURA 10. Diagrama para recuperan los correos de la cola y se comienzana procesar para determinar si son correo SPAM o no.
ProcesadorCorreos: Esta clase está continuamente censando la cola de
correos, cada correo nuevo en la cola es procesado para determinar si es
correo SPAM o no, realmente esta clase no realiza este procesamiento, más
bien lo delega a otras clases y componentes.
84
ReglaBO: Es la clase que contiene todas las reglas de negocio y
transacciones relacionadas con las reglas del sistema Bizshield. Tiene a
disposición el método evaluarReglas el cual evalúa un correo específico con
las reglas configuradas en el sistema, y devuelve el listado de reglas con las
que el correo cumplió. Para poder evaluar las reglas necesita primero calcular
las variables de los correos, para lo cual delegara esta responsabilidad a
Clases que implementen la interfaz CalculadorVariable. La responsabilidad de
evaluar las reglas es delegada a la clase MotorReglas.
CalculadorVariable: Es la interfaz que permitirá implementar los diversos
calculadores de variables. Todas las clases que implementen esta interfaz
tendrán la responsabilidad de calcular los valores reales de las variables
configuradas en el sistema.
MotorReglas: Esta clase se encargara de evaluar las reglas configuradas en
el sistema y determinar cuáles son las reglas que han sido cumplidas.
AccionesBO: Es la clase que contiene todas las reglas de negocio y
transacciones relacionadas con las acciones del sistema Bizshield. Tiene a
85
disposición el método ejecutarAcciones el cual ejecutara todas las acciones
de control que están configuradas en BIzshieldServices. La ejecución de las
acciones específicas son delegadas a las Clases que implementan la interfaz
EjecutorAccion
EjecutorAccion: Es la interfaz que permite implementar los diversos
ejecutores de acciones. Todas las clases que implementen esta interfaz
tendrán la responsabilidad de ejecutar las acciones configuradas en el
sistema.
EnviadorSMTP: Es la clase que tiene la responsabilidad de comunicarse con
los servidores de correos SMTP, el hará la entrega de correo saliente y/o
entrante al servidor de correo correspondiente.
3.7 ARQUITECTURA ESPECÍFICA DE SOFWTARE DEL SUB-SISTEMA
BIZSHIELD LOGIC AND PERSISTENCES
En este subsistema se concentran todas las transacciones, lógica de
negocio, estructura de datos, componente de acceso a datos, las cuales
86
podrán ser utilizadas por los subsistemas BizShield Services y BizShield Web
Administrator.
Este subsistema es la implementación del componente Modelo del patrón
MVC. Para que los componentes implementados en este subsistema sean
modulares, reusables, desacoplados, cohesivo y no sufran dependencia
entre la lógica de negocio y la tecnología utilizada para acceder a los datos,
esta capa se la divide en componentes implementados con el patrón
Business Object y Data Access Object. Además utiliza una clase persistente
la cual encapsulara la información de una estructura de datos en particular,
normalmente tablas. Este subsistema se encargara de propagara las
excepciones de forma adecuada.
3.7.1 Business ObjectLos componentes implementados con este patrón de diseño contienen la
lógica de las transacciones. Sin importar las particularidades de la transacción
estos componentes respetan lo siguiente:
Los componentes de este tipo son responsables de ejecutar el
procesamiento necesario sobre las entidades persistentes para cumplir
con el objetivo de la transacción.
87
Los componentes de este tipo no tienen dependencia con la tecnología
que se utiliza para acceder a los datos, es decir ellos no manejan la
tecnología de persistencia de datos.
El manejo de errores de lógica de negocio están implementadas con la
propagación de Excepciones.
Los componentes de este tipo están implementados como clases simples,
para facilitar su reutilización.
3.7.2 Data Access Object
Estos componentes son los encargados de manejar los detalles tecnológicos
del mecanismo utilizado para acceder a los datos. Es decir los DAO son los
que conocen como crear, modificar y eliminar los datos en el repositorio de
información (Base de Datos, Sistemas de Archivos, etc.). Por lo tanto los
componentes DAO son los únicos que dependen de la tecnología de acceso
a datos.
Sin importar las particularidades del DAO estos componentes respetan lo
siguiente:
Todos los DAO que están siendo utilizados para una misma transacción
deben utilizar una misma conexión a la base de datos.
88
Las operaciones que realizan los DAO no deben tener lógica ni
restricciones de negocio. Los componentes de este tipo están
implementados como clases simples, para facilitar su reutilización.
3.7.3 Clases y objetos persistentes
Las clases persistentes son las clases que están mapeadas a las tablas de la
base de datos mediante el motor de persistencia utilizado por la aplicación.
Los Objetos Persistentes son instancias de las clases persistentes. Un
Objeto persistente contiene información recuperada de la base de datos o
que debe ser guardada en la base de datos cuando se confirmen las
transacciones. Los Objetos Persistentes, como contiene la información,
pueden fluir en las distintas capas y subsistemas del Sistema BizShield.
3.7.4 Excepciones
Las excepciones son los objetos que encapsulan los errores que ocurren en
la aplicación y estos pueden ser de 2 tipos:
Excepciones de Lógica de Negocio: Estas excepciones se dan
cuando al procesar alguna transacción no cumplen las condiciones o
reglas de negocio necesarias para que la transacción culmine.
Excepciones por Fallos Tecnológicos: Estas excepciones ocurren
cuando uno de los componentes del sistema falla por algún error
89
tecnológico (Problemas de Comunicación, Restricciones de Base de
Datos, etc).
El manejo de errores en la aplicación es realizado considerando las
siguientes directrices:
En caso de que el programa no pueda manejar una excepción este
debe ser propagada de tal forma que al usuario se le informe que la
operación que solicito al sistema ha fallado.
El manejo de excepciones debe incluir mecanismos de limpieza, que
se encarguen de cerrar las conexiones a las base de datos, archivos,
sockets, streams y liberen la memoria ya no utilizada.
El manejo de excepciones debe incluir mecanismos que permitan mantener
la integridad de datos, por medio de un correcto uso de rollback.
El manejo de excepciones debe incluir mecanismos que faciliten el
rastreo de errores, con el fin de facilitar el descubrimiento, seguimiento
y solución de errores
90
CAPÍTULO 4
4. CODIFICACIÓN (DISEÑO A NIVEL
DE COMPONENTES)
4.1 ESTANDARES DE CODIFICACIÓN
A continuación se detallan los
estándares de programación utilizados
en la codificación de los programas.
91
4.2 Consideraciones Generales
Ningún nombre podrá contener tildes, guiones, eñes o cualquier otro tipo de
carácter especial.
Ningún nombre podrá utilizar artículos.
Las extensiones de los archivos serán acorde a la función que
realizan: .jsp, .html, .js, .css, .jpg, .doc, .pdf, etc.
Utilizar descriptores completos en español, para describir exactamente
la variable, campo, clase, etc. Por ejemplo, use nombres como
primernombre, totalliquidacion o sectoreconomico.
Utilizar terminología aplicable al dominio. Si sus usuarios refieren a
sus clientes como importadores, entonces utilice el término importador
para la clase, no cliente.
Los nombres de los descriptores de variables, clases, funciones etc.
Deberán ser los más significativos posibles, en caso de ser necesario
se deberán utilizar nombres largos.
4.3 Convenciones De Nombrado
Las convenciones de nombrado hacen los programas más comprensibles
haciéndolos más fáciles de leer. También pueden dar información acerca de
92
la función del identificador (por ejemplo, si se trata de una constante, un
paquete o una clase), que puede ayudar a entender el código.
4.3.1 Definición de término CamelCase
CamelCase es un estilo de escritura que se aplica a frases o palabras
compuestas. El nombre CamelCase se podría traducir como
Mayúsculas/Minúsculas Camello, aunque no es correcto en todos los
contextos ya que la palabra inglesa Case no tiene traducción literal. El
nombre se debe a que las mayúsculas a lo largo de una palabra en
CamelCase se asemejan a las jorobas de un camello. Existen dos tipos de
CamelCase:
UpperCamelCase, cuando la primera letra de cada una de las
palabras es mayúscula.
Ejemplo: EjemploDeUpperCamelCase.
lowerCamelCase, igual que la anterior con la excepción de que la
primera letra es minúscula.
Ejemplo: ejemploDeLowerCamelCase
93
Inicio Tabla 41. Covenciones de nombrado.
Tipo deidentificador Reglas de nombrado Ejemplos
Paquetes
El prefijo de un nombre de paqueteúnico se escribe siempre en letrasASCII minúsculas y debería ser unode los nombres de dominio de nivelsuperior (actualmente com, edu,gov, mil, net, org ó uno de loscódigos de país de dos letras, comose especifica en el estándar ISO3166). Los siguientes componentesdel nombre del paquete varían deacuerdo a las propias convencionesde nombrado internas de lasorganizaciones. Dichasconvenciones pueden especificarque ciertos componentes de nombrede directorio sean división,departamento, proyecto, máquina onombres de usuario.
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
es.nom.jpereza
Clases
Los nombres de clases deberían sersustantivos, escritos en CamelCasecon la primera letra en mayúscula.Tratar de mantener los nombres declases simples y descriptivas. Usarpalabras completas, evitaracrónimos y abreviaturas (a menosque la abreviatura sea mucho másusada que la forma larga, comoURL o HTML).
class Raster
class ImageSprite
InterfacesLos nombres de interfaz deberíanser escritos como los nombres declases.
interface RasterDelegateinterface Storing
MétodosLos nombres de métodos deberíanser verbos, escritos en CamelCasecon la primera letra en minúscula.
run();runFast();
getBackground();
Variables Todos los nombres de variabledeberían estar escritos en
int i;char c;
94
Tipo deidentificador Reglas de nombrado Ejemplos
CamelCase con la primera letra enminúscula. Los nombres devariables deberían ser cortosaunque significativos. La elección deun nombre de variable debería sermnemotécnica, esto es, pensadapara indicar la intención de su uso aun posible observador ocasional. Sedeberían evitar los nombres devariables de un solo caracterexcepto para variables temporales"desechables". Algunos nombrescomunes para variables temporalesson i, j, k, m y n para númerosenteros; c, d y e para caracteres.En caso de que una variable no seaun atributo de clase se deberáañadír un prefijo a la variable. Elprefijo indicara el alcance de lavariable y el tipo de dato.El prefijo podrá tener 2 caracteresEl primer carácter indica el alcance,el segundo carácter indica el tipo dedato. El alcance puede ser :
Local con letra lParámetro de método ofunción con letra p
Los tipos de datos solo serán paralos tipos de datos primitivos,Wrapper de tipos de datos primitivosy String. Las reglas son lassiguientes:
Para int e Integer la letra iPara long y Long letra lPara Boolean y Booleanletra bPara float y Float letra fPara doublé y Double letra d
Para String la letra s
float width;String streetName;
String ps_parametrosint li_edad
Constantes Los nombres de variables static final int
95
Tipo deidentificador Reglas de nombrado Ejemplos
declaradas como constantes declase deberían estar escritos todo
en mayúsculas separando laspalabras con un caracter de
subrayado (_).
MIN_WIDTH = 4;static final int
MAX_WIDTH = 999;static final String
DEFAULT_PROTOCOL= "http";
Fin Tabla 41. Covenciones de nombrado.
4.3.2 Sentencias
Sentencias simples
Cada línea debería contener una sentencia como mucho. Por ejemplo:
argv++; // Correcto
argc--; // Correcto
argv++; argc--; // ¡EVITAR!
Sentencias compuestas
Las sentencias compuestas son sentencias que contienen una lista de
sentencias encerradas entre llaves "{" y "}". Ver las siguientes secciones para
encontrar ejemplos.
Las sentencias internas deberían estar tabuladas un nivel más que la
sentencia compuesta.
96
La llave de apertura debería estar en la línea siguiente de la línea
donde comienza la sentencia compuesta; la llave de cierre debería estar
en una nueva línea y estar tabulada al nivel del principio de la sentencia
compuesta.
Las llaves se usan en todas las sentencias compuestas, incluidas las
sentencias únicas, cuando forman parte de una estructura de control,
como una sentencia if-else o un bucle for. Esto hace más fácil introducir
nuevas sentencias sin provocar errores accidentales al olvidarse añadir
las llaves.
Sentencias return
Una sentencia return con un valor no debería usar paréntesis a menos que
haga el valor devuelto más obvio de alguna manera. Por ejemplo:
return;
return myDisk.size();
return (size > 0 ? size : defaultSize);
Sentencias if, if-else, if-else-if-else
97
El tipo de sentencias if-else debería tener el siguiente formato:
if (condición)
{
sentencias;
}
if (condición)
{
sentencias;
}
else
{
sentencias;
}
if (condición)
{
sentencias;
}
else if (condición)
{
sentencias;
}
else
{
sentencias;
}
Nota: Las sentencias if siempre llevan llaves {}. Evitar la siguiente forma,
propensa a errores:
98
if (condición) // ¡EVITAR OMITIR LAS LLAVES! {}
sentencia;
Sentencias for
Una sentencia for debería tener el siguiente formato:
for (inicialización; condición; actualización)
{
sentencias;
}
Una sentencia for vacía (aquella en la que todo el trabajo se hace en las
cláusulas de inicialización, condición y actualización) debería tener el
siguiente formato:
for (inicialización; condición; actualización);
Cuando se use el operador coma en la cláusula de inicialización o
actualización, evitar la complejidad de utilizar más de tres variables. Si se
necesita, usar sentencias separadas antes del bucle for (para la cláusula de
inicialización) o al final del bucle (para la cláusula de actualización).
Sentencias while
Una sentencia while debería tener el siguiente formato:
99
while (condición)
{
sentencias;
}
Una sentencia while vacía debería tener el siguiente formato:
while (condición);
Sentencias do-while
Una sentencia do-while debería tener el siguiente formato:
do
{
sentencias;
} while (condición);
Sentencias switch
Una sentencia switch debería tener el siguiente formato:
switch (condición)
{
case ABC:
sentencias;
/* continua con el siguiente */
case DEF:
100
sentencias;
break;
case XYZ:
sentencias;
break;
default:sentencias;
break;
}
Cada vez que un caso continúa con el siguiente (no incluye una sentencia
break), se añade un comentario donde iría la sentencia break. Esto se
muestra en el ejemplo anterior con el comentario /* continua con el siguiente
*/. Todas las sentencias switch deberían incluir un caso por defecto. El break
en el caso por defecto es redundante, pero previene un error de continuar
con el siguiente si más adelante se incluye otro caso.
Sentencias try-catch
Una sentencia try-catch debería tener el siguiente formato:
try{
sentencias;
}
101
catch (ExceptionClass e)
{
sentencias;
}
Una sentencia try-catch puede venir seguida de una sentencia finally, la cual
se ejecuta siempre independientemente de que el bloque try se haya
completado correctamente o no.
try{
sentencias;
}
catch (ExceptionClass e)
{
sentencias;
}
finally{
sentencias;
}
102
4.3.3 Espacios en blanco
Líneas en blanco
Las líneas en blanco mejoran la legibilidad resaltando secciones de código
que están relacionadas lógicamente. En las siguientes circunstancias,
siempre se deberían usar dos líneas en blanco:
Entre secciones de un fichero fuente.
Entre definiciones de clases e interfaces.
En las siguientes circunstancias, siempre se debería usar una línea en
blanco:
Entre métodos.
Entre las variables locales de un método y su primera sentencia.
Antes de un comentario de bloque o de una sola línea.
Entre las secciones lógicas de un método, para mejorar la legibilidad.
Espacios en blanco
Los espacios en blanco deberían usarse en las siguientes circunstancias:
Una palabra clave seguida por un paréntesis debería estar separado por
un espacio. Por ejemplo:
103
while (true)
{
...
}
Nótese que entre el nombre de un método y sus paréntesis no debe haber
espacios en blanco. Esto ayuda a distinguir entre palabras claves y llamadas
a métodos.
En las listas de argumentos, debería haber un espacio después de cada
coma.
Todos los operadores binarios, excepto el operador punto (.) deberían
estar separados de sus operandos por espacios. Los operadores unarios
(incremento ++, decremento --, negativo -) nunca deberían estar
separados de sus operandos. Por ejemplo:
a += c + d;
a = (a + b) / (c * d);
while (d++ = s++)
{
n++;
104
}
print("el resultado es " + foo + "\n");
Las expresiones de una sentencia for deberían estar separadas por
espacios en blanco. Por ejemplo:
for (expr1; expr2; expr3)
Las conversiones de tipo (cast) deberían estar seguidas de un espacio
en blanco. Por ejemplo:
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3))+ 1);
4.4 DETALLES DE LOS PROCESOS Y COMPONENTES DEL SISTEMA
BIZSHIELD
La siguiente tabla da un resumen de los APIs, frameworks y tecnologías de
desarrollo más importantes, utilizadas en el desarrollo de Bizshield
Anntispam.
105
API,Framework otecnología de
DesarrolloDescripción Subsistema donde se
utiliza
Java Net API
Este API es utilizado paraimplementar el manejo desocket y procesamiento a nivelSMTP
Bizshield Service
Java IO API
Este API es utilizado para elmanejo de los Streams deEntrada (In) y Salida (Out) enel manejo de datostransmitidos por los socket yprocesamiento de los paquetesMIME
Bizshield Service
Java Mail
Este API es utilizado en losprocesos calculadores devariables y ejecutores deacciones, ya que este apiayuda a procesar con mayorfacilidad la información de loscorreos MIME.
Bizshield Service
HibernateEste framework es utilizadopara la persistencia de objetosy el acceso a los datos
Bizshield ServiceBizshield WebAdministrator
Drools
Este framework es utilizadopara implementar el dinamismode las reglas del antispam,permite implementar el motorde inferencia que evalúa lasreglas configuradas paradeterminar si el correo es o nospam (Motor del SistemaExperto).
Bizshield Service
Java ThreadPara el manejo de los hilos deprocesamiento implementadospara el sistema.
Bizshield Service
Servlets y JSPsPara la generación delcontenido dinámico de laaplicación web
Bizshield WebAdministrator
JavaServerFaces
JavaServer Faces (JSF) es unframework de desarrollobasado en el patrón MVC(Modelo – Vista – Controlador),
Bizshield WebAdministrator
106
que normaliza y estandariza eldesarrollo de aplicaciones webbajo un modelo deprogramación de componentesUI del lado del servidor. Latecnología JSF está porencima de las tecnologías JSPy Servlet y proporciona un nivelde abstracción más alto queéstas, liberando aldesarrollador del enfoquetradicional delrequest/response.
DisplayTag
Es una librería de tags jspopensource diseñada paratrabajar bajo una arquitecturaMVC, que permite eldespliegue de información deforma tabular.
Bizshield WebAdministrator
ANTLR
ANTLR es una herramientaque proporciona un marco detrabajo para la construcción dereconocedores, intérpretes,compiladores y traductores delenguajes a partir degramáticas enriquecidas conacciones, utilizada para lavalidación de las reglasantispam configuradas por elusuario.
Bizshield WebAdministrator
Tabla 42. Procesos y componentes del sistema Bizshield
4.5 DETALLES de CODIFICACIÓN DEL SUBSISTEMA BIZSHIELDSERVICEA continuación se dan detalles de la lógica de programación y tecnologías
utilizadas en los componentes que intervienen en los procesos más
importantes del subsistema Bizshield Service.
107
4.5.1 Arranque del Subsistema Bizshield Service.
A continuación se detalla las acciones y operaciones realizadas, a nivel de
programación, en el proceso de arranque del subsistema Bizshield Service.
1.El arranque del sistema ocurre cuando se ejecuta la clase BizshieldService.
La primera acción que es realizada al ejecutar esta clase es la actualización
de los archivos de reglas drools (.drl) con las reglas que se encuentran
creadas en la base de datos. Lo cual es realizado con las siguientes líneas
de código.
TraductorBO l_traductorBO=new TraductorBO();
l_traductorBO.actualizarReglas();
2.Se detecta cual es la ruta donde se encuentran los archivos de parámetros
configuración (logs y ejecución) del anti-spam. Lo cual es realizado con las
siguientes líneas de código.
String directory = getConfigurationDirectory( args );
3.Se procede a cargar los parámetros de configuración de logs colocados en
el archivo con nombre log.conf. Lo cual es realizado con la siguiente línea de
código.
108
initializeLogging( ls_directory );
4.Se procede a cargar los parámetros de configuración de ejecución
colocados en el archivo con nombre bizshield.conf. Lo cual es realizado con
la siguiente línea de código.
ConfigurationManager configurationManager =
ConfigurationManager.initialize( ls_directory );
5.Se procede a recuperar el puerto por donde entraran los correos
electrónicos. Lo cual es realizado con la siguiente línea de código.
int li_port = configurationManager.getSmtpPort();
6.Se procede a recuperar el parámetro de número de hilos que atenderán los
correos electrónicos. Lo cual es realizado con la siguiente línea de código.
intli_executeThreads=l_configurationManager.getExecuteThreadCount();
7.Se procede a arrancar el pool de hilos que procesaran los correos
electrónicos. Lo cual es realizado con las siguientes líneas de código.
smtpListener = new ServidorTCPMultihilo( li_port,
ProcesadorSMTP.class,
109
li_executeThreads );
new Thread( smtpListener, "SMTP" ).start();
8.Se procede a arrancar el hilo que procesara los correos encolados,
ejecutara las reglas configuradas determinando si el correo encolado es
spam o no y ejecutara las acciones de control. En caso de que el correo no
sea spam el correo será entregado al servidor de correos interno (para los
correos entrantes) o servidores de correos externos (para los correos
salientes). Esto es realizado con las siguientes líneas de código.
procesadorCorreos = new ProcesadorCorreos();
procesadorCorreosThread = new Thread( procesadorCorreos,
"SMTPEnviador" );
procesadorCorreosThread.start();
9.Se procede a arrancar el hilo que se encargara de monitorear las
modificaciones realizadas sobre las reglas almacenadas en la base de datos,
cuando se detecta algún cambio se actualizarán los archivos de reglas drools
(.drl). Esto es realizado con las siguientes líneas de código.
monitorReglas=new MonitorReglas();
110
monitorReglasThread = new Thread( monitorReglas ,"MonitorReglas");
monitorReglasThread.start();
10.Se procede a arrancar el hilo que se encargara de buscar actualizaciones
en el repositorio publico de reglas, en caso de encontrar nuevas definiciones
actualizará la base de datos local. Esto es realizado con las siguientes líneas
de código.
monitorActualizaciones=new MonitorActualizaciones();
monitorActualizacionesThread=new Thread(monitorActualizaciones,
"MonitorActualizaciones");
monitorActualizacionesThread.start();
11.Se configura el hilo que ejecutará la parada de los hilos de Bizshield
Service cuando el proceso de sistema operativo sea detenido. Esto es
realizado con las siguientes líneas de código.
shutdownService = new ShutdownService();
shutdownServiceThread = new Thread(shutdownService);
Runtime.getRuntime().addShutdownHook( shutdownServiceThread );
111
4.5.2 Proceso de atención de peticiones SMTP.
La clase principal que se encarga de este proceso es
com.realmsoft.bizshield.server.services.smtp.ProcesadorSMTP, esta clase es
una implementación de la interface java Runnable, por lo tanto esta clase es
un hilo y debe implementar el método public void run().
Este hilo es controlado por un objeto de la clase
com.realmsoft.bizshield.server.services.general.ServidorTCPMultihilo. Esta
clase es un manejador de pool de hilos y por lo tanto puede controlar la
ejecución de varios objetos de la clase
com.realmsoft.bizshield.server.services.smtp.ProcesadorSMTP.
A continuación se detalla las acciones y operaciones realizadas, a nivel de
programación, en el proceso de atención de peticiones SMTP.
1.Este hilo en su implementación tiene un lazo el cual se ejecutara mientras
la variable de clase running tenga el valor true. La variable de clase running
tendrá un valor de false cuando se ejecuta el método public void
shutdown(). Esto es realizado con las siguientes líneas de código.
112
public void run()
{
while(running)
{
…
…
…
}
}
public void shutdown()
{
running = false;
}
2.Se espera la conexión de un cliente SMTP, ejecutando el método accept()
del la clase java.net.ServerSocket, una vez que se detecta una conexión se
retorna el socket por donde se realizará la comunicación en el protocolo
SMTP. Además se setea el timeout de la conexión. Esto es realizado con las
siguientes líneas de código.
socket = serverSocket.accept();
socket.setSoTimeout( 60 * 1000 );
113
3.Se crean los objetos necesarios para la entrada y salida de datos entre el
servidor y el cliente conectado. Esto es realizado con las siguientes líneas de
código.
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(
new InputStreamReader( socket.getInputStream() )
);
4.Se realiza la comunicación SMTP entre el cliente y el servidor, producto del
intercambio de datos se crea un objeto de la clase
com.realmsoft.bizshield.server.services.smtp.MensajeSMTP. Esto es
realizado con las siguientes líneas de código.
write( WELCOME_MESSAGE );
handleCommands();
5.Se crea una lista de String que contiene los correos destinos.
Además se identifica si el correo es entrante o saliente, para lo cual se evalúa
la IP del cliente conectado, si es igual a la IP del servidor de correos
configurado en el archivo bizshield.conf (parámetro puertoSmtp) entonces es
114
un correo saliente caso contrario es un correo entrante. Por último el correo
electrónico es almacenado en la base de datos. Todo esto es realizado con
las siguientes líneas de código
ArrayList<String> l_mailsTo=new ArrayList<String>();
for(DireccionCorreo l_emailAddress:message.getToAddresses())
l_mailsTo.add(l_emailAddress.getAddress());
String ls_servidorCorreoInterno = configurationManager.
getServidorCorreo().getHost();
boolean lb_correoEntrante = !ls_servidorCorreoInterno.
equals(clientIp);
CorreoBO l_correoBO=new CorreoBO();
l_correoBO.guardarCorreo(
message.getFromAddress().toString(),
l_mailsTo,
message.getDataLines(),
clientIp,
lb_correoEntrante);
4.5.3 Procesamiento de Correos.
La clase principal que se encarga de este proceso es
com.realmsoft.bizshield.server.services.smtp.ProcesadorCorreos, esta clase
es una implementación de la interface java Runnable, por lo tanto esta clase
es un hilo y debe implementar el método public void run(). El proceso
115
encargado de ejecutar este hilo es el proceso “Arranque del Subsistema
Bizshield Service”. A continuación se detalla las acciones y operaciones
realizadas, a nivel de programación, en el procesamiento de correos.
1.Este hilo en su implementación tiene un lazo el cual se ejecutará mientras
la variable de clase running tenga el valor true. La variable de clase running
tendrá un valor de false cuando se ejecuta el método public void
shutdown(). Esto es realizado con las siguientes líneas de código.
public void run()
{
while(running)
{
…
…
…
}
}
public void shutdown()
{
running = false;
}
116
2.Se busca en la base de datos, en la tabla dt_correos, todos los correos
electrónicos que tengan en su campo es_spam el valor de “D”, lo que indica
que aun no se ha determinado si el correo electrónico es spam o no. Esto es
realizado con las siguientes líneas de código.
DtCorreoDao l_dtCorreoDao=new DtCorreoDao();
List<DtCorreo> l_dtCorreos=l_dtCorreoDao.findDtCorreosByEsSpam("D");
3.Estos correos electrónicos son procesados con un ciclo for, donde en cada
interacción inicia una transacción con manejador de errores de tal forma que
si todo se ejecutó sin novedades se realiza un commit y en caso de ocurrir un
error se ejecuta un rollback. Además se evalúa la variable de clase running
en caso de que sea falsa se detiene el ciclo for. Esto es realizado con las
siguientes líneas de código.
for(DtCorreo l_dtCorreo:l_dtCorreos)
{
try{
DaoUtil.beginTransaction();
if(!running)
break;
………
………
………
117
DaoUtil.commit();
}
catch (Exception e)
{
DaoUtil.rollback();
}
}
4. Se procesa el correo utilizando la clase
com.realmsoft.bizshield.bo.CorreoBO, invocando al método procesarCorreo,
el cual evalúa las reglas y ejecuta las acciones de control configuradas en
sistema. El resultado de este procesamiento es cambiar la propiedad
esSpam de D a S en caso de que el correo sea SPAM o a N en caso de que
el correo no sea SPAM. Esto es realizado con las siguientes líneas de
código.
l_dtCorreo=l_dtCorreoDao.findById(l_dtCorreo.getIdCorreo());
l_correoBO.procesarCorreo(l_dtCorreo.getIdCorreo());
5. En caso de que el correo no sea spam entonces se crea un objeto
com.realmsoft.bizshield.server.services.smtp.MensajeSMTP con los datos
del correo procesado y se lo envía al servidor de correos correspondiente
(servidor de correos interno para correo entrante y servidor de correo externo
para el correo saliente), el objeto utilizado para enviar el correo es una
118
instancia de la clase com.realmsoft.bizshield.server.services.smtp.
EnviadorSMTP. Esto es realizado con las siguientes líneas de código.
if(l_dtCorreo.getEsSpam().equals(Constantes.NO+""))
{
MensajeSMTP l_message=new MensajeSMTP();
DireccionCorreo fromAddress=new DireccionCorreo();
fromAddress.setAddress(l_dtCorreo.getDe());
l_message.setFromAddress(fromAddress);
String lsA_corresoDestion[]=l_dtCorreo.getPara().
split(""+Constantes.CARACTER_SEPARADOR_CORREOS);
for(String ls_direccionCorreo:lsA_corresoDestion)
{
DireccionCorreo toAddress=new DireccionCorreo();
toAddress.setAddress(ls_direccionCorreo);
l_message.addToAddress(toAddress);
}
String lsA_lineasContenido[]=newString(l_dtCorreo.getContenidoFinal()).
split(Constantes.SEPARADOR_LINEAS_DATOS_CORREO);
for(String ls_linea:lsA_lineasContenido)
{
l_message.addDataLine(ls_linea);
}
enviador.sendMessage(l_message);
}
119
6.Por último el correo procesado es guardado en la base de datos. Esto es
realizado con las siguientes líneas de código.
l_dtCorreoDao.attachDirty(l_dtCorreo);
4.5.4 Monitoreo de Cambios de Reglas.
La clase principal que se encarga de este proceso es
com.realmsoft.bizshield.server.MonitorReglas, esta clase es una
implementación de la interface java Runnable, por lo tanto esta clase es un
hilo y debe implementar el método public void run(). El proceso encargado
de ejecutar este hilo es el proceso “Arranque del Subsistema Bizshield
Service”. A continuación se detalla las acciones y operaciones realizadas, a
nivel de programación, en el proceso de monitoreo de cambios de reglas.
1.Este hilo en su implementación tiene un lazo el cual se ejecutará mientras
la variable de clase running tenga el valor true. La variable de clase running
tendrá un valor de false cuando se ejecuta el método public void
shutdown(). Esto es realizado con las siguientes líneas de código.
public void run()
120
{
while(running)
{
…
…
…
}
}
public void shutdown()
{
running = false;
}
2.Se monitorea en la base de datos, si se han realizado cambios en las
reglas de anti-spam y en caso de detectar cambios se actualizan los archivos
de reglas drools (.drl). El mecanismo utilizado para conocer si las reglas
fueron modificadas es censar el campo cambiaron_reglas de la tabla
dt_proceso. Si un proceso (Correo Entrante o Saliente) tiene el campo
cambiaron_reglas con valor S entonces hay que refrescar el archivo de
reglas de ese proceso, este campo solo se pone en S cuando un usuario
crear o modifica las reglas de un proceso o si un usuario cambia las acciones
que deben ejecutarse cuando se cumplen las reglas de un proceso. Esto es
realizado con las siguientes líneas de código.
121
TraductorBO l_traductorBO=new TraductorBO();
l_traductorBO.sensarActualizarReglas();
4.5.5 Monitoreo para actualizaciones automática de las Reglas.
La clase principal que se encarga de este proceso es
com.realmsoft.bizshield.server. MonitorActualizaciones, esta clase es una
implementación de la interface java Runnable, por lo tanto esta clase es un
hilo y debe implementar el método public void run(). El proceso encargado
de ejecutar este hilo es el proceso “Arranque del Subsistema Bizshield
Service”. A continuación se detalla las acciones y operaciones realizadas, a
nivel de programación, en el proceso de actualizaciones automáticas de las
reglas.
1.Este hilo en su implementación tiene un lazo el cual se ejecutará mientras
la variable de clase running tenga el valor true. Este ciclo se ejecutará cada
minuto. La variable de clase running tendrá un valor de false cuando se
ejecuta el método public void shutdown(). Esto es realizado con las
siguientes líneas de código.
122
public void run()
{
while(running)
{
…
…
…
Thread.sleep(1000*60);
}
}
public void shutdown()
{
running = false;
}
2.Se realiza una conexión con la URL configurada en el archivo bizshield.conf
parámetro urlActualizaciones, se abre la conexión y se recupera el stream
que permitirá recuperar los datos. Esto es realizado con las siguientes líneas
de código.
ConfigurationManager l_cm=ConfigurationManager.getInstance();
InputStream l_io = l_cm.getUrlActualizacion().
openConnection().getInputStream();
123
3.La URL apunta a un archivo de propiedades java (.properties) el cual será
muy parecido al siguiente ejemplo
version=1
listaIpNegra= IP_ORIGEN IN (’10.10.20.1’,’100.14.15.1’,’45.45.78.1’)
Se crea un objeto java.util.Properties el cual es cargado con la información
del stream. Esto es realizado con las siguientes líneas de código.
Properties l_p=new Properties();
l_p.load(l_io);
4.Se recupera el número de la nueva versión publicada, siempre la primera
vez que se ejecuta el Monitor de Actualización se actualiza la regla de lista
de IP negra, luego solo se modifica la regla de lista de IP negra si se detecta
que la nueva versión es diferente a la última que se actualizó. Esto es
realizado con las siguientes líneas de código.
Properties l_p=new Properties();
l_p.load(l_io);
String ls_nuevaVersion=l_p.getProperty("version");
if(ultimaVersionActualizada==null ||
!ls_nuevaVersion.equals(ultimaVersionActualizada))
{
String ls_listaIpNegra=l_p.getProperty("listaIpNegra");
124
ReglasBO l_reglasBo=new ReglasBO();
l_reglasBo.actualizarReglaListaIpNegra(listaIpNegra);
}
4.6 DETALLES DE CODIFICACIÓN DE LOS COMPONENTES DEL
SUBSISTEMA BIZSHIELD LOGIC AND PERSISTENCE
4.6.1 Clases BO
Las clases BO son las que encapsulan toda la lógica transaccional y de
negocio, estas clases no tienen propiedades, solo tiene métodos que
encapsulan las reglas y operaciones específicas de negocio. Para realizar las
operaciones de CRUD (Create, Read, Update y Delete) de los datos de
negocio se apoyan de las clases DAO. Los métodos de las Clases BO
pueden ser de dos tipos:
o Operaciones
o Transacciones
Ambos tipos de métodos deben encapsular reglas y operaciones lógicas de
negocio, la única diferencia es que las transacciones implementan en su
programación el manejo de la atomicidad de la transacción. Por tal motivo el
flujo de control de las clases BOs deberán respetar lo siguiente:
Un método transaccional podrá apoyarse llamando a otros métodos de
operaciones.
125
Un método de operación podrá apoyarse llamando a otros métodos de
operación
Un método transaccional no deberá llamar a otro método de transacción,
porque esto pondría en riesgo la atomicidad e integridad transaccional de
los datos.
Los métodos de las clases BO (Operaciones o Transacciones) deberán
propagar los estados de error creando Objetos de la clase
ExcepcionLogicaNegocio y propagándolos correctamente. Los estados de
error normalmente son las situaciones en donde los datos no cumplen con
las reglas de negocio. A continuación se da un ejemplo general de una
ClaseBO
package com.realmsoft.bizshield.bo;
import com.realmsoft.excepciones.ExcepcionLogicaNegocio;
import com.realmsoft.util.dao.DaoUtil;
public class EjemploBO
{
public void transaccion1(String ps_dato1,String ps_dato2 .....)
{
try{
//Inicio de la transaccion
DaoUtil.beginTransaction();
operacion1();
if(condicionError)
{
126
ExcepcionLogicaNegocio l_e=
new ExcepcionLogicaNegocio(
"Mensaje a Usuario de la condicion de error",
"Mensaje a Técnico de la condicion de error");
throw l_e;
}
operacion2();
//Lógica de negocio especifica de la transaccion1
.....
.....
.....
//Commit de la transaccion
DaoUtil.commit();
}
catch (Exception e)
{
//Rollback de la transaccion
DaoUtil.rollback();
throw e;
}
}
public void operacion1(String ps_dato1,String ps_dato2 .....)
{
//Realiza lógica de negocio especifica 1
.....
.....
.....
}
127
public void operacion2(String ps_dato1,String ps_dato2 .....)
{
//Realiza lógica de negocio especifica 2
.....
.....
.....
operacion3(dato1,dato2....);
}
public void operacion3(String ps_dato1,String ps_dato2 .....)
{
//Realiza lógica de negocio especifica 3
.....
.....
.....
if(condicionError)
{
ExcepcionLogicaNegocio l_e=new ExcepcionLogicaNegocio(
"Mensaje a Usuario de la condicion de error",
"Mensaje a Técnico de la condicion de error");
throw l_e;
}
}
}
128
4.6.2 Clases DAO.
Las clases DAO tiene la responsabilidad de acceder a los datos y realizar las
operaciones CRUD (Create, Read, Update y Delete). Todas las clases DAO
heredan de la clase com.realmsoft.util.dao.Dao. Por cada tabla de la base de
datos existirá una clase dao que permitirá realizar las operaciones CRUD.
Las clases DAO están altamente acopladas a la tecnología de acceso a
datos, esto se debe a que para hacer las operaciones CRUD utiliza
directamente la tecnología de acceso a datos. En este caso las clases DAO
están acopladas al motor de persistencia Hibernate. Las clases DAO tendrán
los siguientes métodos:
persist: Hace que un objeto sea persistente y modifica todos los
objetos relacionados en caso de que haya sido modificados.
attachDirty: Hace que un objeto sea cree o actualice, no se modifican
los objetos relacionados.
attachClean: Hace que un objeto sea cree o actualice, no se modifican
los objetos relacionados, adicionalmente se bloquea el registro.
delete: Borra un objeto.
merge: Ejecuta la operación merge de hibérnate.
findById: Busca un objeto según su clave identificador única
129
Otros métodos find: Busca un objeto o un listado de objetos con los
parámetros necesarios.
A continuación mostramos un ejemplo de una clase DAO
package com.realmsoft.deterministicos.dao;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import com.realmsoft.deterministicos.clasesPersistentes.DtAccion;
import com.realmsoft.util.UtilFecha;
import com.realmsoft.util.dao.Dao;
import static org.hibernate.criterion.Example.create;
public class DtAccionDao extends Dao
{
private static final Log log = LogFactory.getLog(DtAccionDao.class);
public void persist(DtAccion transientInstance)
{
log.debug("persisting DtAccion instance");
try{
sessionFactory.getCurrentSession().
persist(transientInstance);
130
log.debug("persist successful");
}
catch (RuntimeException re)
{
log.error("persist failed", re);
throw re;
}
}
public void attachDirty(DtAccion instance) {
log.debug("attaching dirty DtAccion instance");
try {
sessionFactory.getCurrentSession().
saveOrUpdate(instance);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}
public void attachClean(DtAccion instance) {
log.debug("attaching clean DtAccion instance");
try {
sessionFactory.getCurrentSession().
lock(instance, LockMode.NONE);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
131
}
}
public void delete(DtAccion persistentInstance) {
log.debug("deleting DtAccion instance");
try {
sessionFactory.getCurrentSession().
delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
public DtAccion merge(DtAccion detachedInstance) {
log.debug("merging DtAccion instance");
try {
DtAccion result = (DtAccion) sessionFactory.
getCurrentSession().
merge(detachedInstance);
log.debug("merge successful");
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}
public DtAccion findById(long id) {
log.debug("getting DtAccion instance with id: " + id);
132
try {
DtAccion instance = (DtAccion) sessionFactory
.getCurrentSession()
.get(
"com.realmsoft.deterministicos.clasesPersistentes.DtAccion",
id);
if (instance == null) {log.debug("get successful, no instance found");
} else {
log.debug("get successful, instance found");
}
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}
@SuppressWarnings("unchecked")
public List<DtAccion> findByExample(DtAccion instance) {
log.debug("finding DtAccion instance by example");
try {
List<DtAccion> results = (List<DtAccion>) sessionFactory
.getCurrentSession()
.createCriteria(
"com.realmsoft.deterministicos.clasesPersistentes.DtAccion")
.add(create(instance)).list();
log.debug("find by example successful, result size: "
+ results.size());
return results;
} catch (RuntimeException re) {
133
log.error("find by example failed", re);
throw re;
}
}
@SuppressWarnings("unchecked")
public List<DtAccion> findDtAccionesVigentesByIdRegla(
long pl_idRegla)
{
returnsessionFactory.getCurrentSession().
getNamedQuery("findDtAccionesVigentesByIdRegla")
.setLong("idRegla", pl_idRegla)
.setCalendar("hoy", UtilFecha.getHoy())
.setCalendar("maniana", UtilFecha.getHoy())
.list();
}
@SuppressWarnings("unchecked")
public List<DtAccion>
findDtAccionesVigentesByIdReglaIdTipoAccion(
long pl_idRegla,long pl_idTipoAccion)
{
return sessionFactory.getCurrentSession().
getNamedQuery("findDtAccionesVigentesByIdReglaIdTipoAccion")
.setLong("idRegla", pl_idRegla)
.setLong("idTipoAccion", pl_idTipoAccion)
.setCalendar("hoy", UtilFecha.getHoy())
.setCalendar("maniana", UtilFecha.getHoy())
.list();
}
}
134
4.6.3 Clases Persistentes.
Las clases persistentes son las clases que contienen los datos del negocio
expresados como atributos de clase y para el manejo de estos atributos
tienen métodos set y get. Por cada tabla de base de datos existirá una clase
persistente. Los atributos que pueden tener las clases persistentes son los
siguientes.
Propiedad: Es un valor simple, por ejemplo un número, cadena de
caracteres, fecha, etc. Este tipo de atributo es una característica propia de
la clase persistente y no expresa ningún tipo de relación.
Objeto Padre: Es un objeto de alguna clase persistente. Este tipo de
atributo es característica de una relación de muchos a uno entre la clase
persistente del objeto padre y la clase persistente en mención.
Objetos Hijos: Es un Set de objetos de alguna clase persistente. Este
tipo de atributo es característica de una relación de uno a muchos entre la
clase persistente en mención y la clase persistente de los objetos hijos.
135
A continuación mostramos un ejemplo de las clases persistentes
com.realmsoft.deterministicos.clasesPersistentes.DtTipoOperador y
com.realmsoft.deterministicos.clasesPersistentes.DtOperador. La relación
entre estas clases son:
Un DTTipoOperador tiene uno o varios DTOperador (uno a muchos).
Varios DtOperador tiene el mismo DtTipoOperador (muchos a uno)
/*Clase DtTipoOperador*/
package com.realmsoft.deterministicos.clasesPersistentes;
import java.util.HashSet;
import java.util.Set;
public class DtTipoOperador implements java.io.Serializable {
private static final long serialVersionUID = -3424189393286673341L;
private Integer idTipoOperador;
private String nombre;
private Set<DtOperador> dtOperadors = new HashSet<DtOperador>(0);
public DtTipoOperador() {
}
public DtTipoOperador(String nombre) {
this.nombre = nombre;
}
public DtTipoOperador(String nombre, Set<DtOperador> dtOperadors) {
this.nombre = nombre;
136
this.dtOperadors = dtOperadors;
}
public Integer getIdTipoOperador() {
return this.idTipoOperador;
}
public void setIdTipoOperador(Integer idTipoOperador) {
this.idTipoOperador = idTipoOperador;
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Set<DtOperador> getDtOperadors() {
return this.dtOperadors;
}
public void setDtOperadors(Set<DtOperador> dtOperadors) {
this.dtOperadors = dtOperadors;
}
}
/*Clase DtOperador*/
package com.realmsoft.deterministicos.clasesPersistentes;
137
import java.util.HashSet;
import java.util.Set;
public class DtOperador implements java.io.Serializable {
private static final long serialVersionUID = 3261491564647244947L;
private Integer idOperador;
private DtTipoOperador dtTipoOperador;
private String nombreOperador;
private String operador;
private String operadorDrools;
private int numeroOperandos;
private Set<DtComponenteOperadorRegla>
dtComponenteOperadorRegla =
new HashSet<DtComponenteOperadorRegla>(0);
public DtOperador() {
}
public DtOperador(DtTipoOperador dtTipoOperador,
String nombreOperador,
String operador,
int numeroOperandos)
{
this.dtTipoOperador = dtTipoOperador;
this.nombreOperador = nombreOperador;
this.operador = operador;
this.numeroOperandos = numeroOperandos;
}
138
public Integer getIdOperador() {
return this.idOperador;
}
public void setIdOperador(Integer idOperador) {
this.idOperador = idOperador;
}
public DtTipoOperador getDtTipoOperador() {
return this.dtTipoOperador;
}
public void setDtTipoOperador(DtTipoOperador dtTipoOperador) {
this.dtTipoOperador = dtTipoOperador;
}
public String getNombreOperador() {
return this.nombreOperador;
}
public void setNombreOperador(String nombreOperador) {
this.nombreOperador = nombreOperador;
}
public String getOperador() {
return this.operador;
}
public void setOperador(String operador) {
139
this.operador = operador;
}
public int getNumeroOperandos() {
return this.numeroOperandos;
}
public void setNumeroOperandos(int numeroOperandos) {
this.numeroOperandos = numeroOperandos;
}
protected Set<DtComponenteOperadorRegla>
getDtComponenteOperadorRegla() {
return dtComponenteOperadorRegla;
}
protected void setDtComponenteOperadorRegla
(Set<DtComponenteOperadorRegla> dtComponenteOperadorRegla) {
this.dtComponenteOperadorRegla = dtComponenteOperadorRegla;
}
public String getOperadorDrools() {
return operadorDrools;
}
public void setOperadorDrools(String operadorDrools) {
this.operadorDrools = operadorDrools;
}
}
140
4.7 DETALLES de CODIFICACIÓN DE LOS COMPONENTES DEL
SUBSISTEMA BIZSHIELD WEB ADMINISTRATOR
4.7.1 Introducción a JavaServer Faces
JavaServer Faces (JSF) es un framework de desarrollo basado en el patrón
MVC (Modelo – Vista – Controlador), que normaliza y estandariza el
desarrollo de aplicaciones web bajo un modelo de programación de
componentes UI del lado del servidor. La tecnología JSF está por encima de
las tecnologías JSP y Servlet y proporciona un nivel de abstracción más alto
que éstas, liberando al desarrollador del enfoque tradicional del
request/response. Al ser una especificación Java, proporciona
independencia del proveedor.
Una de las grandes ventajas de la tecnología JavaServer Faces es que
ofrece una clara separación entre el comportamiento y la presentación. Las
aplicaciones Web construidas con tecnología JSP conseguían parcialmente
esta separación. Sin embargo, una aplicación JSP no puede mapear
peticiones HTTP al manejo de eventos específicos del componente o
manejar elementos UI como objetos con estado en el servidor. La tecnología
JavaServer Faces nos permite construir aplicaciones Web que implementan
una separación entre el comportamiento y la presentación tradicionalmente
ofrecida por arquitectura UI del lado del cliente.
141
Algunas de las características de JSF son:
Permite representar componentes UI y guardar y procesar su estado
(valor).
Definir la navegación entre páginas.
Ejecutar programas en el servidor por medio de eventos en el cliente.
Soportar internacionalización de aplicaciones
Validaciones y Conversiones de Datos
Los componentes UI son elementos configurables y reusables que componen
las interfaces de usuario en JSF. Puede ser un botón, una tabla compuesta,
un link, un textField, los cuales a su vez pueden ser parte de componentes
más complejos. Son accesibles vía JSF Custom Tags dentro de la página
JSP
Cuando un cliente hace una petición sobre una página, comienza el ciclo de
vida JSF. El ciclo de vida JSF se compone de los siguientes pasos:
1. Restore view: Se empieza a construir el árbol de componentes.
2. Apply request values: Se asocian los valores que se encuentran en
la petición a los componentes.
142
3. Process validations: Se comprueban las reglas de validación que
tienen asociadas los componentes.
4. Update model values: Se setean los valores de los Managed Bean.
5. Invoke application: Se ejecutan las acciones y manejadores de
eventos.
6. Render response: Se dibuja la respuesta.
4.7.2 Managed BeansLos beans administrador o managed beans son clases Java de tipo POJO
(Plain Old Java Object) que contienen los datos a ser procesados por el
modelo (Reglas de Negocio). Los datos son seteados desde la forma web
automáticamente a la clase java. Se almacenan en un ámbito (request,
session, application).
Los managed beans permiten definir métodos que ejecuten funciones
asociadas con un componente, los cuales incluyen validaciones, manejo de
eventos, y procesamiento de navegación. Los managed beans almacenan
las propiedades de los componentes UI de la página y contienen los métodos
de comportamiento. Para poder utilizar un managed bean desde una página
143
JSF este debe ser configurado en el archivo faces-config.xml. Las
propiedades del managed bean deben seguir las convenciones de los
POJOS, es decir es un campo privado con métodos get y set para acceder y
setear los datos respectivamente.
Los métodos validadores de un managed bean retornan un String con el valor
SUCCESS para indicar éxito, y el valor FAILURE para indicar error. A
continuación mostramos un ejemplo de un managed bean
package com.realmsoft.bizshield.beans;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlCommandButton;
144
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import static com.realmsoft.bizshield.Constantes.SUCCESS;
import static com.realmsoft.bizshield.Constantes.FAILURE;
import com.realmsoft.bizshield.validacion.AccionInconsistente;
import com.realmsoft.bizshield.validacion.InvocadorValidadorSubtipos;
import com.realmsoft.deterministicos.clasesPersistentes.DtAccion;
importcom.realmsoft.deterministicos.clasesPersistentes.DtParametroAcci
on;
import com.realmsoft.deterministicos.clasesPersistentes.
DtParametroTipoAccion;
import com.realmsoft.deterministicos.clasesPersistentes.DtRegla;
import com.realmsoft.deterministicos.clasesPersistentes.DtReglaAccion;
import com.realmsoft.deterministicos.clasesPersistentes.DtTipoAccion;
import com.realmsoft.deterministicos.dao.AsUsuarioDao;
import com.realmsoft.deterministicos.dao.DtAccionDao;
import com.realmsoft.deterministicos.dao.DtParametroAccionDao;
import com.realmsoft.deterministicos.dao.DtParametroTipoAccionDao;
import com.realmsoft.deterministicos.dao.DtReglaDao;
import com.realmsoft.deterministicos.dao.DtTipoAccionDao;
import com.realmsoft.deterministicos.bo.ConfiguracionAccionBO;
import com.realmsoft.excepciones.ExcepcionAplicacion;
import com.realmsoft.excepciones.ExcepcionLogicaNegocio;
public class ConfiguracionAccion {
// Interacción con formulario
145
private String opcionSeleccionada;
private String mensajeOpcionSeleccionada;
private String soloLectura;
private HtmlCommandButton botonOpcionSeleccionada;
private HtmlPanelGrid tablaParametrosTiposAcciones;
// Datos de formulario
private Long idAccion;
private String nombreAccion;
private String expresionRegular;
private String ejemploExpresionRegular;
private Long idTipoAccion;
private Long idReglaDisponible;
private Long idReglaAsociada;
private List<SelectItem> listaAcciones;
private List<SelectItem> listaTiposAcciones;
private List<SelectItem> listaReglasDisponibles;
private List<SelectItem> listaReglasAsociadas;
private String mensajeError;
private final static Long NINGUNA = -1l;
private final static String ESTILO_TABLA_PARAMETROS =
"bizshield-texto-pequeno";
private Map<String,String> paramTipoAccion;
public ConfiguracionAccion () {
this.inicializarDatosUsuario();
this.nombreAccion = "Nueva Acción";
this.soloLectura = "false";
this.listaAcciones = new ArrayList<SelectItem>();
this.listaTiposAcciones = new ArrayList<SelectItem>();
this.listaReglasDisponibles = new ArrayList<SelectItem>();
146
this.listaReglasAsociadas = new ArrayList<SelectItem>();
this.paramTipoAccion = new HashMap<String,String>();
this.botonOpcionSeleccionada = new HtmlCommandButton();
this.tablaParametrosTiposAcciones = new HtmlPanelGrid();
this.tablaParametrosTiposAcciones.setColumns(2);
this.tablaParametrosTiposAcciones.
setStyleClass(ESTILO_TABLA_PARAMETROS);
this.llenarListaReglasDisponibles();
this.llenarListaAcciones();
this.llenarListaTiposAcciones();
this.seleccionarOpcionCrear();
this.actualizarTablaParametrosTiposAcciones(
this.getIdTipoAccion(), true);
}
private void inicializarDatosUsuario() {
Map<String, Object> l_session = FacesContext.getCurrentInstance().
getExternalContext().getSessionMap();
Object l_username = l_session.get("username");
Object l_idUsuario = l_session.get("idUsuario");
if (l_username == null || l_idUsuario == null) {AsUsuarioDao l_usuarioDao = new AsUsuarioDao();
l_session.put("username", FacesContext.getCurrentInstance().
getExternalContext().getRemoteUser());
l_session.put("idUsuario",
l_usuarioDao.findByUsername(
FacesContext.getCurrentInstance().
getExternalContext().getRemoteUser()).getIdUsuario());
}
}
147
private void limpiarCamposFormulario() {
this.idAccion = NINGUNA;
this.setNombreAccion("");
this.setExpresionRegular("");
this.setEjemploExpresionRegular("");
this.actualizarTablaParametrosTiposAcciones(
this.idTipoAccion, true);
this.llenarListaReglasDisponibles();
this.listaReglasAsociadas.clear();
this.botonOpcionSeleccionada.setRendered(true);
this.setMensajeError("");
}
private void llenarCamposFormulario() {
DtAccionDao l_accionDao = new DtAccionDao();
DtParametroAccionDao l_parametroAccionDao =
new DtParametroAccionDao();
DtAccion l_accion = l_accionDao.findById(this.idAccion);
List<DtParametroAccion> l_listaParametroAccion =
l_parametroAccionDao.
findAllByIdAccion(this.idAccion);
this.nombreAccion = l_accion.getNombre();
this.idTipoAccion = l_accion.getDtTipoAccion().
getIdTipoAccion();
for (DtParametroAccion l_parametroAccion :
l_listaParametroAccion) {
this.paramTipoAccion.put(
l_parametroAccion.getDtParametroTipoAccion().
getIdParametroTipoAccion().toString(),
l_parametroAccion.getValor());
148
}
this.actualizarTablaParametrosTiposAcciones(
this.idTipoAccion, false);
this.actualizarAsociacionReglas();
this.botonOpcionSeleccionada.setRendered(true);
this.setMensajeError("");
}
public String validarConfiguracionAccion () {
String result = FAILURE;
try {
if (NINGUNA.equals(this.idAccion) &&
!"Crear".equalsIgnoreCase(this.opcionSeleccionada)) {
this.mensajeError = "Debe seleccionar una acción";
} else if ("".equals(this.nombreAccion.trim())) {
this.mensajeError = "El campo nombre de acción es
obligatorio";
} else {
result = SUCCESS;
if (!"Editar".equalsIgnoreCase(
this.getOpcionSeleccionada()))
result = validarNombreAccion();
if (SUCCESS.equals(result))
result = validarParametrosAccion();
if (SUCCESS.equals(result)) {
AccionInconsistente l_accionInconsistente =
new AccionInconsistente();
149
List<Long> l_listaReglasAsociadas =
new ArrayList<Long>();
for (SelectItem item :
this.listaReglasAsociadas) {
l_listaReglasAsociadas.add(
(Long)item.getValue());
}
result = l_accionInconsistente.
validarAccionesInconsistentesPorTipoAccion(
this.idTipoAccion,
l_listaReglasAsociadas);
if (FAILURE.equals(result))
this.mensajeError =
l_accionInconsistente.
getMensajeValidacion();
}
}
} catch (ExcepcionAplicacion ea) {
this.mensajeError = ea.getMessage();
result = FAILURE;
}
return result;
}
public String crear () {
String result = FAILURE;
try {
if (SUCCESS.equals(validarConfiguracionAccion())) {
ConfiguracionAccionBO configuracionAccionBO =
150
new ConfiguracionAccionBO();
List<Long> l_listaReglasAsociadas =
new ArrayList<Long>();
for (SelectItem item : this.listaReglasAsociadas) {
l_listaReglasAsociadas.add(
(Long)item.getValue());
}
configuracionAccionBO.crearOActualizarAccion(
this.nombreAccion,
this.idTipoAccion,
this.paramTipoAccion,
l_listaReglasAsociadas,
new Integer(FacesContext.
getCurrentInstance().
getExternalContext().
getSessionMap().
get("idUsuario").toString()),
null);result = SUCCESS;
this.llenarListaAcciones();
this.limpiarCamposFormulario();
this.mensajeError = "La acción se creó exitosamente";
}
} catch (ExcepcionLogicaNegocio e) {
this.mensajeError = e.getMensajeUsuario();
e.printStackTrace();
} catch (Exception e) {
this.mensajeError = "Ocurrió un error al intentar almacenar la acción";
e.printStackTrace();
}
151
return result;
}
public String editar () {
String result = FAILURE;
try {
if (NINGUNA.equals(this.idAccion)) {
this.mensajeError = "Debe seleccionar la acción que desea editar";
return result;
}
if (SUCCESS.equals(validarConfiguracionAccion())) {
ConfiguracionAccionBO configuracionAccionBO =
new ConfiguracionAccionBO();
List<Long> l_listaReglasAsociadas =
new ArrayList<Long>();
for (SelectItem item : this.listaReglasAsociadas) {
l_listaReglasAsociadas.
add((Long)item.getValue());
}
configuracionAccionBO.crearOActualizarAccion(
this.nombreAccion,
this.idTipoAccion,
this.paramTipoAccion,
l_listaReglasAsociadas,
new Integer(FacesContext.
getCurrentInstance().
getExternalContext().
getSessionMap().
get("idUsuario").toString()),
152
this.idAccion);
result = SUCCESS;
this.llenarListaAcciones();
this.limpiarCamposFormulario();
this.mensajeError = "La acción se editó exitosamente";
}
} catch (ExcepcionLogicaNegocio e) {
this.mensajeError = e.getMensajeUsuario();
e.printStackTrace();
} catch (Exception e) {
this.mensajeError = "Ocurrió un error al intentar editar la acción";
e.printStackTrace();
}
return result;
}
public String consultar () {
if (NINGUNA.equals(this.idAccion)) {
this.mensajeError = "Debe seleccionar la acción que desea consultar";
return FAILURE;
}
return SUCCESS;
}
public String eliminar () {
String result = FAILURE;
try {
if (NINGUNA.equals(this.idAccion)) {
153
this.mensajeError = "Debe seleccionar la acción que desea eliminar";
return result;
}
ConfiguracionAccionBO configuracionAccionBO =
new ConfiguracionAccionBO();
configuracionAccionBO.caducarAccion(this.idAccion,
new Integer(FacesContext.getCurrentInstance().
getExternalContext().
getSessionMap().get("idUsuario").toString()));
result = SUCCESS;
this.llenarListaAcciones();
this.limpiarCamposFormulario();
this.mensajeError = "La acción se eliminó exitosamente";
} catch (ExcepcionLogicaNegocio e) {
this.mensajeError = e.getMensajeUsuario();
e.printStackTrace();
} catch (Exception e) {
this.mensajeError = "Ocurrió un error al intentar eliminar la acción";
e.printStackTrace();
}
return result;
}
public void setOpcionSeleccionada(String opcionSeleccionada) {
this.opcionSeleccionada = opcionSeleccionada;
}
public String getOpcionSeleccionada() {
return opcionSeleccionada;
154
}
public void setMensajeOpcionSeleccionada(String mensajeOpcion) {
this.mensajeOpcionSeleccionada = mensajeOpcion;
}
public String getMensajeOpcionSeleccionada() {
return mensajeOpcionSeleccionada;
}
public HtmlCommandButton getBotonOpcionSeleccionada() {
return this.botonOpcionSeleccionada;
}
public void setBotonOpcionSeleccionada (HtmlCommandButton b) {
this.botonOpcionSeleccionada = b;
}
public String getMensajeError() {
return mensajeError;
}
public void setMensajeError(String mensajeError) {
this.mensajeError = mensajeError;
}
public Long getIdTipoAccion() {
return idTipoAccion;
}
155
public void setIdTipoAccion(Long idTipoAccion) {
this.idTipoAccion = idTipoAccion;
}
public Long getIdAccion() {
return idAccion;
}
public void setIdAccion(Long idAccion) {
this.idAccion = idAccion;
}
public HtmlPanelGrid getTablaParametrosTiposAcciones() {
return tablaParametrosTiposAcciones;
}
public void setTablaParametrosTiposAcciones(
HtmlPanelGrid tablaParametrosTiposAcciones) {
this.tablaParametrosTiposAcciones =
tablaParametrosTiposAcciones;
}
public List<SelectItem> getListaAcciones() {
return listaAcciones;
}
public void setListaAcciones(List<SelectItem> listaAcciones) {
this.listaAcciones = listaAcciones;
}
156
public List<SelectItem> getListaTiposAcciones() {
return listaTiposAcciones;
}
public void setListaTiposAcciones(List<SelectItem>
listaTiposAcciones) {
this.listaTiposAcciones = listaTiposAcciones;
}
public String getNombreAccion() {
return nombreAccion;
}
public void setNombreAccion(String nombreAccion) {
this.nombreAccion = nombreAccion;
}
public Map<String, String> getParamTipoAccion() {
return paramTipoAccion;
}
public void setParamTipoAccion(Map<String, String> paramTipoAccion) {
this.paramTipoAccion = paramTipoAccion;
}
public Long getIdReglaDisponible() {
return idReglaDisponible;
}
public void setIdReglaDisponible(Long idReglaDisponible) {
157
this.idReglaDisponible = idReglaDisponible;
}
public List<SelectItem> getListaReglasDisponibles() {
return listaReglasDisponibles;
}
public void setListaReglasDisponibles(List<SelectItem>
listaReglasDisponibles) {
this.listaReglasDisponibles = listaReglasDisponibles;
}
public Long getIdReglaAsociada() {
return idReglaAsociada;
}
public void setIdReglaAsociada(Long idReglaAsociada) {
this.idReglaAsociada = idReglaAsociada;
}
public List<SelectItem> getListaReglasAsociadas() {
return listaReglasAsociadas;
}
public void setListaReglasAsociadas(List<SelectItem>
listaReglasAsociadas) {
this.listaReglasAsociadas = listaReglasAsociadas;
}
public String getSoloLectura() {
158
return soloLectura;
}
public void setSoloLectura(String soloLectura) {
this.soloLectura = soloLectura;
}
public String getExpresionRegular() {
return expresionRegular;
}
public void setExpresionRegular(String expresionRegular) {
this.expresionRegular = expresionRegular;
}
public String getEjemploExpresionRegular() {
return ejemploExpresionRegular;
}
public void setEjemploExpresionRegular(String
ejemploExpresionRegular) {
this.ejemploExpresionRegular = ejemploExpresionRegular;
}
}
159
4.7.3 Páginas JSF
Las páginas JSF son páginas JSP que tienen etiquetas JSF. Para utilizar
las etiquetas JSF hay que incluir las librerías de etiquetas Core y Html:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> (Definen los
tags jsf)
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> (Definen los
tags html)
Con la directiva taglib incluimos la biblioteca de marcas JSF. Una página
JSF se representa por medio de un árbol de componentes UI, llamado
vista (view). El árbol inicia con las etiquetas <f:view></f:view>. Todas las
otras marcas deben estar incluidas dentro de este tag.
La sincronización una propiedad de un managed bean con el valor de un
componente de tipo inputText se debe realizar de la siguiente forma:
<h:inputText value="#{configuracionAccion.nombreAccion}" size="60"
maxlength="64" readonly="#{configuracionAccion.soloLectura}"/>
160
El managed bean debe estar declarado en el archivo faces-config.xml.
Para poder utilizar JSF debemos incluir las librerías jsf-impl.jar, jsf-api.jar,
commons-beanutils.jar, commons-collections.jar, commons-digester.jar,
commons-logging.jar, standard.jar y jstl.jar. A continuación mostramos un
ejemplo de una página JSF:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Bizshield Web Administrator - Configuración de
Acciones</title>
<link rel="stylesheet" type="text/css"
href="/bizshieldWebAdministrator/css/estilos_bizshield.css"/>
</head>
<body class="bizshield-texto-pequeno">
<f:view>
<h:form id="frmConfiguracionAccion">
<center>
<table cellspacing="1" border="0" width="90%" style="text-align: center">
<tr class="bizshield-texto-muy-pequeno">
<td colspan="1" align="left" id="menuBizshieldLink">
<h:commandLink action="inicioAdministrador" value="Inicio" /></td>
<td colspan="6" align="right"><b>Usuario: </b><label style="font-
size: x-small;">
<%=session.getAttribute("username").
161
toString().toLowerCase()%></label></td>
</tr>
<tr id="menuBizshieldTitulo">
<td colspan="7">
<h:outputText value="Configuración de Acciones" /></td>
</tr>
<tr>
<td><br/></td>
</tr>
<tr>
<td colspan="7" align="center">
<table class="bizshield-texto-pequeno">
<tr>
<td>Seleccione una Acción:</td>
<td><h:selectOneMenu id="somAccion"
value="#{configuracionAccion.idAccion}">
<f:selectItems value="#{configuracionAccion.listaAcciones}" />
</h:selectOneMenu>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><br/></td>
</tr>
<tr class="bizshield-texto-pequeno" id="menuBizshieldLink">
<td width="25%"><h:commandLink
action="#{configuracionAccion.seleccionarOpcionCrear}"
value="Crear" /></td>
162
<td><h:outputText value="|" /></td>
<td width="25%"><h:commandLink
action="#{configuracionAccion.seleccionarOpcionEditar}"
value="Editar" /></td>
<td><h:outputText value="|" /></td>
<td width="25%"><h:commandLink
action="#{configuracionAccion.seleccionarOpcionConsultar}"
value="Consultar" /></td>
<td><h:outputText value="|" /></td>
<td width="25%"><h:commandLink
action="#{configuracionAccion.seleccionarOpcionEliminar}"
value="Eliminar" /></td>
</tr>
</table>
<hr color="orange" width="90%">
<br>
<table border="0" class="bizshield-texto-pequeno"
id="formularioBizshield">
<thead>
<tr>
<th colspan="4" height="25">
<h:outputText
value="#{configuracionAccion.mensajeOpcionSeleccionada}"/>
</th>
</tr>
</thead>
<tbody>
<tr>
163
<td height="25">Nombre de Acción:</td>
<td height="25">Tipo de Acción:</td>
</tr>
<tr>
<td>
<h:inputText
value="#{configuracionAccion.nombreAccion}" size="60"
maxlength="64" readonly="#{configuracionAccion.soloLectura}"/>
</td>
<td>
<h:selectOneMenu id="somTipoAccion"
value="#{configuracionAccion.idTipoAccion}"
valueChangeListener="#{configuracionAccion.seleccionarTipoAccion}"
onchange="submit()" disabled="#{configuracionAccion.soloLectura}">
<f:selectItems
value="#{configuracionAccion.listaTiposAcciones}" />
</h:selectOneMenu>
</td>
</tr>
<tr align="center">
<td colspan="2"><h:panelGrid
binding="#{configuracionAccion.tablaParametrosTiposAcciones}" /></td>
</tr>
<tr>
<td colspan="1" height="25">Expresión Regular:</td>
<td colspan="1" height="25">Ejemplo de Expresión Regular:</td>
</tr>
<tr>
164
<td colspan="1" ><h:inputText id="txtExpresionRegular"
value="#{configuracionAccion.expresionRegular}" size="60"
disabled="#{configuracionAccion.soloLectura}" /></td>
<td colspan="1" ><h:inputText id="txtEjemploExpresionRegular"
value="#{configuracionAccion.ejemploExpresionRegular}" size="60"
disabled="#{configuracionAccion.soloLectura}" /></td>
</tr>
<tr>
<td colspan="2" align="left" height="35"><h:commandButton
action="#{configuracionAccion.validarEjemploExpresionRegular}"
value="Validar Ejemplo de Expresión Regular"
disabled="#{configuracionAccion.soloLectura}" /></td>
</tr>
<tr>
<td colspan="2" align="center" >
<table class="bizshield-texto-pequeno" border="0" width="100%">
<tr align="center">
<td height="25">Reglas Disponibles</td>
<td/>
<td>Reglas Asociadas</td>
</tr>
<tr align="center">
<td rowspan="2" >
<h:selectOneListbox id="solReglasDisponibles"
value="#{configuracionAccion.idReglaDisponible}" size="10" style="width:
400px" disabled="#{configuracionAccion.soloLectura}">
<f:selectItems value="#{configuracionAccion.listaReglasDisponibles}"/>
</h:selectOneListbox>
</td>
165
<td>
<h:commandButton action="#{configuracionAccion.seleccionarRegla}"
value="->" disabled="#{configuracionAccion.soloLectura}"/>
</td>
<td rowspan="2">
<h:selectOneListbox id="solReglasAsociadas"
value="#{configuracionAccion.idReglaAsociada}" size="10" style="width:
400px" disabled="#{configuracionAccion.soloLectura}">
<f:selectItems value="#{configuracionAccion.listaReglasAsociadas}"/>
</h:selectOneListbox>
</td>
</tr>
<tr align="center">
<td>
<h:commandButton action="#{configuracionAccion.liberarRegla}"
value="<-" disabled="#{configuracionAccion.soloLectura}"/>
</td>
</tr>
</table>
</td>
</tr>
<tr align="center">
<td colspan="2" height="25">Mensaje del Sistema:</td>
</tr>
<tr>
<td colspan="2" align="center">
<h:inputTextarea value="#{configuracionAccion.mensajeError}"
cols="100" rows="3" styleClass="bizshield-textarea-mensaje"
readonly="true"/>
</td>
166
</tr>
<tr align="center">
<td colspan="2" height="35"><h:commandButton
binding="#{configuracionAccion.botonOpcionSeleccionada}" /></td>
</tr>
</tbody>
</table>
<div id="menuBizshieldLink" style="vertical-align: bottom">
<br>
<hr color="orange" width="90%">
<h:commandLink action="inicioAdministrador" value="Inicio" />
</div>
</center>
</h:form>
</f:view>
</body>
</html>
4.7.4 El archivo de configuración faces-config.xml
Es el archivo de configuración central de JavaServer Faces. Es como el
pegamento que une modelo, vista y controlador. Aquí se especifican los
eventos, acciones, managed beans y reglas de navegación. El archivo
faces-config.xml se encuentra ubicado en la carpeta WEB-INF.
167
Si se quiere acceder a los managed beans en las páginas JSF, es necesario
registrarlos en el archivo faces-config.xml. Esto se realiza mediante el
elemento managed-bean, como se muestra a continuación:
<managed-bean><managed-bean-name>configuracionRegla</managed-bean-name><managed-bean-class>
com.realmsoft.bizshield.beans.ConfiguracionRegla
</managed-bean-class><managed-bean-scope>session</managed-bean-scope>
</managed-bean><managed-bean>
<managed-bean-name>configuracionAccion</managed-bean-name><managed-bean-class>
com.realmsoft.bizshield.beans.ConfiguracionAccion
</managed-bean-class><managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Estos son los principales elementos del archivo faces-config.xml:
<navigation-rule>
Define una regla de navegación.
<from-view-id>/configuracion/home.faces</from-view-id>
Define la página JSF para la cual la regla de navegación es relevante.
168
<navigation-case>
Define un caso de navegación.
<from-outcome>inicioBizshield</from-outcome>
Define el nombre para este caso de navegación.
<to-view-id>/index.faces</to-view-id>
Define la página JSF a la cual se debe re direccionar.
<managed-bean>
Define un managed bean
<managed-bean-name>configuracionRegla</managed-bean-
name>
Define un nombre para el managed bean. Este nombre es el que se usa
en la página JSF.
<managed-bean-class>
com.realmsoft.bizshield.beans.ConfiguracionAccion
</managed-bean-class>
Define la clase que representa el managed bean.
<managed-bean-scope>session</managed-bean-scope>
Define en que alcance el managed bean es almacenado.
4.7.5 Archivo faces-config.xml de Bizshield Web Administrator<?xml version="1.0"?>
169
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>configuracionRegla</managed-bean-name>
<managed-bean-
class>com.realmsoft.bizshield.beans.ConfiguracionRegla</managed-
bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>configuracionAccion</managed-bean-name>
<managed-bean-
class>com.realmsoft.bizshield.beans.ConfiguracionAccion</managed-
bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>configuracionUsuario</managed-bean-name>
<managed-bean-
class>com.realmsoft.bizshield.beans.ConfiguracionUsuario</managed-
bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>reporteCorreoAnalizado</managed-bean-name>
170
<managed-bean-
class>com.realmsoft.bizshield.beans.ReporteCorreoAnalizado</managed-
bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>reporteReglaEvaluada</managed-bean-name>
<managed-bean-
class>com.realmsoft.bizshield.beans.ReporteReglaEvaluada</managed-
bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>bizshieldUtil</managed-bean-name>
<managed-bean-
class>com.realmsoft.bizshield.beans.BizshieldUtil</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<description>Navegacion Global</description>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>inicioBizshield</from-outcome>
<to-view-id>/index.faces</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>configuracionReglas</from-outcome>
<to-view-id>/configuracion/reglas.faces</to-view-id>
</navigation-case>
<navigation-case>
171
<from-outcome>configuracionAcciones</from-outcome>
<to-view-id>/configuracion/acciones.faces</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>configuracionUsuarios</from-outcome>
<to-view-id>/configuracion/usuarios.faces</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>inicioAdministrador</from-outcome>
<to-view-id>/configuracion/home.faces</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>inicioUsuario</from-outcome>
<to-view-id>/reportes/home.faces</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>visualizacionReportes</from-outcome>
<to-view-id>/reportes/home.faces</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>reporteCorreosAnalizados</from-outcome>
<to-view-id>/reportes/reporteCorreosAnalizados.faces</to-view-
id>
</navigation-case>
<navigation-case>
<from-outcome>reporteReglasEvaluadas</from-outcome>
<to-view-id>/reportes/reporteReglasEvaluadas.faces</to-view-
id>
</navigation-case>
</navigation-rule> </faces-config>
172
CAPÍTULO 5
5. PRUEBAS
5.1 Infraestructura Local.
Se utilizó para esta prueba dos dominios
uno de los cuales se encargaba de enviar
los correos al dominio que tenía el
Servidor AntiSpam, y poder verificar
localmente el funcionamiento del antispam
173
Se configuraron dos redes, cada una con su respectivo Servidor de dominio,
servidor de correo, configuración de routers. Instalación de los programas
necesarios para la configuración de Servidor antispam.
FIGURA 11. Diagrama de ambiente de pruebas local
Para la prueba del sistema se utilizó el siguiente harware y software
Un Servidor con la aplicación antispam
Con el siguiente software
Sistema operativo Windows XP SP2
La aplicación Antispam jes
Java
174
Un Servidor DNS ubicado en un dominio Denominado Servicompu.com
Con el siguiente software
Sistema operativo Windows 2003 Server
Servidor de Correo(Jes-1.6.1)
UN Servidor DNS ubicado en otro dominio con nombre Bizshield.com
Sistema operativo Windows 2003 Server
Servicio DNS
Servidor de Correo (Jes-1.6.1)
Dos switch’s para la interconexión de los computadores
Dos routers para la comunicación de las dos redes
Un computador cliente ubicado en la red con el dominio Servicompu.com
Sistema operativo Windows XP SP2
Cliente de Correo (Outlook)
Un computador cliente ubicado en la red con el dominio bizshield.com
Sistema operativo Windows XP SP2
Cliente de Correo (Thunderbird)
175
5.2 Infraestructura De Prueba En Internet
FIGURA 12. Infraestructura de prueba en internet.
Para la prueba del sistema se utilizó el siguiente harware y software
Un Servidor con la aplicación antispam
Con el siguiente software
Sistema operativo Windows XP SP2
La aplicación Antispam
Java
Un Servidor DNS ubicado en un dominio Denominado Servicompu.com
Con el siguiente software
Sistema operativo Windows 2003 Server
Servidor de Correo(Jes-1.6.1)
176
UN Servidor DNS ubicado en otro dominio con nombre Bizshield.com
Sistema operativo Windows 2003 Server
Servicio DNS
Servidor de Correo (Jes-1.6.1)
Dos switch’s para la interconexión de los computadores
Dos routers para la comunicación de las dos redes
Un computador cliente ubicado en la red con el dominio
Servicompu.com
Sistema operativo Windows XP SP2
Cliente de Correo (Outlook)
Un computador cliente ubicado en la red con el dominio bizshield.com
Sistema operativo Windows XP SP2
Cliente de Correo (Thunderbird)
5.3 Pruebas Unitarias e Integrales
Para comprobar el correcto funcionamiento del sistema se realizan 2 tipos de
pruebas:
177
Unitarias
Funcionales e Integrales
5.3.1 Pruebas Unitarias
Estas pruebas son realizadas con la herramienta JUnit y se enfocan en
comprobar el correcto funcionamiento de las clases calculadoras de variables
que forman parte del subsistema Bizshield Service.
Para cada una de las clases calculadoras de variables se codifica un caso de
prueba y se lo ejecuta automáticamente. El uso de la herramienta JUnit
ayuda automatizar el proceso de pruebas, específicamente permite ejecutar
un lote de pruebas de manera automática, el lote está conformado por clases
Java JUnit que implementan casos de pruebas específicos.
Las clases del lote de pruebas se encuentran el paquete
com.realmsoft.bizshield.test.calculadoresVariables. La clase que coordina la
ejecución del lote de pruebas es
com.realmsoft.bizshield.test.calculadoresVariables. AllTests.
178
package com.realmsoft.bizshield.test.calculadoresVariables;
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite(
"Test for com.realmsoft.bizshield.test.calculadoresVariables");
//$JUnit-BEGIN$
suite.addTestSuite(
CalculadorEsContenidoSoloArchivosAdjuntosTest.class);
suite.addTestSuite(CalculadorDominioRemitenteTest.class);
suite.addTestSuite(CalculadorIpOrigenTest.class);
suite.addTestSuite(CalculadorContentLanguajeTest.class);
suite.addTestSuite(CalculadorNumeroDestinatariosTest.class);
suite.addTestSuite(CalculadorJuegoCaracteresTest.class);
suite.addTestSuite(CalculadorBodyTest.class);
suite.addTestSuite(CalculadorSubjectTest.class);
suite.addTestSuite(CalculadorDireccionesDestinosTest.class);
suite.addTestSuite(CalculadorDominioRemitenteValidoTest.class);
suite.addTestSuite(
CalculadorExtensionesArchivosAdjuntosTest.class);
suite.addTestSuite(
CalculadorNombresArchivosAdjuntosTest.class);
suite.addTestSuite(CalculadorEstaSmtpToIgualMimeToTest.class);
suite.addTestSuite(CalculadorCorreoRemitenteTest.class);
suite.addTestSuite(CalculadorMimeFromTest.class);
//$JUnit-END$
return suite; } }
179
A continuación se muestra la ejecución de las pruebas unitarias de los
calculadores de variables.
1.Ejecutar el lote de pruebas.
2.Revisar el resultado de las pruebas
FIGURA 13. Ejecución de las pruebas unitarias de los calculadores devariables.
Se puede apreciar que se ejecutaron 15 casos de prueba, con un 100% de
éxito. Con esto queda comprobado como con JUnit se facilita las pruebas
unitarias con la ejecución automática de los casos de pruebas programados.
180
5.3.2 Pruebas Funcionales e Integrales
5.3.2.1 Pruebas Funcionales e Integrales Bizshield Web Administrator
Casos de uso probados en Bizshield Web Administrador
Caso de Uso: Configuración de Reglas
Código:CU-CONFIG-REGLA-ESCE001
Caso deUso:
CU-CONFIG-REGLA
Nombre: Creación de Regla sin ingresar campos obligatorios
Descripción En el Módulo de Configuración de Regla, opción de
creación de regla, se intenta crear una regla sin ingresar
todos los campos obligatorios
Entradas Salidas esperadas Salidas reales
Nombre deRegla: REGLA 1
Descripción deRegla: LA
REGLA 1
Contenido deRegla:
Se muestra el mensaje de
error "El campo Contenido
de Regla es obligatorio"
Igual a la salida esperada
Observaciones
Tabla 43. Caso de uso: Configuración de reglas
181
FIGURA 14. Caso de uso: Creación de regla sin ingresar camposobligatorios
182
FIGURA 15. Caso de uso: Edición de regla
Código: CU-CONFIG-REGLA-ESCE003Caso deUso:
CU-CONFIG-REGLA
Nombre: Creación de Regla utilizando las variables BODY,CONTENT_LANGUAGE, CORREO_REMITENTE
DescripciónEn el Módulo de Configuración de Regla, opción decreación de regla, se intenta crear una regla cuyaexpresión BRL contiene las variables BODY,CONTENT_LANGUAGE y CORREO_REMITENTE.
Entradas Salidas esperadas Salidas reales
Nombre de Regla: REGLA 23Descripción de Regla: LAREGLA 23Contenido de regla: BODY LIKE".*free.*" ANDCONTENT_LANGUAJE != "es-ec" ANDCORREO_REMITENTE LIKE"(.*sex.*)|(.*viagra.*)|(.*money.*)"
Se almacena laregla en el sistemay se presenta elmensaje "La Reglase creóexitosamente"
Igual a la salidaesperada
Observaciones
183
Código:CU-CONFIG-REGLA-ESCE004
CasodeUso:
CU-CONFIG-REGLA
Nombre:
Creación de Regla utilizando lasvariablesDIRECCIONES_DESTINOS,DOMINIO_REMITENTE,DOMINIO_REMITENTE_VALIDO
Descripción
En el Módulo de Configuración deRegla, opción de creación de regla,se intenta crear una regla cuyaexpresión BRL contiene lasvariablesDIRECCIONES_DESTINOS,DOMINIO_REMITENTE,DOMINIO_REMITENTE_VALIDO
Entradas Salidasesperadas Salidas reales
Nombre de Regla: REGLA24Descripción de Regla: LAREGLA 24Contenido de regla:DIRECCIONES_DESTINOSINTERSECT_LIKE{".*\.com\.ec",".*\.gov\.ec"} ANDDOMINIO_REMITENTE ="spam.com" ORDOMINIO_REMITENTE_VALIDO= "N"
Se almacenala regla en elsistema y sepresenta elmensaje "LaRegla se creóexitosamente"
Igual a la salidaesperada
Observaciones
184
FIGURA 16. Caso de uso: Creación de regla utilizando las variablesdirecciones_destinos, dominio_remitente, dominio_remitente_valido
Código: CU-CONFIG-REGLA-ESCE005 Caso deUso:
CU-CONFIG-REGLA
Nombre:Creación de Regla utilizando las variables ESTA_SMTP_TO_IGUAL_MIME_TO,ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS,EXTENCIONES_ARCHIVOS_ADJUNTOS
Descripción
En el Módulo de Configuración de Regla, opción de creación de regla, se intentacrear una regla cuya expresión BRL contiene las variablesESTA_SMTP_TO_IGUAL_MIME_TO,ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS,EXTENCIONES_ARCHIVOS_ADJUNTOS
Entradas Salidas esperadas Salidas realesNombre de Regla: REGLA 25Descripción de Regla: LA REGLA 25Contenido de regla:ESTA_SMTP_TO_IGUAL_MIME_TO = “N” ORES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS = “S” OREXTENCIONES_ARCHIVOS_ADJUNTOS CONTAINS “exe”
Se almacena la regla en elsistema y se presenta elmensaje "La Regla se creóexitosamente"
Igual a la salida esperada
Observaciones
185
FIGURA 17 . Caso de uso: creación de regla utilizando las variablesesta_smtp_to_igual_mime_to, es_contenido_solo_archivos_adjuntos,
extenciones_archivos_adjuntos
Código: CU-CONFIG-REGLA-ESCE006 Caso deUso:
CU-CONFIG-REGLA
Nombre: Creación de Regla utilizando las variables IP_ORIGEN,JUEGOS_CARACTERES, MIME_FROM
DescripciónEn el Módulo de Configuración de Regla, opción de creación de regla, seintenta crear una regla cuya expresión BRL contiene las variablesIP_ORIGEN, JUEGOS_CARACTERES, MIME_FROM
Entradas Salidas esperadas Salidas reales
Nombre de Regla: REGLA 26Descripción de Regla: LA REGLA26Contenido de regla: IP_ORIGEN= "172.18.9.225" ORJUEGOS_CARACTERESNOT_CONTAINS "es-ec" ORMIME_FROM ="[email protected]"
Se almacena la regla enel sistema y se presenta elmensaje "La Regla secreó exitosamente"
Igual a la salida esperada
Observaciones
186
FIGURA 18 . Caso de uso: Regla utilizando las variables IP_ORIGEN,JUEGOS_CARACTERES, MIME_FROM
Código: CU-CONFIG-REGLA-ESCE007 Caso deUso:
CU-CONFIG-REGLA
Nombre: Creación de Regla utilizando las variables NOMBRES_ARCHIVOS_ADJUNTOS,NUMERO_DESTINATARIOS, SUBJECT
DescripciónEn el Módulo de Configuración de Regla, opción de creación de regla, se intentacrear una regla cuya expresión BRL contiene las variablesNOMBRES_ARCHIVOS_ADJUNTOS, NUMERO_DESTINATARIOS, SUBJECT
Entradas Salidas esperadas Salidas reales
Nombre de Regla: REGLA 27Descripción de Regla: LAREGLA 27Contenido de regla:NOMBRES_ARCHIVOS_ADJUNTOS INTERSECT_LIKE {".*free.*"} ANDNUMERO_DESTINATARIOS > 5 ORSUBJECT = "viagra"
Se almacena la regla en elsistema y se presenta elmensaje "La Regla secreó exitosamente"
Igual a la salida esperada
Observaciones
187
FIGURA 19. Caso de uso: Creación de Regla utilizando las variablesNOMBRES_ARCHIVOS_ADJUNTOS, NUMERO_DESTINATARIOS,
SUBJECT
Código: CU-CONFIG-REGLA-ESCE008Caso deUso:
CU-CONFIG-REGLA
Nombre: Edición de ReglaDescripción En el Módulo de Configuración de Regla, opción de edición de regla, se intenta
editar una regla existente
Entradas Salidas esperadas Salidas realesNombre de Regla: SPAM - IPDEL REMITENTE INVALIDA ENCEDescripción de Regla: ESTAREGLA VERIFICA SI LADIRECCION IP DELREMITENTE DE UN CORREOENTRANTE ES INVALIDAContenido de regla: IP_ORIGENIN {"192.169.0.100","192.169.0.101","192.169.0.102"}
Se actualiza la regla en elsistema y se presenta elmensaje "La Regla seeditó exitosamente"
Igual a la salida esperada
Observaciones
188
FIGURA 20. Caso de uso: En el Módulo de Configuración de Regla, opciónde edición de regla, se intenta editar una regla existente.
Código: CU-CONFIG-REGLA-ESCE009Caso deUso:
CU-CONFIG-REGLA
Nombre: Consulta de ReglaDescripción En el Módulo de Configuración de Regla, opción de consulta de regla, se
intenta consultar una regla existente
Entradas Salidas esperadas Salidas realesNombre de Regla: SPAM -IP DEL REMITENTEINVALIDA EN CE
Se presentan los datosde la regla en elformulario
Igual a la salida esperada
189
FIGURA 21. Caso de uso: Se intenta consultar una regla existente
Código: CU-CONFIG-REGLA-ESCE010Caso deUso:
CU-CONFIG-REGLA
Nombre: Eliminación de Regla
DescripciónEn el Módulo de Configuración de Regla, opción de eliminación de regla,
se intenta eliminar una regla existente
Entradas Salidas esperadas Salidas reales
Nombre de Regla: REGLA 27
Se elimina la regla en el
sistema y se presenta el
mensaje "La Regla se
eliminó exitosamente"
Igual a la salida esperada
Observaciones
190
FIGURA 22.Caso de uso: Eliminación de regla Caso de Uso: Configuraciónde Acciones
Código: CU-CONFIG-ACCION-ESCE001Caso deUso:
CU-CONFIG-ACCION
Nombre: Creación de Acción sin ingresar campos obligatorios
Descripción En el Módulo de Configuración de Acción, opción de creación de acción, seintenta crear una acción sin ingresar todos los campos obligatorios
Entradas Salidas esperadas Salidas realesNombre de Acción: ACCION 2Tipo de Acción: AÑADIRMENSAJE EN BODYParámetro Mensaje HTML:Parámetro Mensaje TXT:
Se muestra el mensajede error "Debe ingresartodos los parámetros dela acción"
Igual a la salida esperada
Observaciones
191
FIGURA 23. Caso de uso: Creación de acción sin ingresar todos losparametros
Código: CU-CONFIG-ACCION-ESCE002 Caso deUso:
CU-CONFIG-ACCION
Nombre: Creación de Acción utilizando un nombre ya existente
Descripción En el Módulo de Configuración de Acción, opción de creación de acción, seintenta crear una acción con un nombre ya existente
Entradas Salidas esperadas Salidas reales
Nombre de Acción: ACCION 1Tipo de Acción: ACEPTARCORREO
Se muestra el mensaje deerror "El nombre deacción ingresado yaexiste, debe utilizar otro"
Igual a la salida esperada
Observaciones
192
FIGURA 24. Caso de uso: Creación de Acción utilizando un nombre yaexistente
Código: CU-CONFIG-ACCION-ESCE003 Caso deUso:
CU-CONFIG-ACCION
Nombre: Creación de Acción de Tipo ACEPTAR CORREO
DescripciónEn el Módulo de Configuración de Acción, opción de creación deacción, se intenta crear una acción cuyo tipo de acción esACEPTAR CORREO
Entradas Salidas esperadas Salidas reales
Nombre de Acción:ACCION 2Tipo de Acción: ACEPTARCORREO
Se almacena laacción en el sistemay se presenta elmensaje "La acciónse creóexitosamente"
Igual a la salida esperada
Observaciones
193
FIGURA 25. Caso de uso: Creación de Acción de Tipo ACEPTARCORREO
Código: CU-CONFIG-ACCION-ESCE008 Caso deUso:
CU-CONFIG-ACCION
Nombre: Edición de Acción
Descripción En el Módulo de Configuración de Acción, opción de edición deacción, se intenta editar una acción existente
Entradas Salidas esperadas Salidas realesNombre de Acción: SPAM -REDIRECCIONARCORREOTipo de Acción:REDIRECCIONARParámetro LISTACUENTAS CORREO DEREDIRECCION:[email protected]
Se actualiza la acciónen el sistema y sepresenta el mensaje"La acción se editóexitosamente"
Igual a la salida esperada
Observaciones
194
FIGURA 26. Caso de uso: En el Módulo de Configuración de Acción, opciónde edición de acción, se intenta editar una acción existente
Código: CU-CONFIG-ACCION-ESCE009 Caso deUso:
CU-CONFIG-ACCION
Nombre: Consulta de Acción
Descripción En el Módulo de Configuración de Acción, opción de consulta deacción, se intenta consultar una acción existente
Entradas Salidas esperadas Salidas reales
Nombre de Acción: BZS-HAM-ACEPTAR CORREO
Se presentan los datos de la acción enel formulario
Igual a la salida esperada
Observaciones
195
FIGURA 27. Caso de uso se intenta consultar una acción existente
Código: CU-CONFIG-ACCION-ESCE010Caso deUso:
CU-CONFIG-ACCION
Nombre: Eliminación de AcciónDescripción En el Módulo de Configuración de Acción, opción de eliminación
de acción, se intenta eliminar una acción existenteEntradas Salidas esperadas Salidas reales
Nombre de Acción: CTRL-CUARENTENA DEARCHIVOS ADJUNTOSEJECUTABLE
Se elimina la acciónen el sistema y sepresenta el mensaje"La acción se eliminóexitosamente"
Igual a la salida esperada
Observaciones
196
FIGURA 28. Caso de uso: En el Módulo de Configuración de Acción, opciónde eliminación de acción, se intenta eliminar una acción existente se intenta
consultar una acción existente
Código: CU-GESTION-USUARIO-ESCE001 Caso de Uso:CU-GESTION-USUARIO
Nombre: Creación de Usuario sin ingresar campos obligatoriosDescripción En el Módulo de Gestión de Usuarios, opción de creación de usuario, se
intenta crear un usuario sin ingresar todos los campos obligatoriosEntradas Salidas esperadas Salidas reales
Usuario:Contraseña:Confirme Contraseña:Nombres: JohannApellidos: PinargoteDirección:Teléfono:Email:
Se muestra el mensaje deerror "El campo usuarioes obligatorio"
Igual a la salida esperada
Observaciones
197
FIGURA 29. Caso de uso: Creación de Usuario sin ingresar camposobligatorios
Código: CU-GESTION-USUARIO-ESCE002 Caso de Uso:CU-GESTION-USUARIO
Nombre: Creación de Usuario utilizando un nombre de usuario ya existenteDescripción En el Módulo de Gestión de Usuarios, opción de creación de usuario, se intenta
crear un usuario con un nombre de usuario ya existenteEntradas Salidas esperadas Salidas reales
Usuario: elfstoneContraseña: 12345678Confirme Contraseña:12345678Nombres: JohannApellidos: PinargoteDirección: SurTeléfono: 042440633Email: [email protected]
Se muestra el mensaje deerror "El nombre deusuario ingresado yaexiste, debe utilizar otro"
Igual a la salida esperada
Observaciones
198
FIGURA 30. Caso de uso: Creación de Usuario mensaje de usuarioexixtente.
Código: CU-GESTION-USUARIO-ESCE004 Caso de Uso:CU-GESTION-USUARIO
Nombre: Edición de usuarioDescripción En el Módulo de Gestión de Usuarios, opción de edición de usuario, se
intenta editar un usuario existenteEntradas Salidas esperadas Salidas reales
Usuario: galcivarContraseña: 12345678Confirme Contraseña:12345678Nombres: GeorgeApellidos: AlcivarDirección: NorteTeléfono: 042440633Email: [email protected]
Se actualiza el usuarioen el sistema y sepresenta el mensaje "Elusuario se editóexitosamente"
Igual a la salida esperada
Observaciones
199
FIGURA 31. Caso de uso: Se intenta editar un usuario existente
Código:CU-GESTION-USUARIO-ESCE005
Caso deUso:
CU-GESTION-USUARIO
Nombre: Consulta de usuarioDescripción En el Módulo de Gestión de Usuarios, opción de consulta de
usuario, se intenta consultar un usuario existenteEntradas Salidas esperadas Salidas reales
Usuario: elfstone Se presentan losdatos del usuario enel formulario
Igual a la salida esperada
Observaciones
200
FIGURA 32. Caso de uso: Se intenta consultar un usuario existente.
201
FIGURA 33. Caso de uso Se intenta eliminar un usuario existente.
Código: CU-GESTION-USUARIO-ESCE006 Caso de Uso:CU-GESTION-USUARIO
Nombre: Eliminación de usuario
Descripción En el Módulo de Gestión de Usuarios, opción de eliminación de usuario,se intenta eliminar un usuario existente
Entradas Salidas esperadas Salidas reales
Usuario: gandalf
Se elimina el usuario en elsistema y se presenta elmensaje "El usuario seeliminó exitosamente"
Igual a la salida esperada
Observaciones
202
5.3.2.3 Prueba De Correo Entrante
Caso de Prueba 1: SUBJECT SOSPECHOZO EN CORREO ENTRANTE
Enviando Correo Electrónico
FIGURA 34. Caso de Prueba 1: SUBJECT sospechoso en correo entrante
Información registrada en la base de datos
Variables calculadas
203
FIGURA 35. Caso de Prueba 1: Variables calculadasCorreo Encolado con Id Correo 4
FIGURA 36. Caso de Prueba 1: Correo Encolado con Id Correo 4
204
Resultado de la Evaluación de Reglas
FIGURA 37. Caso de Prueba 1: Resultado de la Evaluación de ReglasCaso de Prueba 2: Body Sospechoso en correo entrante
FIGURA 38. Caso de Prueba 2: Body Sospechoso en correo entrante
205
Información registrada en la base de datos
Variables calculadas
FIGURA 39. Caso de Prueba 2: Body Sospechoso en correo entranteCorreo Encolado con Id Correo 3
FIGURA 40. Caso de Prueba 2: Correo Encolado con Id Correo 3
206
Resultado de Evaluación de Reglas
FIGURA 41. Caso de Prueba 2: Resultado de Evaluación de Reglas
FIGURA 42. Caso de Prueba 3: From Sospechoso
207
Información registrada en la base de datos
Variables calculadas
FIGURA 43. Caso de Prueba 3: Información registrada en la base de datosCorreo Encolado con Id Correo 5
FIGURA 44. Caso de Prueba 3: Correo Encolado con Id Correo 5
208
Resultado de Evaluación de Reglas
FIGURA 45. Caso de Prueba 3: Resultado de Evaluación de Reglas
FIGURA 46. Caso de Prueba 4: SMTP FROM sospechoso.
209
Información registrada en la base de datos
Variables calculadas
FIGURA 47. Caso de Prueba 4: Información registrada en la base de datos
FIGURA 48. Caso de Prueba 4: Correo Encolado con Id Correo 8
210
Resultado de Evaluación de Reglas
FIGURA 49. Caso de Prueba 4: Resultado de Evaluación de Reglas
FIGURA 50. Caso de Prueba 5: Lenguaje Inválido
211
Información registrada en la base de datos
Variables calculadas
FIGURA 51. Caso de Prueba 5: Información registrada en la base de datos
Correo Encolado con Id Correo 12
FIGURA 52. Caso de Prueba 5: Correo Encolado con Id Correo 12
212
Resultado de Evaluación de Reglas
FIGURA 53. Caso de Prueba 5: Resultado de Evaluación de Reglas
Mail de Respuesta
FIGURA 54. Caso de Prueba 5: Mail de Respuesta
213
FIGURA 55. Caso de Prueba 6: Juego de Caracteres Inválido
Información registrada en la base de datos
Variables calculadas
Figura 55. Caso de Prueba 6: Información registrada en la base de datos
214
Correo Encolado con Id Correo 13
Figura 56. Caso de Prueba 6: Correo Encolado con Id Correo 13
Resultado de Evaluación de Reglas
FIGURA 56. Caso de Prueba 6: Resultado de Evaluación de Reglas
215
Mail de Respuesta
FIGURA 57. Caso de Prueba 6: Resultado de Evaluación de Reglas
5.3.2.2 Prueba De Correo Saliente
Caso 1: Subject Sospechoso en correo saliente
FIGURA 58. Caso 1: Subject Sospechoso en correo saliente
216
Información registrada en la base de datos
Variables calculadas
FIGURA 59. Caso 1: Información registrada en la base de datosCorreo encolado con ID 6
FIGURA 60. Caso 1: Correo encolado con ID 6
217
Resultados de Evaluación
FIGURA 61. Caso 1: Correo encolado con ID 6
Caso 2: Prueba de Body Sospechoso
FIGURA 62. Caso 2: Prueba de Body Sospechoso
218
Información registrada en la base de datos
Variables calculadas
FIGURA 63. Caso 2: Información registrada en la base de datos
FIGURA 64. Caso 2: Correo encolado con id 16
219
Resultado de Evaluación
FIGURA 65. Caso 2: Resultado de Evaluación
Caso de Prueba 3: Lenguaje Inválido
Cambio del lenguaje
220
FIGURA 66. Caso de Prueba 3: Lenguaje Inválido
221
FIGURA 67. Envio de correo con lenguaje invalido
Información registrada en la base de datos
Variables calculadas
FIGURA 68. Caso de Prueba 3: Información registrada en la base de datos
222
Correo Encolado con id 17
FIGURA 69. Caso de Prueba 3: Correo Encolado con id 17
Resultado de Evaluación
FIGURA 70. Caso de Prueba 3: Resultado de Evaluación
223
Correo de Respuesta
FIGURA 71. Caso de Prueba 3: Correo de Respuesta
Caso de Prueba 4: Dominio remitente invalido
Envió de correo vía telnet
FIGURA 72. Caso de Prueba 4: Dominio remitente invalido
224
Información registrada en la base de datos
Variables calculadas
FIGURA 73. Caso de Prueba 4: Información registrada en la base de datos
Correo Encolado con Id 25
FIGURA 74. Caso de Prueba 4: Correo Encolado con Id 25
225
Resultados de Evaluación
FIGURA 75. Caso de Prueba 4: Resultados de Evaluación
FIGURA 76. Caso de Prueba 5: Archivos adjuntos sospechoso en correosaliente
226
Información registrada en la base de datos
Variables calculadas
FIGURA 77. Caso de Prueba 5: Información registrada en la base de datos
Correo Encolado con Id 81
FIGURA 78. Caso de Prueba 5: Correo Encolado con Id 81
227
Resultado de Evaluacion
FIGURA 79. Caso de Prueba 5: Resultado de Evaluacion
FIGURA 80. Caso de Prueba 5: Correo con información de archivospeligrosos
228
CAPÍTULO 6
6. RECOMENDACIONES Y
CONCLUSIONES
6.1 RecomendacionesEn Bizshield Web Administrator, en las
opciones de Configuración de Reglas,
Configuración de Acciones y Gestión de
Usuarios se presenta una lista con las
reglas, acciones y usuarios existentes en
el sistema. Esta lista podría ser
reemplazada por un cuadro de búsqueda
dinámico, que presente resultados según
el texto ingresado.
229
En Bizshield Web Adminstrator, el Módulo de Reportes presenta los
resultados en forma tabular, con opciones de ordenamiento, paginación y
exportación. Esto se podría mejorar con la inclusión de gráficos estadísticos
basados en los resultados de la búsqueda.
Se podría reemplazar las opciones de Configuración de Reglas y
Configuración de Acciones de Bizshield Web Administrator con el
administrador de reglas de drools, Bussiness Rules Management System
(BRMS). Es el componente de Jboss Rules que permite gestionar,
almacenar, clasificar, modificar y desplegar en caliente reglas de negocio,
que podrán ser invocadas vía servicios web desde aplicaciones Java.
Proporciona un interfaz Web, que facilita la definición de reglas a personas
que no trabajan con habitualmente con IDES de desarrollo, principalmente
Analista de Negocio y Expertos en Reglas.
Actualmente en la Consulta de Correo Analizado se muestra el contenido del
correo en formato MIME texto, se puede mejorar incluyendo un visualizador
MIME que permita ver de una forma estructurada y amigable el contenido del
correo electrónico y sus archivos adjuntos.
230
En futuras versiones se debería implementar el filtro bayesiano. Esta
estrategia analiza el contenido del correo entrante y en base a las reglas
matemáticas del Teorema de Bayes decide si el correo es o no spam.
El filtrado Bayesiano se basa en el principio de que la mayoría de los
sucesos están condicionados y que la probabilidad de que ocurra un suceso
en el futuro puede ser deducido de las apariciones previas de ese suceso.
Esta misma técnica se puede utilizar para clasificar spam. Si algún patrón de
texto se encuentra a menudo en el spam pero no en el correo legítimo,
entonces sería razonable asumir que este correo es probablemente spam.
Bizshield permite analizar el nombre y la extensión de un archivo adjunto,
pero no realiza una revisión del contenido del mismo. En futuras versiones
se podría incluir un análisis antivirus utilizando un API de algunos de los
antivirus del mercado.
Para poder llegar a las pequeñas empresas se debe poder parametrizar el
número de usuarios de correo electrónico, para el caso de empresas con un
número limitado de usuarios el precio del producto podría ser menor.
231
6.2 Conclusiones
A diferencia de otros sistemas antispam del mercado, Bizshield Antispam
System no limita los tipos de filtro que puede configurar un usuario a Lista
Blanca y Lista Negra, sino que permite definir cualquier tipo de combinación
posible de elementos del correo electrónico para obtener reglas más
potentes y precisas que permiten un filtrado más granular, a través de un
lenguaje propio llamado Bizshield Rules Language.
Bizshield Antispam System permite realizar la configuración del sistema a
través de Bizshield Web Administrator, la cual, al ser una aplicación web, no
necesita instalación por cada usuario y además puede ser accedida desde
cualquier ubicación y desde cualquier computadora que tenga instalado un
navegador de internet, sin requisitos de sistema operativo u otro software.
Bizshield Antispam System es independiente del sistema operativo. Aunque
la distribución por defecto es bajo un sistema Linux, podría instalarse sobre
cualquier sistema operativo. Al no tener requisitos de alguna arquitectura
específica, Bizshield Antispam Appliance es independiente de la
infraestructura de la empresa lo que asegura su funcionamiento sin
problemas de compatibilidad.
232
Bizshield Antispam Appliance también provee una lista de direcciones IP
negra del sistema, la cual se actualiza automáticamente y no tiene costo
alguno para la empresa cliente.
Bizshield Antispam Appliance ofrece un tipo de licenciamiento por servidor, el
cual es más conveniente para las empresas que el tradicional licenciamiento
por cliente. Un una vez adquirido el producto este puede ser usado sin
importar el número de usuarios de la organización.
En resumen, Bizshield Antispam Appliance es una alternativa completa
funcional, técnica y económicamente para las empresas medianas y grandes
que desean protegerse del correo electrónico no deseado. Es una solución
no intrusiva, que no necesita instalarse sobre ni modificar el servidor de
correo de la empresa, además funciona con cualquier servidor de correo ya
que trabaja a nivel de protocolos estándares como SMTP y POP3. Su
sistema único de detección de spam mediante la alimentación de una base
de heurística ajustada a las necesidades de la empresa proporciona mucha
flexibilidad, potencia y control para el tratamiento del correo electrónico no
deseado.
233
ANEXOS
234
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Appliance Antispam”
PROYECTO DE TESIS DE GRADO
6TO CURSO DE GRADUACIÓN
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
ALCIVAR VILLAMAR GEORGE HUMBERTO
PINARGOTE SAVINIEN FREDDY JOHANN
TOALA MOSQUERA DAVID LEONEL
GUAYAQUIL – ECUADOR
Año: 2009
II
AGRADECIMIENTO
Agradezco a todas las personas que me
brindaron su apoyo, para lograr culminar
con este sueño. Entre ellos mis padres, mis
amigos y catedráticos que impartieron sus
conocimientos.
Alcívar Villamar George Humberto
III
AGRADECIMIENTO
Agradezco a mis padres, por el apoyo
incondicional que me brindaron a lo largo
de la carrera. A mis profesores y
compañeros, que por medio de las
enseñanzas, investigaciones y discusiones,
me hicieron crecer en conocimiento y
madurar como persona.
Pinargote Savinién Freddy Johann
IV
AGRADECIMIENTO
En agradecimiento a la Universidad Estatal
de Guayaquil, Facultad de Ciencias Físicas
y Matemáticas, en especial a su Carrera de
Ingeniería en Sistemas Computacionales,
por haberme forjado para ser un
profesional competente, listo para afrontar
los desafíos laborales y profesionales.
Toala Mosquera David Leonel
V
DEDICATORIA
Dedico todo este trabajo a mi padre a mis
hermanos que los quiero tanto, y a mi
querida madre Piedad Villamar.
Alcívar Villamar George Humberto
VI
DEDICATORIA
Dedico este trabajo a mi equipo del
proyecto de grado y a todas aquellas
personas quienes buscan usar la ciencia
en pos de ayudar a los demás.
Pinargote Savinien Freddy Johann
VII
DEDICATORIA
Este trabajo esta dedicado a mis padres
por haberme ensañado que la
perseverancia es la clave del éxito, que el
esfuerzo constante nos convierte día a día
en mejores seres humanos, capaces de
enfrentar la vida con valentía
Toala Mosquera David Leonel
VIII
TRIBUNAL DE GRADUACIÓN
Presidente del Tribunal Primer Vocal
Segundo Vocal Secretario
IX
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”.
(Reglamento de Graduación de la Carrera de Ingeniería en Sistemas
Computacionales, Art. 26).
______________________________ ____________________________
George Humberto Alcívar Villamar Pinargote Savinién Freddy Johann
C.I: 0913524831 C.I: 0911170991
_____________________________
Toala Mosquera David Leonel
C.I: 0923179980
X
ÍNDICE GENERAL
AGRADECIMIENTO .................................................................................................................II
DEDICATORIA .........................................................................................................................v
TRIBUNAL DE GRADUACIÓN............................................................................................ VIII
DECLARACIÓN EXPRESA ................................................................................................... IX
INDICE GENERAL .................................................................................................................. X
1. INTRODUCCIÓN...........................................................................................................................1
1.1 OBJETIVO DE ESTE MANUAL .................................................................................................2
1.2 A QUIÉN VA DIRIGIDO ESTE MANUAL...................................................................................2
1.3 LO QUE DEBE CONOCER .........................................................................................................2
2.0 BIZSHIELD WEB ADMINISTRATOR ........................................................................................3
2.1 SELECCIÓN DE MÓDULO .........................................................................................................4
2.2 LOGIN ............................................................................................................................................5
2.3 MÓDULO DE CONFIGURACIÓN ..............................................................................................6
2.4 CONFIGURACIÓN DE REGLAS ...............................................................................................8
2.4.1 CREACIÓN DE REGLA ...................................................................................................................12
2.4.2 EDICIÓN DE REGLA ......................................................................................................................13
2.4.3 CONSULTA DE REGLA..................................................................................................................14
2.4.4 ELIMINACIÓN DE REGLA .............................................................................................................15
2.5 CONFIGURACIÓN DE ACCIONES...................................................................................................16
2.5.1 CREACIÓN DE ACCIÓN ................................................................................................................20
2.5.2 EDICIÓN DE ACCIÓN............................................................................................................21
2.5.3 CONSULTA DE ACCIÓN...............................................................................................................22
XI
2.5.4 ELIMINACIÓN DE ACCIÓN ..........................................................................................................23
2.6 GESTIÓN DE USUARIOS ......................................................................................................24
2.6.1 CREACIÓN DE USUARIO .............................................................................................................27
2.6.2 EDICIÓN DE USUARIO ................................................................................................................28
2.6.3 CONSULTA DE USUARIO.............................................................................................................29
2.6.4 ELIMINACIÓN DE USUARIO ........................................................................................................30
2.7 MÓDULO DE REPORTES......................................................................................................312.7.1 REPORTE DE CORREOS ANALIZADOS ..........................................................................33
2.7.2 REPORTE DE REGLAS EVALUADAS ...............................................................................40
2.7.3 REPORTE DE DOMINIOS SPAM ........................................................................................44
MANUAL TÉCNICO ............................................................................................................................49
2. INTRODUCCIÓN.........................................................................................................................49
2.1 OBJETIVO DE ESTE MANUAL ............................................................................................50
2.2 A QUIÉN VA DIRIGIDO ESTE MANUAL.............................................................................50
2.3 BIZSHIELD WEB ADMINISTRATOR ...................................................................................50
2.4 AUTENTICACIÓN EN BIZSHIELD WEB ADMINISTRATOR ...........................................51
2.4.1 AUTENTICACIÓN BASADA EN FORMULARIO ................................................................52
2.5 AUTORIZACIÓN......................................................................................................................55
2.6 VENTAJAS DEL MECANISMO DE AUTENTICACIÓN DE BIZSHIELD WEB
ADMINISTRATOR...............................................................................................................................56
2.7 ANTLR......................................................................................................................................57
2.8 INTRODUCCIÓN AL ANÁLISIS LÉXICO Y SINTÁCTICO ..............................................57
2.9 ANÁLISIS LÉXICO Y SINTÁCTICO CON ANTLR ............................................................61
2.10 ARCHIVO DE GRAMÁTICA DE ANTLR..........................................................................62
2.10.1 OPCIONES GENERALES DEL FICHERO......................................................................63
2.10.2 DEFINICIÓN DE LOS ANALIZADORES .........................................................................64
2.10.3 REGLAS Y TOKENS DE ANTLR......................................................................................64
2.10.4 ACCIONES DE GRAMÁTICA DE ANTLR .......................................................................66
2.10.5 EXCEPCIONES EN ANTLR ..............................................................................................67
2.11 ANÁLISIS DEL ARCHIVO DE GRAMÁTICA DE BRL ...................................................68
2.11.1 ARCHIVO DE GRAMÁTICA DE BRL ...............................................................................70
2.11.2 BIZSHIELD RULES LANGUAGE (BRL) .........................................................................77
2.11.3 TIPOS DE DATOS DE BRL ...............................................................................................77
2.11.3.1 ALFANUMERICO ............................................................................................................78
XII
2.11.3.2 ALFANUMERICO – CONJUNTO..................................................................................78
2.11.3.3 NUMERICO ......................................................................................................................78
2.11.3.4 EXPRESION REGULAR ................................................................................................78
2.11.3.5 EXPRESION REGULAR CONJUNTO .........................................................................78
2.11.3.6 LITERALES DE BRL .......................................................................................................78
2.12 VARIABLES DE BRL ......................................................................................................80
2.12.1 IP_ORIGEN (ALFANUMERICO / EXPRESION REGULAR) ....................................81
2.12.2 CORREO_REMITENTE (ALFANUMERICO / EXPRESION REGULAR) ...............81
2.12.3 DOMINIO_REMITENTE (ALFANUMERICO / EXPRESION REGULAR) ...............81
2.12.4 SUBJECT (ALFANUMERICO / EXPRESION REGULAR)........................................81
2.12.5 BODY (ALFANUMERICO / EXPRESION REGULAR) ..............................................81
2.12.6 DIRECCIONES_DESTINOS (ALFANUMERICO – CONJUNTO / EXPRESION
REGULAR - CONJUNTO) .................................................................................................................82
2.12.7 NUMERO_DESTINATARIOS (NUMERICO)...............................................................82
2.12.8 MIME_FROM (ALFANUMERICO / EXPRESION REGULAR) .................................82
2.12.9 CONTENT_LANGUAJE (ALFANUMERICO / EXPRESION REGULAR) ...............82
2.12.10 NOMBRES_ARCHIVOS_ADJUNTOS (ALFANUMERICO - CONJUNTO /
EXPRESION REGULAR - CONJUNTO) .........................................................................................83
2.12.11 EXTENCIONES_ARCHIVOS_ADJUNTOS (ALFANUMERICO – CONJUNTO /
EXPRESION REGULAR - CONJUNTO) .........................................................................................83
2.12.12 ESTA_SMTP_TO_IGUAL_MIME_TO (ALFANUMERICO).......................................83
2.12.13 ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS (ALFANUMERICO) .............83
2.12.14 DOMINIO_REMITENTE_VALIDO (ALFANUMERICO) .............................................83
2.12.15 JUEGOS_CARACTERES (ALFANUMERICO - CONJUNTO / EXPRESION
REGULAR - CONJUNTO) .................................................................................................................84
2.13 OPERADORES DE BRL ................................................................................................84
2.13.1 PARENTESIS_DE_APERTURA ....................................................................................84
2.13.2 PARENTESIS_DE_CIERRE...........................................................................................84
2.13.3 CONJUNCION ..................................................................................................................84
2.13.4 DISYUNCION ....................................................................................................................85
2.13.5 IGUAL.................................................................................................................................85
2.13.6 DESIGUAL.........................................................................................................................85
2.13.7 MAYOR_QUE ...................................................................................................................85
2.13.8 MAYOR_O_IGUAL_QUE ................................................................................................85
XIII
2.13.9 MENOR_QUE ...................................................................................................................86
2.13.10 MENOR_O_IGUAL_QUE...............................................................................................86
2.13.11 FORMA PARTE ...............................................................................................................86
2.13.12 NO FORMA PARTE ........................................................................................................86
2.13.13 CADENA PARECIDA......................................................................................................86
2.13.14 CADENA NO PARECIDA...............................................................................................87
2.13.15 CONTIENE .......................................................................................................................87
2.13.16 NO CONTIENE ................................................................................................................87
2.13.17 INTERSECTA...................................................................................................................87
2.13.18 NO SE INTERSECTA ....................................................................................................87
2.13.19 INTERSECTA CADENAS PARECIDAS .....................................................................88
2.13.20 NO INTERSECTA CADENAS PARECIDAS ..............................................................88
2.14 EJEMPLOS DE REGLAS EN BRL ..............................................................................88
2.15 HIBERNATE .....................................................................................................................89
2.16 DISPLAYTAG ...................................................................................................................94
2.17 ARCHIVO DISPLAYTAG.PROPERTIES DE BIZSHIELD WEB
ADMINISTRATOR...............................................................................................................................95
2.18 DESCRIPTOR DE DESPLIEGUE DE BIZSHIELD WEB ADMINISTRATOR
(WEB.XML)...........................................................................................................................................98
2.19 DETALLE DE LAS DIFERENTES CLASES UTILIZADAS EN EL SISTEMA
BIZSHIELD .........................................................................................................................................102
2.20 CONFIGURACION PARA PRUEBAS ........................................................................247
2.21 INSTALACION DE BIZSHIELD SERVICE.................................................................247
2.22 ACTUALIZACIÓN DE BLACK LIST UPDATE. .........................................................249
2.23 INSTALACION DE MYSQL EN LINUX ......................................................................249
2.24 INSTALACIÓN DEL JDK (J2SE).................................................................................253
2.25 INSTALACIÓN DE TOMCAT .......................................................................................254
2.26 CONFIGURACIÓN DEL SERVIDOR DNS EN LA EMPRESA1.COM ..................255
2.27 CONFIGURACIÓN DEL SERVIDOR DE CORREO JES EN LA EMPRESA 1. ..262
2.28 CONFIGURACIÓN DE SERVIDOR DNS EN LA EMPRESA2...............................267
2.29 CONFIGURACIÓN DE EL SERVIDOR DE CORREO JES EN LA EMPRESA2.270
XIV
ÍNDICE DE FIGURAS
FIGURA 1. PÁGINA DE SELECCIÓN DE MÓDULO DE BWA ........................................................... 4
FIGURA 2. PÁGINA DE LOGIN ................................................................................................... 5
FIGURA 3. PÁGINA DE ERROR DE LOGIN ................................................................................... 6
FIGURA 4. MÓDULO DE CONFIGURACIÓN.................................................................................. 7
FIGURA 5. OPCIONES DE CONFIGURACIÓN................................................................................ 8
FIGURA 6. ICONO DE CONFIGURACIÓN DE REGLAS .................................................................. 8
FIGURA 7. PÁGINA DE CONFIGURACIÓN DE REGLAS................................................................. 9
FIGURA 8. LINK DE INICIO EN CONFIGURACIÓN DE REGLAS..................................................... 10
FIGURA 9. FORMULARIO DE CREACIÓN DE REGLAS ............................................................... 13
FIGURA 10. FORMULARIO DE EDICIÓN DE REGLAS................................................................... 14
FIGURA 11. FORMULARIO DE CONSULTA DE REGLAS ............................................................... 15
FIGURA 12. FORMULARIO DE ELIMINACIÓN DE REGLAS............................................................ 16
FIGURA 13. PÁGINA DE CONFIGURACIÓN DE ACCIONES ........................................................... 17
FIGURA 14. ÍCONOS DE CONFIGURACIÓN DE ACCIONES........................................................... 18
XV
FIGURA 15. LINK DE INICIO EN LA PANTALLA DE CONFIGURACIÓN DE ACCIONES ......................... 18
FIGURA 16. FORMULARIO DE CREACIÓN DE ACCIONES ............................................................ 21
FIGURA 17. FORMULARIO DE EDICIÓN DE ACCIONES ............................................................... 22
FIGURA 18. FORMULARIO DE CONSULTA DE ACCIONES............................................................ 23
FIGURA 19. FORMULARIO DE ELIMINACIÓN DE ACCIONES......................................................... 24
FIGURA 20. PÁGINA DE GESTIÓN DE USUARIOS ...................................................................... 25
FIGURA 21. ICONOS DE GESTIÓN DE USUARIOS ...................................................................... 26
FIGURA 22. LINK DE INICIO DE GESTIÓN DE USUARIOS............................................................. 26
FIGURA 23 FORMULARIO DE CREACIÓN DE USUARIOS ........................................................... 28
FIGURA 24. FORMULARIO DE EDICIÓN DE USUARIOS .............................................................. 29
FIGURA 25. FORMULARIO DE CONSULTA DE USUARIOS........................................................... 30
FIGURA 26 FORMULARIO DE ELIMINACIÓN DE USUARIO.......................................................... 31
FIGURA 27. PÁGINA DE MODULO DE REPORTES ...................................................................... 32
FIGURA 28. ÍCONOS DEL MÓDULO DE REPORTES Y AYUDA ..................................................... 33
FIGURA 29. REPORTE DE CORREOS ANALIZADOS................................................................... 34
FIGURA 30. ICONO DE CONSULTAR CORREOS ANALIZADOS .................................................... 35
FIGURA 31. LINK DE INICIO EN REPORTE DE CORREO ANALIZADOS......................................... 35
FIGURA 32. RESULTADO DEL REPORTE DE CORREOS ANALIZADOS ........................................ 37
FIGURA 33. VISUALIZADOR DE CORREOS .............................................................................. 38
FIGURA 34. VISUALIZACIÓN DEL CORREO POR MEDIO DE OUTLOOK EXPRESS.......................... 39
FIGURA 35. DIÁLOGO DE EXPORTACIÓN DE RESULTADOS DEL REPORTE DE CORREOS
ANALIZADOS ………………………………………………………………………………………..…40
FIGURA 36 REPORTE DE REGLAS EVALUADAS....................................................................... 40
FIGURA 37. ICONO DE CONSULTAR REPORTE DE REGLAS EVALUADAS..................................... 41
FIGURA 38. EL LINK INICIO EN REPORTE DE REGLAS EVALUADAS............................................. 42
FIGURA 39. RESULTADOS DEL REPORTE DE REGLAS EVALUADAS ............................................ 43
FIGURA 40. DIÁLOGO DE EXPORTACIÓN DE RESULTADOS DEL REPORTE DE REGLAS EVALUADAS44
FIGURA 41. REPORTE DE DOMINIOS SPAM .............................................................................. 45
FIGURA 42. ICONO DE CONSULTAR REPORTE DE DOMINIOS SPAM ............................................ 46
FIGURA 43. EL LINK INICIO EN REPORTE DE DOMINIOS SPAM. ................................................... 46
FIGURA 44. RESULTADOS DEL REPORTE DE DOMINIOS SPAM.................................................... 48
FIGURA 45. DIÁLOGO DE EXPORTACIÓN DE RESULTADOS DEL REPORTE DE DOMINIOS SPAM ...... 48
FIGURA 46. CREACIÓN DE ZONA CON DOMINIO EMPRESA1.COM ............................................. 255
FIGURA 47. CREACIÓN DE LOS REGISTROS TIPO A Y MX........................................................ 256
FIGURA 48. REGISTRO TIPO MX CREADO.............................................................................. 257
XVI
FIGURA 49. PANTALLA DE PROPIEDADES DE EMPRESA1.COM.................................................. 258
FIGURA 50. CUADRO DE EXAMINAR EN PROPIEDADES DE EMPRESA1.COM .............................. 259
FIGURA 51. CONFIGURACIÓN DE LA IP Y DOMINIO DEL SERVIDOR 1 ........................................ 260
FIGURA 52. ANEXAR SUFIJO DNS DE EMPRESA1.COM. .......................................................... 261
FIGURA 53. EJECUTABLE PARA INSTALAR EL JDK. .................................................................. 262
FIGURA 54. CARPETA DEL PROGRAMA JES EN LA PARTICIÓN C: ............................................. 262
FIGURA 55. ARCHIVO MAIL.BAT DEL SERVIDOR DE CORREO JES. ............................................ 263
FIGURA 56. LUGAR DE UBICACIÓN DEL MAIL.BAT EN EL INICIO DE WINDOWS. .......................... 264
FIGURA 57. ARCHIVOS DE CONFIGURACIÓN DEL SERVIDOR JES. ............................................ 264
FIGURA 58. ARCHIVO DE CONFIGURACIÓN MAIL.CONF EN LA EMPRESA1.COM.......................... 265
FIGURA 59. ARCHIVO DE CONFIGURACIÓN DE MAIL.CONF PARTE 2......................................... 266
FIGURA 60. ARCHIVO DE CONFIGURACIÓN USER.CONF DEL SERVIDOR JES EN LA EMPRESA1.COM.
…………………………………………………………………………………………267
FIGURA 61. CONFIGURACIÓN DE SERVIDOR DNS EN LA EMPRESA2. ....................................... 268
FIGURA 62. CREACIÓN DEL REGISTRO TIPO A. ....................................................................... 268
FIGURA 63. CREACIÓN DEL REGISTRO TIPO MX EN LA EMPRESA2. .......................................... 269
FIGURA 64. CONFIGURACIÓN DE IP Y DNS CON SUFIJO DE DOMINIO EN LA EMPRESA2. .......... 270
FIGURA 65. ARCHIVOS DE CONFIGURACIÓN DE MAIL.CONF Y USER.CONF EN EMPRESA2. .......... 271
FIGURA 66. CONFIGURACIÓN DEL ARCHIVO MAIL.CONF EN EL SERVIDOR JES DE LA EMPRES2.. 271
FIGURA 67. CONTINUACIÓN DE LA CONFIGURACIÓN ANTERIOR. ............................................... 272
FIGURA 68. CONFIGURACIÓN DEL ARCHIVO USER.CONF DEL SERVIDOR DE CORREO JES EN LA
EMPRESA2. …………………………………………………………………………………………273
MANUAL DE USUARIO
1. Introducción
El Manual de Usuario de Bizshield Web
Administrator puntualiza cada una de sus
funcionalidades, lo que permitirá al
usuario tener una guía detallada del uso
adecuado de la aplicación. El usuario
indicado para realizar las tareas de
administración del servicio antispam es el
administrador del servidor de correo de la
empresa.
2
1.1 OBJETIVO DE ESTE MANUAL
El objetivo de este manual de usuario es que el administrador del servidor de
correo pueda conocer como administrar el servicio antispam provisto por
Bizshield Antispam System, a través de la aplicación Bizshield Web
Administrator.
1.2 A QUIÉN VA DIRIGIDO ESTE MANUAL
Este manual está dirigido hacia el administrador de correo de la empresa, ya
que es la persona que cuenta con los conocimientos técnicos necesarios
para configurar de manera óptima Bizshield Antispam System.
1.3 LO QUE DEBE CONOCER
Los conocimientos mínimos que debe tener la persona que se encargará de
operar la solución tecnológica Bizshield Antispam System son:
Conocimientos de funcionamiento y configuración de servidores de
correo.
Conocimientos de estructura de red.
Conocimientos de Bizshield Web Administrator.
3
Conocimientos de Bizshield Rules Language .
2.0 BIZSHIELD WEB ADMINISTRATOR
Bizshield Web Administrator (BWA) es una aplicación web que permite
administrar de forma centralizada el repositorio de reglas, acciones y
usuarios del sistema. Consta de dos módulos: el Módulo de Configuración y
el Módulo de Reportes.
Para entrar a BWA, debemos escribir la url del sistema en la barra de
direcciones de nuestro navegador:
http://Bizshield-host:9999/BizshieldWebAdministrator/
Bizshield-host: Es el nombre de host o la dirección IP en donde está
levantada la instancia de Tomcat, en la cual está instalada la aplicación
Bizshield Web Administrator.
9999: Es el puerto de la instancia de Tomcat, en la cual está instalada la
aplicación Bizshield Web Administrator.
BizshieldWebAdministrator: Es el nombre de la aplicación.
4
Bizshield Web Administrator se visualiza mejor en los siguientes
navegadores: Internet Explorer 7 o superior, Firefox 3 o superior y Google
Chrome 2.0 o superior.
2.1 SELECCIÓN DE MÓDULO
Al ingresar a BWA aparece la página de Selección de Módulo.
FIGURA 1. Página de Selección de Módulo de BWA
Esta página permite seleccionar el módulo al cual se desea ingresar. Al
Módulo de Configuración sólo pueden ingresar los usuarios con rol de
5
administrador, mientras que al Módulo de Reportes pueden ingresar los
usuarios con rol de administrador y con rol de usuario.
2.2 LOGIN
Una vez seleccionado el módulo, aparece la página de Login (ver figura no.
2), en la cual se deben ingresar las credenciales (usuario y contraseña) para
identificarse en el sistema.
FIGURA 2. Página de Login
6
Debemos asegurarnos de ingresar las credenciales correctamente, en caso
de ingresar datos incorrectos se presenta el mensaje de error mostrado en la
figura no. 3.
FIGURA 3. Página de error de Login
Haciendo clic en el link “nuevamente”, se retorna a la página de Login.
2.3 MÓDULO DE CONFIGURACIÓN
El Módulo de Configuración es una herramienta para administrar las reglas,
acciones y usuarios del sistema. Además permite ingresar al Módulo de
Reportes. La figura no. 4 muestra la página principal del Módulo de
Configuración.
7
FIGURA 4. Módulo de Configuración
El menú principal del Módulo de Configuración está formado por dos
componentes: la barra de título y la barra de opciones.
La barra de título muestra el nombre del módulo en la parte central. En la
parte superior izquierda se muestra el link “Salir”, el cual permite salir del
sistema y nos re direcciona a la página de Selección de Módulo. En la parte
superior derecha se muestra el usuario actual.
La barra de opciones contiene los links a las páginas del Módulo de
Configuración, las cuales son: “Configuración de Reglas”, “Configuración de
Acciones”, “Gestión de Usuarios” y “Módulo de Reportes”.
8
FIGURA 5. Opciones de configuración
2.4 CONFIGURACIÓN DE REGLAS
La página de Configuración de Reglas permite dar mantenimiento a las
reglas del sistema Antispam. La figura no. 6 muestra el icono de
Configuración de Reglas.
FIGURA 6. Icono de Configuración de Reglas
9
El menú principal de la página de Configuración de Reglas está formado por
tres componentes: la barra de título, la regla seleccionada y la barra de
opciones.
La barra de título muestra el nombre de la página en la parte central. En la
parte superior izquierda se muestra el link “Inicio”, el cual nos re direcciona a
la página principal del Módulo de Configuración. En la parte superior
derecha se muestra el usuario actual. La barra de opciones contiene las
posibles acciones que se pueden realizar sobre la regla seleccionada, las
cuales son: “Crear”, “Editar”, “Consultar” y “Eliminar”.
FIGURA 7. Página de Configuración de Reglas
10
El link “Inicio” también se muestra en la página de Configuración de Reglas.
FIGURA 8. Link de inicio en Configuración de Reglas
Los formularios de Creación, Edición, Consulta y Eliminación de Regla
contienen los siguientes campos:
Nombre de Regla: Es el nombre que se le asigna a la regla, debe ser
único. Se recomienda que sea descriptivo. Este campo es obligatorio.
Descripción de Regla: Es la descripción de la regla. Aquí se
especifica el propósito de la regla. Es un campo obligatorio.
Proceso: Es el proceso al cual va a pertenecer la regla. Los procesos
de BWA son “Correo Entrante” y “Correo Saliente”.
Contenido de Regla: Es una expresión Bizshield Rules Language que
contiene la regla que será evaluada por Bizshield Service. Este campo es
obligatorio, puede ser llenado directamente y con ayuda de los campos
“Operando Variable”, “Operador” y “Operando Constante / Expresión
Regular”.
11
Si se desea borrar el texto ingresado en este campo se puede presionar el
botón “Limpiar Contenido Regla”. Para validar el contenido de la regla según
la gramática BRL, se debe presionar el botón “Validar Contenido Regla”, el
resultado de esta validación se mostrará en el campo “Mensaje del Sistema”.
Operando Variable: Contiene la lista de variables posibles para ser usadas
dentro del contenido de la regla. Para agregar un operando variable
debemos seleccionarlo de la lista y presionar el botón “->”.
Operador: Contiene la lista de operadores posibles para ser usados dentro
del contenido de la regla. Para agregar un operador debemos seleccionarlo
de la lista y presionar el botón “->”.
Operando Constante / Expresión Regular: Es un valor constante o
expresión regular que se desea agregar al contenido de la regla. Para
agregar este valor constante o expresión regular se debe escribir el texto en
este campo y presionar el botón “->”.
Ejemplo de Expresión Regular: Para el caso de las expresiones regulares,
si queremos comprobar que estén correctas podemos evaluarlas ingresando
la expresión regular en el campo “Operando Constante / Expresión Regular”
y un ejemplo a validar en el campo “Ejemplo de Expresión Regular”, luego
12
presionamos el botón “Validar Ejemplo de Expresión Regular”. El resultado
de la validación se muestra en el campo “Mensaje del Sistema”.
Acciones Disponibles: Contiene la lista de acciones creadas en el sistema.
Para asociar una acción a una regla nueva o existente se debe seleccionar la
acción de la lista de acciones disponibles y presionar el botón “->”.
Acciones Asociadas: Contiene la lista de acciones asociadas a la regla.
Para desasociar una acción de una regla nueva o existente se debe
seleccionar la acción de la lista de acciones asociadas y presionar el botón
“<-”. No es obligatorio asociar una acción a una regla.
Mensaje del Sistema: Este campo es de sólo lectura, muestra el resultado
de la operación realizada.
2.4.1 CREACIÓN DE REGLA
Este formulario nos permite crear una nueva regla. Para crear una regla se
debe dar clic en el link “Crear” del menú principal. Luego se deben ingresar
los campos obligatorios y presionar el botón “Crear” ubicado en la parte
inferior del formulario, con lo cual se intentará crear la regla con los datos
13
ingresados. El resultado de esta operación se muestra en el campo
“Mensaje del Sistema”.
FIGURA 9. Formulario de Creación de Reglas
2.4.2 EDICIÓN DE REGLA
Este formulario nos permite editar una regla existente. Para editar una regla,
se debe seleccionar ésta en el menú principal y luego dar clic en el link
“Editar”. A continuación se deben modificar los campos que se necesiten y
presionar el botón “Editar” ubicado en la parte inferior del formulario, con lo
14
cual se intentará editar la regla con los datos ingresados. El resultado de
esta operación se muestra en el campo “Mensaje del Sistema”.
FIGURA 10. Formulario de Edición de Reglas
2.4.3 CONSULTA DE REGLA
Este formulario nos permite consultar una regla existente. Para consultar
una regla se debe seleccionar ésta en el menú principal y luego dar clic en el
link “Consultar”. Los datos de la regla seleccionada se mostrarán en el
formulario, en campos de sólo lectura.
15
FIGURA 11. Formulario de Consulta de Reglas
2.4.4 ELIMINACIÓN DE REGLA
Este formulario nos permite eliminar una regla existente. Para eliminar una
regla se debe seleccionar ésta en el menú principal y luego dar clic en el link
“Eliminar”. Los datos de la regla seleccionada se mostrarán en el formulario,
en campos de sólo lectura. A continuación se debe presionar el botón
“Eliminar” ubicado en la parte inferior del formulario, con lo cual se intentará
eliminar la regla. El resultado de esta operación se muestra en el campo
“Mensaje del Sistema”.
16
FIGURA 12. Formulario de Eliminación de Reglas
2.5 CONFIGURACIÓN DE ACCIONES
La página de Configuración de Acciones permite dar mantenimiento a las
acciones del sistema antispam. La figura no. 13 muestra la página de
Configuración de Acciones.
17
FIGURA 13. Página de Configuración de Acciones
El menú principal de la página de Configuración de Acciones está formado
por tres componentes: la barra de título, la acción seleccionada y la barra de
opciones.
La barra de título muestra el nombre de la página en la parte central. En la
parte superior izquierda se muestra el link “Inicio”, el cual nos a la página
principal del Módulo de Configuración. En la parte superior derecha se
muestra el usuario actual.
18
La barra de opciones contiene las posibles acciones que se pueden realizar
sobre la acción seleccionada, las cuales son: “Crear”, “Editar”, “Consultar” y
“Eliminar”.
FIGURA 14. Íconos de Configuración de Acciones
El link “Inicio” también se muestra en la parte inferior de la página de
Configuración de Acciones.
FIGURA 15. Link de inicio en la pantalla de configuración de acciones
Los formularios de Creación, Edición, Consulta y Eliminación de Acción
contienen los siguientes campos:
Nombre de Acción: Es el nombre que se le asigna a la acción, debe
ser único. Se recomienda que sea descriptivo. Este campo es
obligatorio.
19
Tipo de Acción: Es el tipo de acción. Dependiendo del tipo de acción
se define el comportamiento y los parámetros de la acción. Si un tipo
de acción tiene asociado uno o más parámetros estos se muestran
automáticamente y es obligatorio su llenado.
Expresión regular: Es un campo auxiliar, se utiliza en conjunto con
el campo “Ejemplo de Expresión Regular” para evaluar expresiones
regulares.
Ejemplo de Expresión Regular: Para el caso de las expresiones
regulares, si queremos comprobar que estén correctas podemos
evaluarlas ingresando la expresión regular en el campo “Expresión
Regular” y un ejemplo a validar en el campo “Ejemplo de Expresión
Regular”, luego presionamos el botón “Validar Ejemplo de Expresión
Regular”. El resultado de la validación se muestra en el campo
“Mensaje del Sistema”.
Reglas Disponibles: Contiene la lista de reglas creadas en el
sistema. Para asociar una regla a una acción nueva o existente se
debe seleccionar la regla de la lista de reglas disponibles y presionar
el botón “->”.
20
Reglas Asociadas: Contiene la lista de reglas asociadas a la acción.
Para desasociar una regla de una acción nueva o existente se debe
seleccionar la regla de la lista de reglas asociadas y presionar el botón
“<-”. No es obligatorio asociar una regla a una acción.
Mensaje del Sistema: Este campo es de sólo lectura, muestra el
resultado de la operación realizada.
2.5.1 CREACIÓN DE ACCIÓN
Este formulario nos permite crear una nueva acción. Para crear una acción
se debe dar clic en el link “Crear” del menú principal. Luego se deben
ingresar los campos obligatorios y presionar el botón “Crear” ubicado en la
parte inferior del formulario, con lo cual se intentará crear la acción con los
datos ingresados. El resultado de esta operación se muestra en el campo
“Mensaje del Sistema”.
21
FIGURA 16. Formulario de Creación de Acciones
2.5.2 EDICIÓN DE ACCIÓN
Este formulario nos permite editar una acción existente. Para editar una
acción, se debe seleccionar ésta en el menú principal y luego dar clic en el
link “Editar”. A continuación se deben modificar los campos que se necesiten
y presionar el botón “Editar” ubicado en la parte inferior del formulario, con lo
cual se intentará editar la acción con los datos ingresados. El resultado de
esta operación se muestra en el campo “Mensaje del Sistema”.
22
FIGURA 17. Formulario de Edición de Acciones
2.5.3 CONSULTA DE ACCIÓN
Este formulario nos permite consultar una acción existente. Para consultar
una acción se debe seleccionar ésta en el menú principal y luego dar clic en
el link “Consultar”. Los datos de la acción seleccionada se mostrarán en el
formulario, en campos de sólo lectura.
23
FIGURA 18. Formulario de Consulta de Acciones
2.5.4 ELIMINACIÓN DE ACCIÓN
Este formulario nos permite eliminar una acción existente. Para eliminar una
acción se debe seleccionar ésta en el menú principal y luego dar clic en el
link “Eliminar”. Los datos de la acción seleccionada se mostrarán en el
formulario, en campos de sólo lectura. A continuación se debe presionar el
botón “Eliminar” ubicado en la parte inferior del formulario, con lo cual se
intentará eliminar la acción. El resultado de esta operación se muestra en el
campo “Mensaje del Sistema”.
24
FIGURA 19. Formulario de Eliminación de Acciones
2.6 GESTIÓN DE USUARIOS
La página de Gestión de Usuarios permite dar mantenimiento a los usuarios
del sistema antispam. La figura no. 20 muestra la página de Gestión de
Usuarios.
25
FIGURA 20. Página de Gestión de Usuarios
El menú principal de la página de Gestión de Usuarios está formado por tres
componentes: la barra de título, el usuario seleccionado y la barra de
opciones.
La barra de título muestra el nombre de la página en la parte central. En la
parte superior izquierda se muestra el link “Inicio”, el cual nos a la página
principal del Módulo de Configuración. En la parte superior derecha se
muestra el usuario actual.
26
La barra de opciones contiene las posibles acciones que se pueden realizar
sobre el usuario seleccionado, las cuales son: “Crear”, “Editar”, “Consultar” y
“Eliminar”.
FIGURA 21. Iconos de Gestión de Usuarios
El link “Inicio” también se muestra en la parte inferior de la página de Gestión
de Usuarios.
FIGURA 22. Link de inicio de Gestión de Usuarios
Los formularios de Creación, Edición, Consulta y Eliminación de Usuario
contienen los siguientes campos:
Rol: Es el rol asignado al usuario. En Bizshield Web Administrator
existen dos roles: Administrador y Usuario.
27
Usuario: Es el nombre de usuario en el sistema. Este campo es
obligatorio.
Contraseña: Es la contraseña del usuario. Este campo es obligatorio.
Confirme Contraseña: Es la contraseña del usuario, se utiliza para
asegurarse de la contraseña ingresada es correcta. Este campo es
obligatorio.
Nombres: Son los nombres del usuario. Este campo es obligatorio.
Apellidos: Son los apellidos del usuario. Este campo es obligatorio.
Dirección: Es la dirección domiciliaria del usuario. Este campo es
obligatorio.
Teléfono: Es el teléfono del usuario. Este campo es obligatorio.
Email: Es la dirección de correo electrónico del usuario. Este campo
es obligatorio.
Mensaje del Sistema: Este campo es de sólo lectura, muestra el
resultado de la operación realizada.
2.6.1 CREACIÓN DE USUARIO
Este formulario nos permite crear un nuevo usuario. Para crear un usuario
se debe dar clic en el link “Crear” del menú principal. Luego se deben
ingresar los campos obligatorios y presionar el botón “Crear” ubicado en la
parte inferior del formulario, con lo cual se intentará crear el usuario con los
28
datos ingresados. El resultado de esta operación se muestra en el campo
“Mensaje del Sistema”.
FIGURA 23 Formulario de Creación de Usuarios
2.6.2 EDICIÓN DE USUARIO
Este formulario nos permite editar un usuario existente. Para editar un
usuario, se debe seleccionar éste en el menú principal y luego dar clic en el
link “Editar”. A continuación se deben modificar los campos que se necesiten
y presionar el botón “Editar” ubicado en la parte inferior del formulario, con lo
cual se intentará editar el usuario con los datos ingresados. El resultado de
esta operación se muestra en el campo “Mensaje del Sistema”.
29
FIGURA 24. Formulario de Edición de Usuarios
2.6.3 CONSULTA DE USUARIO
Este formulario nos permite consultar un usuario existente. Para consultar un
usuario se debe seleccionar éste en el menú principal y luego dar clic en el
link “Consultar”. Los datos del usuario seleccionado se mostrarán en el
formulario, en campos de sólo lectura.
30
FIGURA 25. Formulario de Consulta de Usuarios
2.6.4 ELIMINACIÓN DE USUARIO
Este formulario nos permite eliminar un usuario existente. Para eliminar un
usuario se debe seleccionar éste en el menú principal y luego dar clic en el
link “Eliminar”. Los datos del usuario seleccionado se mostrarán en el
formulario, en campos de sólo lectura. A continuación se debe presionar el
botón “Eliminar” ubicado en la parte inferior del formulario, con lo cual se
intentará eliminar el usuario. El resultado de esta operación se muestra en el
campo “Mensaje del Sistema”.
31
FIGURA 26 Formulario de Eliminación de Usuario
2.7 MÓDULO DE REPORTES
El Módulo de Reportes es una herramienta que permite visualizar los correos
analizados y las reglas ejecutadas, en base a ciertos parámetros de
búsqueda. La figura no. 27 muestra la página principal del Módulo de
Reportes.
32
FIGURA 27. Página de modulo de reportes
El menú principal del Módulo de Reportes está formado por dos
componentes: la barra de título y la barra de opciones.
La barra de título muestra el nombre del módulo en la parte central. En la
parte superior izquierda se muestra el link “Salir”, el cual permite salir del
sistema y nos a la página de Selección de Módulo. En la parte superior
derecha se muestra el usuario actual.
33
La barra de opciones contiene los links a las páginas del Módulo de
Reportes, las cuales son: “Correos Analizados”, “Reglas Evaluadas”,
“Dominios Spam”, “Módulo de Configuración” (Este link sólo se muestra para
usuarios con rol de Administrador), y “Documentación de Ayuda”.
FIGURA 28. Íconos del Módulo de Reportes y Ayuda
2.7.1 REPORTE DE CORREOS ANALIZADOS
Permite visualizar los correos analizados por un proceso de Bizshield
Antispam System. La figura no. 29 muestra la página de Reporte de Correos
Analizados.
34
FIGURA 29. Reporte de Correos Analizados
El menú principal de la página de Reporte de Correos Analizados está
formado por tres componentes: la barra de título, los parámetros de
búsqueda y la barra de opciones.
La barra de título muestra el nombre de la página en la parte central. En la
parte superior izquierda se muestra el link “Inicio”, el cual nos a la página
principal del Módulo de Reportes. En la parte superior derecha se muestra el
usuario actual.
35
La barra de opciones contiene las posibles acciones que se pueden realizar
con los parámetros de búsqueda, en este caso la única acción es Consultar
FIGURA 30. Icono de Consultar Correos Analizados
El link “Inicio” también se muestra en la parte inferior de la página de Reporte
de Correos Analizados.
FIGURA 31. Link de inicio en Reporte de Correo Analizados
Los parámetros de búsqueda del Reporte de Correos Analizados son los
siguientes:
Proceso: Es el proceso ejecutado en el cual se analizó el correo
electrónico. Los procesos de Bizshield son “Correo Entrante” y
“Correo Saliente”.
36
Resultado de ejecución de proceso: Es el resultado de la ejecución
del proceso. Los resultados posibles de Bizshield son “Spam” y
“No Spam”
Correos analizados desde: Especifica que el reporte debe mostrar
resultados de procesos ejecutados a partir de esta fecha. Si este
campo está vacío no se toma en cuenta este criterio y se realiza la
búsqueda sin importar desde cuando se ejecutó el proceso. El
formato de este campo es YYYY-MM-DD.
Correos analizados hasta: Especifica que el reporte debe mostrar
resultados de procesos ejecutados hasta esta fecha. Si este campo
está vacío no se toma en cuenta este criterio y se realiza la búsqueda
sin importar hasta cuando se ejecutó el proceso. El formato de este
campo es YYYY-MM-DD.
De: Específica el correo electrónico del Remitente. Se utiliza el
carácter % para incluir un comodín de búsqueda.
Para: Especifica el correo electrónico del Destinatario. Se utiliza el
carácter % para incluir un comodín de búsqueda.
37
Resultados del Reporte de Correos Analizados
Para obtener el Reporte de Correos Analizados, debemos ingresar los
parámetros de búsqueda y luego dar clic en el link “Consultar” del menú
principal. El reporte obtenido se muestra en la figura no. 32. La cabecera del
Reporte de Correos Analizados muestra el total de ítems encontrados y el
panel de navegación en caso de ser necesaria la paginación, la cual está
configurada a partir de 10 ítems.El cuerpo del Reporte de Correos Analizados
muestra los datos del reporte, éste puede ser ordenado por cualquiera de las
columnas. Haciendo clic sobre el contenido de la columna “Id Correo”,
visualizaremos el Reporte de Reglas Evaluadas para dicho correo.
FIGURA 32. Resultado del Reporte de Correos Analizados
38
Haciendo clic sobre el contenido de la columna “Ver Correo”, visualizaremos
el contenido del correo en formato MIME antes y después de ser analizado
por Bizshield Antispam System.
FIGURA 33. Visualizador de Correos
En este caso elegimos el Outlook Express para visualizar el contenido delcorreo.
39
FIGURA 34. Visualización del correo por medio de Outlook Express
El pie de página del Reporte de Correos Analizados muestra el panel de
exportación, el cual nos permite exportar los resultados del reporte a los
formatos csv, xls, xml y pdf. Haciendo clic sobre cualquiera de estos links se
presentará la ventana que nos permitirá abrir o guardar los resultados en el
formato seleccionado.
40
FIGURA 35. Diálogo de exportación de resultados del Reporte de CorreosAnalizados
2.7.2 REPORTE DE REGLAS EVALUADAS
Permite visualizar las reglas evaluadas por un proceso de Bizshield. La
figura no. 36 muestra la página de Reporte de Reglas Evaluadas.
FIGURA 36 Reporte de Reglas Evaluadas
41
El menú principal de la página de Reporte de Reglas Evaluadas está formado
por tres componentes: la barra de título, los parámetros de búsqueda y la
barra de opciones.
La barra de título muestra el nombre de la página en la parte central. En la
parte superior izquierda se muestra el link “Inicio”, el cual nos re direcciona a
la página principal del Módulo de Reportes. En la parte superior derecha se
muestra el usuario actual.
La barra de opciones contiene las posibles acciones que se pueden realizar
con los parámetros de búsqueda, en este caso la única acción es Consultar
FIGURA 37. Icono de consultar Reporte de Reglas Evaluadas
El link “Inicio” también se muestra en la parte inferior de la página de Reporte
de Reglas Evaluadas.
42
FIGURA 38. El link inicio en Reporte de Reglas Evaluadas
Los parámetros de búsqueda del Reporte de Reglas Evaluadas son los
siguientes:
Proceso: Es el proceso ejecutado en el cual se evaluó la regla. Los
procesos de Bizshield son “Correo Entrante” y “Correo Saliente”.
Resultado de evaluación de regla: Es el resultado de la evaluación
de la regla. Los resultados posibles de evaluación son “Si Cumplió” y
“No Cumplió”.
Reglas evaluadas desde: Especifica que el reporte debe mostrar
resultados de procesos ejecutados a partir de esta fecha. Si este
campo está vacío no se toma en cuenta este criterio y se realiza la
búsqueda sin importar desde cuando se ejecutó el proceso. El
formato de este campo es YYYY-MM-DD.
Reglas evaluadas hasta: Especifica que el reporte debe mostrar
resultados de procesos ejecutados hasta esta fecha. Si este campo
está vacío no se toma en cuenta este criterio y se realiza la búsqueda
sin importar hasta cuando se ejecutó el proceso. El formato de este
campo es YYYY-MM-DD.
43
Resultados del Reporte de Reglas Evaluadas
Para obtener el Reporte de Reglas Evaluadas, debemos ingresar los
parámetros de búsqueda y luego dar clic en el link “Consultar” del menú
principal. El reporte obtenido se muestra en la figura no. 39.
La cabecera del Reporte de Reglas Evaluadas muestra el total de ítems
encontrados y el panel de navegación en caso de ser necesaria la
paginación, la cual está configurada a partir de 10 ítems.
El cuerpo del Reporte de Reglas Evaluadas muestra los datos del reporte,
éste puede ser ordenado por cualquiera de las columnas.
FIGURA 39. Resultados del Reporte de Reglas Evaluadas
44
El pie de página del Reporte de Reglas Evaluadas muestra el panel de
exportación, el cual nos permite exportar a los formatos csv, xls, xml y pdf.
Haciendo clic sobre cualquiera de estos links se presentará la ventana que
nos permitirá abrir o guardar los resultados en el formato seleccionado.
FIGURA 40. Diálogo de exportación de resultados del Reporte de ReglasEvaluadas
2.7.3 REPORTE DE DOMINIOS SPAM
Permite visualizar la cantidad de Spam detectado por dominio remitente.
Con esto podemos clasificar los dominios más peligrosos y hacer un rating
de los mismos.
45
FIGURA 41. Reporte de Dominios Spam
El menú principal de la página de Reporte de Dominios Spam está formado
por tres componentes: la barra de título, los parámetros de búsqueda y la
barra de opciones.
La barra de título muestra el nombre de la página en la parte central. En la
parte superior izquierda se muestra el link “Inicio”, el cual nos re direcciona a
la página principal del Módulo de Reportes. En la parte superior derecha se
muestra el usuario actual.
46
La barra de opciones contiene las posibles acciones que se pueden realizar
con los parámetros de búsqueda, en este caso la única acción es Consultar.
FIGURA 42. Icono de consultar Reporte de Dominios Spam
El link “Inicio” también se muestra en la parte inferior de la página de Reporte
Dominios Spam
FIGURA 43. El link inicio en Reporte de Dominios Spam.
Los parámetros de búsqueda del Reporte de Dominios Spam son los
siguientes:
Correos analizados desde: Especifica que el reporte debe mostrar
resultados de procesos ejecutados a partir de esta fecha. Si este
47
campo está vacío no se toma en cuenta este criterio y se realiza la
búsqueda sin importar desde cuando se ejecutó el proceso. El
formato de este campo es YYYY-MM-DD.
Correos analizados hasta: Especifica que el reporte debe mostrar
resultados de procesos ejecutados hasta esta fecha. Si este campo
está vacío no se toma en cuenta este criterio y se realiza la búsqueda
sin importar hasta cuando se ejecutó el proceso. El formato de este
campo es YYYY-MM-DD.
Resultados del Reporte de Dominios Spam
Para obtener el Reporte de Dominios Spam, debemos ingresar los
parámetros de búsqueda y luego dar clic en el link “Consultar” del menú
principal. El reporte obtenido se muestra en la figura no. 44.
La cabecera del Reporte de Dominios Spam muestra el total de ítems
encontrados y el panel de navegación en caso de ser necesaria la
paginación, la cual está configurada a partir de 10 ítems.
El cuerpo del Reporte de Dominios Spam muestra los datos del reporte, éste
puede ser ordenado por cualquiera de las columnas.
48
FIGURA 44. Resultados del Reporte de Dominios Spam
El pie de página del Reporte de Dominios Spam muestra el panel de
exportación, el cual nos permite exportar a los formatos csv, xls, xml y pdf.
Haciendo clic sobre cualquiera de estos links se presentará la ventana que
nos permitirá abrir o guardar los resultados en el formato seleccionado.
FIGURA 45. Diálogo de exportación de resultados del Reporte de DominiosSpam
MANUAL TÉCNICO
2. Introducción
Este manual contiene información respecto
a cuáles son y cómo operan los
componentes tecnológicos de Bizshield
Antispam System. Este documento
también proporciona soporte para el
mantenimiento y configuración del servicio
antispam.
50
2.1 OBJETIVO DE ESTE MANUAL
El objetivo de este manual técnico es que el Administrador de Bizshield
Antispam System pueda conocer:
La dimensión real del Sistema.
Las normas usadas en la elaboración del Sistema.
El diseño utilizado.
Las estructura de datos.
Los procesos utilizados.
2.2 A QUIÉN VA DIRIGIDO ESTE MANUAL
Este manual está dirigido hacia el administrador de correo de la empresa, ya
que es la persona que cuenta con los conocimientos técnicos necesarios
para configurar de manera óptima Bizshield Antispam System.
2.3 BIZSHIELD WEB ADMINISTRATOR
Bizshield Web Administrator (BWA) es una aplicación web J2EE que permite
configurar el servicio antispam, proporcionando opciones para administrar de
forma centralizada el repositorio de reglas, acciones y usuarios del sistema.
Consta de dos módulos: el Módulo de Configuración y el Módulo de
Reportes. En el Módulo de Configuración se realiza la configuración de las
reglas y acciones para el control del spam o ham y la gestión de los usuarios
51
del sistema, mientras que en el Módulo de Reportes se pueden visualizar los
correos analizados y reglas evaluadas por el servicio antispam.
2.4 AUTENTICACIÓN EN BIZSHIELD WEB ADMINISTRATOR
En ambientes J2EE, el contenedor web soporta mecanismos de seguridad
incorporados para sus aplicaciones. Los componentes principales para la
seguridad de las aplicaciones web son la autenticación y la autorización. Los
contenedores web de tipo J2EE ofrecen tres tipos de mecanismos de
autenticación: básico, por formulario y autenticación mutua.
La mayoría de las aplicaciones web utilizan la autenticación basada en
formulario, ya que esta permite a las aplicaciones personalizar el interfaz de
usuario de la autenticación. Los contenedores web de tipo J2EE también
implementan autorización sobre los recursos web de las aplicaciones,
usando roles de seguridad definidos en el descriptor de despliegue de la
aplicación web.
Bizshield Web Administrator utiliza autenticación basada en formulario y
autorización para acceder a los recursos de la aplicación web.
52
2.4.1 AUTENTICACIÓN BASADA EN FORMULARIO
La autenticación basada en formulario permite a los desarrolladores
personalizar la interfaz de usuario de la autenticación. La sección login-
config del web.xml define el tipo de mecanismo de autenticación y los URIs
de las páginas de Login y error.
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Bizshield Realm</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/fail_login.jsp</form-error-page>
</form-login-config>
</login-config>
El formulario de Login debe contener campos para ingresar el username y el
password, además esos campos deben llamarse j_username y j_password,
respectivamente.
El método de envío de datos del formulario debe ser post y la acción
encargada de procesar los datos del formulario debe ser j_security_check.
53
<form method="POST" action="j_security_check">
<td align="right" height="30"><b>Usuario:</b></td>
<td align="left"><input type="text" name="j_username"></td>
<td align="right" height="30"><b>Contraseña:</b></td>
<td align="left"><input type="password" name="j_password"></td>
El contenedor web activa el mecanismo de autenticación que ha sido
configurado para ese recurso, cuando se intenta acceder a recursos web
protegidos.
Los contenedores web J2EE realizan los siguientes pasos para
implementar la seguridad de las aplicaciones web:
Determina si el usuario ha sido autenticado cuando se intenta acceder
a los recursos web protegidos.
Si el usuario no ha sido autenticado todavía, se solicita al usuario que
provea credenciales de seguridad redirigiéndolo a la página de Login
definida en el descriptor de despliegue.
Valida las credenciales del usuario contra el realm de seguridad
configurado para el contenedor.
54
Determina si el usuario autenticado está autorizado para acceder a los
recursos web definidos en el descriptor de despliegue.
Como las bases de datos y los directorios LDAP proveen una mayor
flexibilidad para el mantenimiento de la información, la mayoría de las
organizaciones puede querer esta persistencia para información de
seguridad de autenticación y autorización. Apache Tomcat tiene soporte
para diferentes tipos de realms de seguridad: bases de datos, LDAP, archivo
XML, etc.
Bizshield Web Administrator utiliza la base de datos como realm de
seguridad. Esto se configura en el archivo server.xml, en la sección realm.
<Realm className="org.apache.catalina.realm.JDBCRealm"
connectionName="elfstone" connectionPassword="12345678"
connectionURL="jdbc:mysql://Bizshield .pro.ec:3306/deterministicos"
driverName="com.mysql.jdbc.Driver" roleNameCol="NOMBRE_ROL"
userCredCol="PASSWORD" userNameCol="USERNAME"
userRoleTable="AS_USUARIO_ROL" userTable="AS_USUARIO"/>
La sección realm del archivo de configuración de Tomcat server.xml define el
tipo de realm de seguridad que el contenedor debe usar para autenticar un
usuario. Para configurar el realm de base de datos se debe crear la tabla de
usuarios, la tabla de roles y la tabla de asociación usuario-rol. En Bizshield
55
estas tablas son AS_USUARIO, AS_ROL y AS_USUARIO_ROL
respectivamente. Además se debe incluir el driver jdbc de mysql en la
carpeta lib de Tomcat. El driver jdbc usado por Bizshield Web Administrator
es mysq-connector-java-5.0.8-bin.jar.
2.5 AUTORIZACIÓN
Una vez que el usuario ha sido autenticado, el contenedor recupera los roles
de seguridad para el usuario autenticado y comprueba si el usuario
pertenece a uno de los roles definidos en la sección auth-constraint del
descriptor de despliegue. El contenedor web muestra un mensaje de error si
el usuario no pertenece a uno de los roles.
El elemento security-constraint del descriptor de despliegue define los
recursos web protegidos y una lista de roles que tienen acceso a esos
recursos. Los roles utilizados en Bizshield Web Administrator son
ADMINISTRADOR, el cual tiene acceso a todos los recursos de
configuración y USUARIO, el cual tiene acceso a todos los recursos de
reportes. Un recurso se define mediante un URL.
<security-constraint>
<display-name>Recursos de Usuario</display-name>
<web-resource-collection>
56
<web-resource-name>Area de Reportes</web-resource-name>
<url-pattern>/reportes/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USUARIO</role-name>
<role-name>ADMINISTRADOR</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<display-name>Recursos de Administrador</display-name>
<web-resource-collection>
<web-resource-name>Area de Configuracion</web-resource-name>
<url-pattern>/configuracion/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMINISTRADOR</role-name>
</auth-constraint>
</security-constraint>
2.6 VENTAJAS DEL MECANISMO DE AUTENTICACIÓN DE
BIZSHIELD WEB ADMINISTRATOR
Se puede cambiar el realm de seguridad si afectar el código de la aplicación,
por ejemplo podríamos migrar los usuarios y roles de la base de datos a un
directorio LDAP, y el cambio sería transparente para las aplicaciones.
57
Las aplicaciones web no necesitan implementar el mecanismo de
autenticación por ellas mismas. Esto puede hacerse fácilmente con poca
configuración.
2.7 ANTLR
Las reglas antispam de Bizshield System se escriben en un micro lenguaje
de expresiones lógicas que llamamos Bizshield Rules Language (BRL). Para
realizar el análisis léxico y sintáctico de una expresión BRL se utilizó la
herramienta ANTLR v3.0, de la cual se procederá a explicar su
funcionamiento.
2.8 INTRODUCCIÓN AL ANÁLISIS LÉXICO Y SINTÁCTICO
Todo lenguaje de programación está formado por un conjunto de símbolos
básicos, que se agrupan para formar los elementos de un vocabulario, de la
misma manera que en la lengua española las letras se agrupan para formar
las palabras. Los símbolos de los lenguajes de programación son los
caracteres que forman el código, y a sus palabras se les conoce como
tokens.
58
Las reglas de un lenguaje indican cómo pueden o no agruparse los diferentes
tokens. A estas reglas se las llama reglas sintácticas o reglas
gramaticales. Es frecuente que el vocabulario se defina implícitamente al
definir las reglas sintácticas de un lenguaje. Al conjunto de reglas sintácticas
de un lenguaje se la llama gramática. Por ejemplo, el conjunto de las reglas
sintácticas del castellano es la gramática castellana.
Por último, un lenguaje suele ir acompañado de ciertas reglas que
complementan a las reglas sintácticas. En el lenguaje natural utilizamos la
lógica y la memoria para saber si una frase tiene sentido. Este tipo de
análisis se conoce como semántico.
En un proceso de compilación, lo primero que debe hacer un compilador es
comprobar que la información que se le suministra pertenece a su lenguaje
(no hay errores léxicos, sintácticos ni semánticos). Si es así, el compilador
debe representar de alguna manera la información que se le suministró para
poder trabajar con ella, y finalmente traducir dicha información a código
máquina. Detallando las fases del proceso de compilación:
Análisis léxico: Esta fase tiene que ver con el vocabulario que se
mencionó anteriormente. El proceso de análisis léxico agrupa los
diferentes caracteres de su flujo de entrada en tokens. Los tokens son
59
los símbolos léxicos del lenguaje; se asemejan mucho a las palabras
del lenguaje natural. Los tokens están identificados con símbolos
(tienen nombres) y suelen contener información adicional (como la
cadena de caracteres que los originó, el fichero en el que están y la
línea donde comienzan, etc.). Una vez son identificados, son
transmitidos al siguiente nivel de análisis. El programa que permite
realizar el análisis léxico es un analizador léxico. En inglés se le suele
llamar scanner o lexer.
Análisis sintáctico: En la fase de análisis sintáctico se aplican las
reglas sintácticas del lenguaje analizado al flujo de tokens. Es decir, a
partir de los tokens pasados por el analizador léxico, el analizador
sintáctico se encargará de reconocer las combinaciones correctas de
tokens que forman instrucciones o expresiones válidas en nuestro
lenguaje (BLR).
En caso de no haberse detectado errores, el intérprete representará la
información codificada en el código fuente en un Árbol de Sintaxis
Abstracta (AST), que no es más que una representación arbórea de
los diferentes patrones sintácticos que se han encontrado al realizar el
análisis, salvo que los elementos innecesarios (signos de puntuación,
paréntesis) son eliminados.
60
El código que permite realizar el análisis sintáctico se llama analizador
sintáctico. En inglés se le llama parser, que significa iterador. El
análisis sintáctico se apoya sobre un análisis léxico, es decir, las
categorías sintácticas son generadas desde un flujo de tokens
producidos desde un analizador léxico.
Análisis semántico: El análisis semántico del árbol AST empieza por
detectar incoherencias a nivel sintáctico en el AST. Si el AST supera
esta fase, es corriente enriquecerlo para realizar un nuevo análisis
semántico. Es decir, es corriente efectuar varios análisis semánticos,
cada uno centrado en aspectos diferentes. Durante éstos análisis el
árbol es enriquecido y modificado.
Cualquier herramienta que realice un análisis semántico es llamada
analizador semántico. En la bibliografía inglesa suelen referirse a los
analizadores semánticos como tree parsers (o iteradores de árboles).
Generación de código: En esta fase se utiliza el AST enriquecido,
producto del proceso de análisis semántico, para generar código
máquina. Esta fase no se aplica a BRL, ya que sólo se necesita
realizar un análisis de las expresiones lógicas.
61
2.9 ANÁLISIS LÉXICO Y SINTÁCTICO CON ANTLR
Tomando la definición de su propia web, ANTLR es una herramienta que
proporciona un marco de trabajo para la construcción de reconocedores,
intérpretes, compiladores y traductores de lenguajes a partir de gramáticas
enriquecidas con acciones. En resumen proporciona todo lo necesario para
el desarrollo de este tipo de sistemas, entre los más importantes:
• Construcción de analizadores léxicos.
• Construcción de analizadores sintácticos.
• Mecanismos de construcción y recorrido de árboles de sintaxis abstracta
(AST).
• Mecanismos de tratamiento de plantillas.
• Mecanismos de detección y recuperación de errores.
Como ventajas adicionales que diferencian a ANTLR de otras herramientas
similares podemos citar la inclusión de acciones en sus reglas, paso de
parámetros, devolución de valores, la posibilidad de generar el código de
salida (un analizador léxico, sintáctico o semántico) en diferentes lenguajes
como Java, C, C++, C# o Python, a partir de unos ficheros escritos en un
62
lenguaje propio, y el hecho de disponer de un entorno de desarrollo llamado
ANTLRWorks que nos permitirá construir de una forma bastante amigable las
gramáticas de entrada a la herramienta, proporcionando representaciones
gráficas de las expresiones y árboles generados, e incluyendo un intérprete y
depurador propio. La gramática de BRL está definida mediante un archivo de
gramática de ANTLR.
Para poder utilizar ANTLR debemos incluir la librería antlr-
3.1.3.jar.
2.10 ARCHIVO DE GRAMÁTICA DE ANTLR
Los archivos con los que trabaja ANTLR tienen la terminación *.g, y se
conocen como ficheros de especificación de gramáticas o, simplemente,
ficheros de gramáticas.
Un fichero de gramática contiene la definición de uno o varios analizadores.
Cada uno de estos analizadores se traducirá a código nativo (por ejemplo
Java, C++ o C#, dependiendo de ciertas opciones) en forma de clases. Es
decir, por cada analizador descrito en el archivo de gramáticas se generará
una clase.
Todo archivo de gramática tiene la siguiente estructura:
63
Grammar BizshieldCorreoEntrante; /* Nombre de la gramática */
header {
/* Acciones de cabecera */
}
options {
/* Opciones generales del fichero */
}
// Definición de los analizadores: reglas y tokens
Nombre de la gramática: Aquí se especifica el nombre de nuestra
gramática. La gramática debe tener el mismo nombre que el archivo fuente.
Acciones de cabecera: Esta zona es opcional (puede aparecer o no).
Delimitada por los elementos “header {“ y “}”, en esta zona incluimos
elementos en código nativo, en nuestro caso Java, que deben preceder a la
definición de las diferentes clases de los analizadores. Esta acción se utiliza
para importar otras clases y definir el paquete al que pertenecerá la clase del
analizador.
2.10.1 OPCIONES GENERALES DEL FICHERO
Esta zona es opcional. Delimitada por los elementos “options {” y “}”, permite
controlar algunos parámetros de ANTLR mediante opciones. Las opciones
se representan como asignaciones : nombreOpcion=valor:. Se utilizan mucho
64
en ANTLR. La opción más importante de esta zona es la que permite elegir el
lenguaje nativo en el que se generarán los analizadores. Su valor por defecto
es Java. Dado que vamos a generar reconocedores en java, no
necesitaremos esta zona.
2.10.2 DEFINICIÓN DE LOS ANALIZADORES
Tras las opciones generales del fichero vienen las definiciones de
analizadores. Es muy común que en un mismo fichero se especifiquen
varios analizadores (en muchas de las gramáticas escritas en ANTLR se
utiliza esta técnica). Sin embargo, también es posible definir cada analizador
en un fichero, sobre todo cuando se trata de analizadores extensos.
Para el caso del archivo de gramática de BLR, en esta sección se
encontrarán las reglas gramaticales, las reglas léxicas y la definición de los
tokens
2.10.3 REGLAS Y TOKENS DE ANTLR
En ANTLR, una gramática es un conjunto de reglas donde cada regla
describe alguna frase del lenguaje. La regla donde el proceso de parseo
comienza es llamada la regla inicial (sólo el analizador sintáctico tiene un
65
símbolo inicial). Cada regla consiste en una o más alternativas. Existen dos
tipos de reglas: reglas sintácticas y reglas léxicas.
Las reglas sintácticas o gramaticales definen el conjunto de sentencias
válidas en un lenguaje, mientras que las reglas léxicas definen las
estructuras léxicas válidas en un lenguaje. Además de definir las reglas, se
deben definir los tokens, que son los símbolos de nuestro vocabulario. Estos
tokens serán referenciados por las reglas sintácticas y las reglas léxicas. Las
reglas pueden referenciar tokens y otras reglas para coincidir con la frase.
Para el tratamiento de los espacios en blanco, ANTLR nos provee la función
skip(), la cual le da instrucciones al lexer para saltar el token espacio en
blanco y buscar el siguiente.
En ANTLR existe una estructura más pequeña que el token conocida como
fragment, la cual es utilizada para construir tokens, pero no es considerada
un token por el parser y no puede ser referenciada desde las reglas
sintácticas ni desde las reglas léxicas, sólo desde un token.
Otra característica de ANTLR es que permite asociar acciones a las reglas.
Las acciones son códigos de bloque escritos en el lenguaje objetivo, en este
caso Java.
66
Para definir una gramática en ANTLR, se debe considerar que:
Los tokens y las reglas de tokens (lexer rules) siempre empiezan con
una letra mayúscula.
Las reglas gramaticales (parser rules) siempre deben empezar con
una letra minúscula.
Para incluir una acción en una regla, se debe escribir la sentencia
Java rodeada por llaves al final de la regla.
2.10.4 ACCIONES DE GRAMÁTICA DE ANTLR
Las acciones son fragmentos de código que se escriben en el lenguaje
objetivo y son embebidos en nuestra gramática. ANTLR entonces inserta
ese código en el analizador generado de acuerdo a su posición relativa a los
elementos gramaticales que la rodean y/o el tipo de acción. Existen dos tipos
de acción: la acción de regla (su alcance es la regla en la cual está
embebida) y la acción de gramática (su alcance es global). Las acciones de
gramática utilizadas en BRL son:
header: Especifica el código que debe aparecer antes de la definición
de la clase, por ejemplo la definición del paquete.
members: Especifica variables y métodos que necesitemos crear o
sobrescribir.
67
rulecatch: Reemplaza el bloque try/catch generado por defecto por
ANTLR con el que nosotros especifiquemos
2.10.5 EXCEPCIONES EN ANTLR
Cuando un error ocurre dentro de una regla, ANTLR atrapa la excepción,
reporta el error, intenta recuperarse consumiendo más tokens y entonces
retorna de la regla. Es decir, envuelve cada regla dentro de un bloque
try/catch.
Se puede reemplazar este bloque por nuestro propio bloque try/catch, para
poder tratar las excepciones de regla de forma personalizada. Esto se
realiza agregando la cláusula catch al final de la regla, especificando la
excepción que necesitemos capturar. Estas son las excepciones de ANTLR
capturadas en BRL:
RECOGNITIONEXCEPTION: Es la superclase de todas las
excepciones lanzadas por un analizador generado por ANTLR.
MISMATCHEDTOKENEXCEPTION: Indica que el parser buscó un
símbolo particular y no lo encontró en la tabla de símbolos.
NOVIABLEALTEXCEPTION: El analizador se encuentra en un punto
de decisión, pero el camino hacia adelante (lookahead) no es
consistente con ninguna de las alternativas.
68
2.11 ANÁLISIS DEL ARCHIVO DE GRAMÁTICA DE BRL
La gramática más común en ANTLR es una gramática combinada que
especifica tanto el parser como el lexer. De esta gramática combinada
ANTLR generará un parser y un lexer escritos en Java que deben ser
compilados. BRL tiene dos archivos de gramática: BizshieldCorreoEntrante.g
y BizshieldCorreoSaliente.g, por lo que los archivos generados por ANTLR
son los siguientes:
BizshieldCorreoEntranteLexer.java
BizshieldCorreoEntranteParser.java
BizshieldCorreoSalienteLexer.java
BizshieldCorreoSalienteParser.java
Actualmente los archivos Bizshield CorreoEntrante.g y Bizshield
CorreoSaliente.g contienen la misma gramática, por lo que nos referiremos
indistintamente a los dos como el archivo de gramática de BRL.
En el archivo de gramática de BRL se utiliza la acción global header para
especificar el paquete com.realmsoft.Bizshield.parser para el lexer y el
parser. También se utiliza la acción global members para sobrescribir los
métodos principales generados por ANTLR para tratamiento de errores del
69
lexer y el parser por métodos personalizados. Por último, se utiliza la acción
global rulecatch para reemplazar el método generado por ANTLR para el
tratamiento de errores de sintaxis del parser. Las opciones especificadas en
el archivo de gramática de BRL son:
LANGUAGE: Especifica el lenguaje en el cual ANTLR debe generar
los analizadores.
BACKTRACK: Indica si ANTLR debe volver atrás cuando el análisis
gramatical falle al intentar obtener una decisión.
MEMOIZE: Se utiliza en conjunto con la opción Backtrack para
recordar resultado parcial del parseo y garantizar que el parser no
repita el análisis de una entrada.
OUTPUT: La opción output controla la clase de estructura de datos
que el analizador generará, en el caso de BRL es AST. Un AST es
simplemente una estructura de datos en forma de árbol, que permite
abstraer como su nombre lo dice, el árbol de sintaxis que el parser
está utilizando, de tal manera que sea generado durante la etapa de
análisis sintáctico, y posteriormente, será recorrido y ejecutado
independientemente luego que la etapa de análisis sintáctico haya
finalizado, Es decir, se crea mientras se va leyendo la entrada, para
una posterior ejecución luego de terminar la lectura de la entrada, esto
mejora notablemente el desempeño.
70
2.11.1 ARCHIVO DE GRAMÁTICA DE BRL
grammar BizshieldCorreoEntrante;
options {language=Java;k=*;backtrack=true;memoize=true;output=AST;
}
@parser::header {package com.realmsoft.Bizshield .parser;
}
@lexer::header {package com.realmsoft.Bizshield .parser;
}
@parser::members {protected void mismatch(IntStream input, int ttype, BitSet follow)throws RecognitionException
{throw new MismatchedTokenException(ttype, input);
}
public Object recoverFromMismatchedSet(IntStream input,RecognitionException e,BitSet follow) throws RecognitionException{
throw e;}
public void reportError(RecognitionException e){
throw new IllegalArgumentException(e);}
}
71
@lexer::members {public void reportError(RecognitionException e) {
throw new IllegalArgumentException(e);}
}
@rulecatch {catch (RecognitionException e) {
throw e;}
}
prog:
condition_or EOF;catch [NoViableAltException re] {
System.out.println("Error prog");throw re;
}catch [RecognitionException re] {
System.out.println("Error prog");throw re;
}
condition_or:
condition_and ( OR condition_and )*;catch [RecognitionException re] {
System.out.println("Error or");throw re;
}
condition_and:
condition_expr ( AND condition_expr )*;catch [RecognitionException re] {
System.out.println("Error and");throw re;
}
condition_expr
72
:condition_comparison
| condition_in| condition_contains| condition_intersec| condition_intersec_like| condition_paren;catch [RecognitionException re] {
System.out.println("Error condition_expr");throw re;
}
condition_comparison: EMAIL_STRING_VARIABLE ( equality_op |
string_comp_op ) ( STRING | NULL )| EMAIL_NUMBER_VARIABLE ( equality_op |
number_comp_op ) ( NUMBER | NULL );catch [RecognitionException re] {
System.out.println("Error condition_comp");throw re;
}
condition_in: EMAIL_STRING_VARIABLE in_op STRING_LIST| EMAIL_NUMBER_VARIABLE in_op NUMBER_LIST;catch [RecognitionException re] {
System.out.println("Error condition_in");throw re;
}
condition_contains: EMAIL_STRING_LIST_VARIABLE contains_op STRING;catch [RecognitionException re] {
System.out.println("Error condition_contains");throw re;
}
condition_intersec: EMAIL_STRING_LIST_VARIABLE intersec_op
STRING_LIST
73
;catch [RecognitionException re] {
System.out.println("Error condition_intersec");throw re;
}
condition_intersec_like: EMAIL_STRING_LIST_VARIABLE intersec_like_op
STRING_LIST;catch [RecognitionException re] {
System.out.println("Error condition_intersec_like");throw re;
}
condition_paren: LPAREN condition_or RPAREN;catch [RecognitionException re] {
System.out.println("Error condition_paren");throw re;
}
equality_op: EQ | NOT_EQ;
number_comp_op: GTH | GEQ | LTH | LEQ;
string_comp_op: LIKE | NOT_LIKE;
in_op: IN | NOT_IN;
contains_op: CONTAINS | NOT_CONTAINS;
intersec_op
74
: INTERSECT | NOT_INTERSECT;
intersec_like_op: INTERSECT_LIKE | NOT_INTERSECT_LIKE;
STRING_LIST: '{' STRING ( COMMA STRING )* '}';
NUMBER_LIST: '{' NUMBER ( COMMA NUMBER )* '}';
EMAIL_STRING_VARIABLE: 'CONTENT_LANGUAJE' |
'DOMINIO_REMITENTE_VALIDO' |'ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS'
| 'IP_ORIGEN' | 'BODY' | 'DOMINIO_REMITENTE' |'ESTA_SMTP_TO_IGUAL_MIME_TO'
| 'CORREO_REMITENTE' | 'SUBJECT' | 'MIME_FROM';
EMAIL_STRING_LIST_VARIABLE: 'JUEGOS_CARACTERES' |
'NOMBRES_ARCHIVOS_ADJUNTOS' |'DIRECCIONES_DESTINOS'
| 'EXTENCIONES_ARCHIVOS_ADJUNTOS';
EMAIL_NUMBER_VARIABLE: 'NUMERO_DESTINATARIOS';
AND: 'AND';
OR: 'OR';
LIKE
75
: 'LIKE';
NOT_LIKE: 'NOT_LIKE';
IN: 'IN';
NOT_IN: 'NOT_IN';
CONTAINS: 'CONTAINS';
NOT_CONTAINS: 'NOT_CONTAINS';
INTERSECT: 'INTERSECT';
NOT_INTERSECT: 'NOT_INTERSECT';
INTERSECT_LIKE: 'INTERSECT_LIKE';
NOT_INTERSECT_LIKE: 'NOT_INTERSECT_LIKE';
NULL: 'null';
RPAREN
76
: ')';
LPAREN: '(';
EQ: '=';
NOT_EQ: '!=';
LTH: '<';
LEQ: '<=';
GTH: '>';
GEQ: '>=';
STRING: DQUOTE ( ( '\\' DQUOTE ) | ~DQUOTE )* DQUOTE;
NUMBER: DIGIT+;
WS: (' '|'\t'|'\n'|'\r')+ {skip();};
fragment DIGIT
77
: '0' .. '9';
fragment COMMA: ',';
fragment LBRACKET: '{';
fragment RBRACKET: '}';
fragment DQUOTE: '"';
2.11.2 BIZSHIELD RULES LANGUAGE (BRL)
Es un micro lenguaje de expresiones lógicas utilizado para definir una regla
para control de spam o ham en Bizshield Antispam System. Está formado
por tipos de datos, literales de datos, variables predefinidas de correo
electrónico y operadores.
2.11.3 TIPOS DE DATOS DE BRL
Se utilizan para poder representar y validar correctamente los valores de las
variables de BRL. A continuación se describen los tipos de datos de BRL.
78
2.11.3.1 ALFANUMERICO
Representa una cadena de caracteres alfanuméricos.
2.11.3.2 ALFANUMERICO – CONJUNTO
Representa un conjunto de cadenas de caracteres alfanuméricos.
2.11.3.3 NUMERICO
Representa un valor numérico entero.
2.11.3.4 EXPRESION REGULAR
Representa una expresión regular Java.
2.11.3.5 EXPRESION REGULAR CONJUNTO
Representa un conjunto de expresiones regulares Java.
2.11.3.6 LITERALES DE BRL
Se utilizan para poder evaluar una expresión BRL, realizando comparaciones
de variables contra literales. A continuación se describen los literales de
BRL.
LITERAL ALFANUMERICO
Su sintaxis es: “AAA”. Donde AAA es cualquier cadena de caracteres
alfanuméricos. Ejemplo: “teens”
79
LITERAL ALFANUMERICO – CONJUNTO
Su sintaxis es: {elemento_1,elemento_2,elemento_3,…,elemento_n}
Donde elemento_i es un literal alfanumérico. Ejemplo:
{“teens”,”sex”,”xxx”}
LITERAL NUMERICO
Su sintaxis es: 999. Donde 999 es cualquier número entero. Ejemplo:
15
LITERAL EXPRESION REGULAR
Su sintaxis es: “regex”. Donde regex es una expresión regular java.
Se utilizan las clases de caracteres predefinidas y cuantificadores.
Ejemplo: “.+\.exe”
Clases de caracterespredefinidas
\d Un dígito: [0-9]
\D Un no dígito: [^0-9]
\sUn caracter de espacio en
blanco: [ \t\n\x0B\f\r]
\SUn no caracter de espacio en
blanco: [^\s]
\wUn caracter de palabra: [a-zA-
Z_0-9]
\W Un no caracter de palabra: [^\w]
. Cualquier carácter
80
Cuantificadores
X? X, cero o una vez
X* X, cero o más veces
X+ X, una o más veces
X{n} X, exactamente n veces
X{n,} X, al menos n veces
X{n,m}X, al menos n pero no más de
m veces
Operadores
XY X seguido de Y
X|Y X o Y
(X) X como grupo
LITERAL EXPRESION REGULAR – CONJUNTO
Su sintaxis es: {“regex_1”,”regex_2”,”regex_3”,…,”regex_n”}.
Donde regex_n es una expresión regular. Ejemplo: {“.+\.exe”,”
.+\.bat”,” .+\.com”}
2.12 VARIABLES DE BRL
Representan los elementos de un correo electrónico como subject, body, etc.
A continuación se describen las variables de BRL.
81
2.12.1 IP_ORIGEN (ALFANUMERICO / EXPRESION REGULAR)
Contiene la dirección IP del remitente del correo electrónico. Dependiendo si
es correo entrante o saliente, el remitente puede ser un usuario externo o un
usuario interno respectivamente.
2.12.2 CORREO_REMITENTE (ALFANUMERICO / EXPRESION
REGULAR)
Contiene la dirección de correo electrónico del remitente, el campo FROM
del protocolo SMTP. Dependiendo si es correo entrante o saliente, el
remitente puede ser un usuario externo o un usuario interno
respectivamente.
2.12.3 DOMINIO_REMITENTE (ALFANUMERICO / EXPRESION
REGULAR)
Contiene el dominio del remitente del correo electrónico. Dependiendo si
es correo entrante o saliente, el remitente puede ser un usuario externo o un
usuario interno respectivamente.
2.12.4 SUBJECT (ALFANUMERICO / EXPRESION REGULAR)
Contiene el asunto del correo electrónico.
2.12.5 BODY (ALFANUMERICO / EXPRESION REGULAR)
82
Contiene el cuerpo del correo electrónico.
2.12.6 DIRECCIONES_DESTINOS (ALFANUMERICO – CONJUNTO /
EXPRESION REGULAR - CONJUNTO)
Contiene la lista de direcciones de correo electrónico de los destinatarios.
Dependiendo si es correo entrante o saliente, los destinatarios pueden ser
usuarios internos o externos respectivamente.
2.12.7 NUMERO_DESTINATARIOS (NUMERICO)
Contiene la cantidad de destinatarios del correo electrónico. Dependiendo
si es correo entrante o saliente, los destinatarios pueden ser usuarios
internos o externos respectivamente.
2.12.8 MIME_FROM (ALFANUMERICO / EXPRESION REGULAR)
Contiene la dirección de correo electrónico del remitente, el campo FROM del
formato MIME. Dependiendo si es correo entrante o saliente, el remitente
puede ser un usuario externo o un usuario interno respectivamente.
2.12.9 CONTENT_LANGUAJE (ALFANUMERICO / EXPRESION
REGULAR)
83
Es lenguaje del formato MIME del correo electrónico.
2.12.10 NOMBRES_ARCHIVOS_ADJUNTOS (ALFANUMERICO -
CONJUNTO / EXPRESION REGULAR - CONJUNTO)
Contiene la lista de nombres de los archivos adjuntos del correo electrónico.
2.12.11 EXTENCIONES_ARCHIVOS_ADJUNTOS (ALFANUMERICO
– CONJUNTO / EXPRESION REGULAR - CONJUNTO)
Contiene la lista de extensiones de los archivos adjuntos del correo
electrónico.
2.12.12 ESTA_SMTP_TO_IGUAL_MIME_TO (ALFANUMERICO)
Contiene “S” si en el correo electrónico el campo SMTP TO es igual al campo
MIME TO, “N” en caso contrario.
2.12.13 ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS
(ALFANUMERICO)
Contiene “S” si el correo electrónico solo contiene archivos adjuntos (no se
incluye nada en el body), “N” en caso contrario.
2.12.14 DOMINIO_REMITENTE_VALIDO (ALFANUMERICO)
84
Contiene “S” si el dominio del remitente es válido (existe), “N” en caso
contrario. Dependiendo si es correo entrante o saliente, el remitente puede
ser un usuario externo o un usuario interno respectivamente.
2.12.15 JUEGOS_CARACTERES (ALFANUMERICO - CONJUNTO /
EXPRESION REGULAR - CONJUNTO)
Contiene los juegos de caracteres usados en el correo electrónico.
2.13 OPERADORES DE BRL
Se utilizan para realizar operaciones lógicas y de comparación entre las
variables BRL y los literales de datos. A continuación se describen los
operadores de BRL:
2.13.1 PARENTESIS_DE_APERTURA
Se representa con el símbolo "(". Es utilizado como elemento de inicio para
agrupar expresiones BRL.
2.13.2 PARENTESIS_DE_CIERRE
Se representa con el símbolo ")". Es utilizado como elemento de fin para
agrupar expresiones BRL.
2.13.3 CONJUNCION
85
Se representa con el símbolo "AND". Es utilizado para realizar una
operación de conjunción entre expresiones BRL.
2.13.4 DISYUNCION
Se representa con el símbolo "OR". Es utilizado para realizar una operación
de disyunción entre expresiones BRL.
2.13.5 IGUAL
Se representa con el símbolo "=". Es utilizado para realizar una operación de
comparación de igualdad entre una variable BRL y un literal de datos.
2.13.6 DESIGUAL
Se representa con el símbolo "!=". Es utilizado para realizar una operación
de comparación de desigualdad entre una variable BRL y un literal de datos.
2.13.7 MAYOR_QUE
Se representa con el símbolo ">". Este operador es utilizado para determinar
si el valor una variable BRL es mayor a un valor literal.
2.13.8 MAYOR_O_IGUAL_QUE
Se representa con el símbolo ">=". Este operador es utilizado para
determinar si el valor de una variable BRL es mayor o igual a un valor literal.
86
2.13.9 MENOR_QUE
Se representa con el símbolo "<". Este operador es utilizado para determinar
si el valor de una variable BRL es menor a un valor literal.
2.13.10 MENOR_O_IGUAL_QUE
Se representa con el símbolo "<=". Este operador es utilizado para
determinar si el valor de una variable BRL es menor o igual a un valor literal.
2.13.11 FORMA PARTE
Se representa con el símbolo “IN". Este operador es utilizado para
determinar si el valor de una variable forma parte de un conjunto de valores.
2.13.12 NO FORMA PARTE
Se representa con el símbolo "NOT_IN". Este operador es utilizado para
determinar si el valor de una variable no forma parte de un conjunto de
valores.
2.13.13 CADENA PARECIDA
Se representa con el símbolo "LIKE". Este operador es utilizado para
determinar si el valor de una variable cumple con un patrón de expresión
regular.
87
2.13.14 CADENA NO PARECIDA
Se representa con el símbolo "NOT_LIKE". Este operador es utilizado para
determinar si el valor de una variable no cumple con un patrón de expresión
regular.
2.13.15 CONTIENE
Se representa con el símbolo "CONTAINS". Este operador es utilizado para
determinar si el conjunto de valores de una variable de tipo conjunto contiene
un valor literal.
2.13.16 NO CONTIENE
Se representa con el símbolo "NOT_CONTAINS". Este operador es utilizado
para determinar si el conjunto de valores de una variable de tipo conjunto no
contiene un valor literal.
2.13.17 INTERSECTA
Se representa con el símbolo "INTERSECT". Este operador es utilizado para
determinar si un conjunto tiene elementos en común con otro conjunto, es
decir, realiza una intersección entre conjuntos.
2.13.18 NO SE INTERSECTA
88
Operador utilizado para determinar si un conjunto no tiene elementos en
común con otro conjunto. Se representa con el símbolo "NOT_INTERSECT".
Este operador representa la negación de una intersección entre conjuntos.
2.13.19 INTERSECTA CADENAS PARECIDAS
Se representa con el símbolo “INTERSECT_LIKE”. Este operador es la
versión del operador “INTERSECT” que utiliza expresiones regulares.
2.13.20 NO INTERSECTA CADENAS PARECIDAS
Se representa con el símbolo "NOT_INTERSECT_LIKE". Este operador es
la versión del operador “NOT_INTERSECT” que utiliza expresiones
regulares.
2.14 EJEMPLOS DE REGLAS EN BRL
A continuación se presentan ejemplos de reglas escritas en BRL:
EJEMPLO DE LISTA NEGRA DE DIRECCIONES IP
IP_ORIGEN IN {"2.34.124.210","61.9.88.129","61.11.11.232"}
EJEMPLO DE LISTA NEGRA DE DIRECCIONES DE CORREO
CORREO_REMITENTE IN
{"[email protected]","[email protected]","00jjohnson@citrom
ail.hu”}
89
EJEMPLO DE DETECCIÓN DE PALABRAS SPAM EN EL BODY DE
UN CORREO
BODY LIKE "(.*blackjack.*)|(.*party.*)”
DETECCION DE CORREO CON CARACTERISTICAS DE SPAM
ESTA_SMTP_TO_IGUAL_MIME_TO = "N" OR (
ES_CONTENIDO_SOLO_ARCHIVOS_ADJUNTOS = "S" AND
EXTENCIONES_ARCHIVOS_ADJUNTOS INTERSECT
{"JPG","JPEG","JPE","GIF","BMP","TIFF","TIF","PIC"}
) OR NUMERO_DESTINATARIOS >= 20
DETECCION DE ARCHIVOS ADJUNTOS EJECUTABLES
EXTENCIONES_ARCHIVOS_ADJUNTOS INTERSECT
{"exe","bat","com","dll"}
2.15 HIBERNATE
Es un framework opensource de mapeo objeto relacional para la plataforma
Java que hace posible la persistencia transparente de objetos planos java
(POJOS). Permite diseñar objetos persistentes que podrán incluir
polimorfismo, relaciones, colecciones, y un gran número de tipos de datos.
De una manera muy rápida y optimizada se pueden generar bases de datos
en cualquiera de los entornos soportados como Oracle, DB2, MySql, etc.
Hibernate facilita el mapeo de atributos entre una base de datos relacional
tradicional y el modelo de objetos de una aplicación, mediante anotaciones
en las clases persistente o mediante archivos declarativos (XML) que
90
permiten establecer estas relaciones. Este último es el mecanismo usado en
Bizshield Web Administrator.
Para configurar Hibernate, se incluye el archivo hibernate.cfg.xml en el
classpath de la aplicación web. El archivo hibernate.cfg.xml define
información acerca de la conexión de la base de datos, el contexto de la
sesión, manejo de las transacciones y los mapeos de los recursos. A
continuación se lista el archivo de configuración de Hibernate de Bizshield
Web Administrator:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property
name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</propert
y>
<property
name="hibernate.connection.password">12345678</property>
<property name="hibernate.connection.url">jdbc:mysql://Bizshield
.pro.ec:3306/deterministicos</property>
<property name="hibernate.connection.username">root</property>
91
<property
name="hibernate.current_session_context_class">thread</property>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtSubsistema
.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtTipoDato.h
bm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtReglaProce
so.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtComponent
eRegla.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtElementoC
onjunto.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtRegla.hbm.
xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtSubtipoDat
o.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtReglaAccio
n.hbm.xml" />
92
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtTipoOperad
or.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtParametroT
ipoAccion.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtProceso.hb
m.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtVariable.hb
m.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtVariablePro
ceso.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtOperador.h
bm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtSistema.hb
m.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtAccion.hbm
.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtTipoAccion.
hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtTipoAccionI
nconsistente.hbm.xml" />
93
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtParametroA
ccion.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtCorreo.hbm
.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtEjecucionPr
oceso.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtDatoEjecuci
onProceso.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtEvaluacion
Regla.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/DtEjecucionA
ccion.hbm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/AsEmpresa.h
bm.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/AsUsuario.hb
m.xml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/AsRol.hbm.x
ml" />
<mapping
resource="com/realmsoft/deterministicos/clasesPersistentes/AsUsuarioRol
.hbm.xml" />
94
</session-factory>
</hibernate-configuration>
2.16 DISPLAYTAG
Es una librería de tags jsp opensource diseñada para trabajar bajo una
arquitectura MVC, que permite el despliegue de información de forma tabular.
Esta librería es de gran utilidad cuando se quiere mostrar una colección de
datos en una tabla, permitiendo además agregar estilos, decoradores,
capacidad de exportación a distintos formatos, paginación y ordenamiento.
El tag principal de displaytag es table. Este tag puede recibir como
parámetro un objeto de la clase java.util.List, el cual representa nuestra
colección de objetos. Displaytag iterará a través de nuestra colección y
mostrará una columna por cada propiedad de los objetos. También podemos
definir manualmente el número de columnas a mostrar, los títulos y las
propiedades de los objetos que corresponden a cada columna.
Displaytag se configura a través del archivo displaytag.properties, el cual se
encuentra ubicado en la carpeta WEB-INF/classes.
95
Para poder utilizar displaytag debemos incluir las librerías displaytag-
1.1.1.jar, displaytag-porlet-1.1.1.jar, displaytag-export-poi-1.1.1.jar e itext-
1.3.1.jar.
2.17 ARCHIVO DISPLAYTAG.PROPERTIES DE BIZSHIELD WEB
ADMINISTRATOR
basic.empty.showtable=false
basic.show.header=true
# page | list
sort.amount=page
export.amount=list
export.decorated=true
paging.banner.group_size=8
paging.banner.placement=top
css.tr.even=even
css.tr.odd=odd
css.th.sorted=sorted
css.th.ascending=order1
css.th.descending=order2
css.table=
css.th.sortable=sortable
# factory classes for extensions
factory.requestHelper=org.displaytag.util.DefaultRequestHelperFactory
# factory class for decorators
factory.decorator=org.displaytag.decorator.DefaultDecoratorFactory
96
# locale provider (Jstl provider by default)
locale.provider=org.displaytag.localization.I18nJstlAdapter
# locale.resolver (nothing by default, simply use locale from request)
#locale.resolver=
export.types=csv excel xml pdf
export.csv.class=org.displaytag.export.CsvView
export.excel.class=org.displaytag.export.ExcelView
export.xml.class=org.displaytag.export.XmlView
export.pdf.class=org.displaytag.export.PdfView
export.csv=true
export.csv.label=<span class="export csv">CSV </span>
export.csv.include_header=false
export.csv.filename=
export.excel=true
export.excel.label=<span class="export excel">Excel </span>
export.excel.include_header=true
export.excel.filename=
export.xml=true
export.xml.label=<span class="export xml">XML </span>
export.xml.filename=
export.pdf=true
export.pdf.label=<span class="export pdf">PDF </span>
export.pdf.include_header=true
export.pdf.filename=
export.rtf=false
export.rtf.label=<span class="export rtf">RTF </span>
export.rtf.include_header=true
export.rtf.filename=
# messages
97
basic.msg.empty_list=No existen elementos para mostrar.
basic.msg.empty_list_row=<tr class\="empty"><td colspan\="{0}">No
existen elementos para mostrar.</td></tr>
error.msg.invalid_page=invalid page
export.banner=<div class\="exportlinks">Opciones de exportación\:
{0}</div>
export.banner.sepchar= |
paging.banner.item_name=item
paging.banner.items_name=items
paging.banner.no_items_found=<span class="pagebanner">No se
encontró ningún {0}.</span>
paging.banner.one_item_found=<span class="pagebanner">Un {0}encontrado.</span>
paging.banner.all_items_found=<span class="pagebanner">{0} {1}encontrados, mostrando todos los {2}.</span>
paging.banner.some_items_found=<span class="pagebanner">{0} {1}encontrados, mostrando de {2} a {3}.</span>
paging.banner.full=<span class="pagelinks">[<a
href="{1}">Primero</a>/<a href="{2}">Anterior</a>] {0} [<a
href="{3}">Siguiente</a>/<a href="{4}">Ultimo</a>]</span>
paging.banner.first=<span class="pagelinks">[Primero/Anterior] {0} [<a
href="{3}">Siguiente</a>/<a href="{4}">Ultimo</a>]</span>
paging.banner.last=<span class\="pagelinks">[<a
href\="{1}">Primero</a>/<a href\="{2}">Anterior</a>] {0}[Siguiente/Ultimo]</span>
paging.banner.onepage=<span class="pagelinks">{0}</span>
paging.banner.page.selected=<strong>{0}</strong>
paging.banner.page.link=<a href="{1}" title="Ir a la pagina {0}">{0}</a>
paging.banner.page.separator=,
pagination.sort.param=sort
98
pagination.sortdirection.param=dir
pagination.pagenumber.param=page
pagination.searchid.param=searchid
pagination.sort.asc.value=asc
pagination.sort.desc.value=desc
pagination.sort.skippagenumber=true
# unused
save.excel.banner=<a href="{0}" rel="external">save ({1} bytes)</a>
save.excel.filename=export.xls
2.18 DESCRIPTOR DE DESPLIEGUE DE BIZSHIELD WEB
ADMINISTRATOR (web.xml)
El descriptor de despliegue es un componente que describe cómo se debe
desplegar una aplicación web J2EE. Es un archivo llamado web.xml que se
encuentra dentro del directorio WEB-INF, debajo del directorio raíz de la
aplicación web. El descriptor de despliegue de Bizshield Web
Administrator se lista a continuación:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
99
<display-name>Bizshield WebAdministrator</display-name>
<filter>
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
<listener>
<listener-
class>com.realmsoft.util.listenerWeb.InicializadorContexto</listener-class>
</listener>
<listener>
<listener-
class>com.realmsoft.util.listenerWeb.ManejadorRequestHibernate</listene
r-class>
</listener>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
100
<error-page>
<error-code>403</error-code>
<location>/fail_access.jsp</location>
</error-page>
<error-page>
<exception-
type>javax.faces.application.ViewExpiredException</exception-type>
<location>/fail_session.jsp</location>
</error-page>
<security-constraint>
<display-name>Recursos de Usuario</display-name>
<web-resource-collection>
<web-resource-name>Area de Reportes</web-resource-name>
<url-pattern>/reportes/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USUARIO</role-name>
<role-name>ADMINISTRADOR</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<display-name>Recursos de Administrador</display-name>
<web-resource-collection>
<web-resource-name>Area de Configuration</web-resource-name>
<url-pattern>/configuración/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMINISTRADOR</role-name>
</auth-constraint>
</security-constraint>
101
<login-config>
<auth-method>FORM</auth-method>
<realm-name>BizshieldRealm</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/fail_login.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>ADMINISTRADOR</role-name>
</security-role>
<security-role>
<role-name>USUARIO</role-name>
</security-role>
<servlet>
<description></description>
<display-name>VisualizadorEmail</display-name>
<servlet-name>VisualizadorEmail</servlet-name>
<servlet-class>com.realmsoft.Bizshield
.reporte.VisualizadorEmail</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VisualizadorEmail</servlet-name>
<url-pattern>/reportes/VisualizadorEmail</url-pattern>
</servlet-mapping>
</web-app>
102
2.19 DETALLE DE LAS DIFERENTES CLASES UTILIZADAS EN EL
SISTEMA BIZSHIELD
Package com.realmsoft.Bizshield.actualizacionAutomatica
Class Summary
ActualizacionReglaEs un Servlet que se encarga del proceso de
actualización automática.
com.realmsoft.Bizshield .actualizacionAutomatica
Class ActualizacionRegla
java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
com.realmsoft.Bizshield
.actualizacionAutomatica.ActualizacionRegla
All Implemented Interfaces:
java.io.Serializable,javax.servlet.Servlet, javax.servlet.ServletConfig
public class ActualizacionRegla
extends javax.servlet.http.HttpServlet
Es un Servlet que se encarga del proceso de actualización automática.
103
Package com.realmsoft.Bizshield.beans
Class Summary
BizshieldUtilEs una clase que contiene métodos de utilidad de
la aplicación Bizshield Web Administrator.
ConfiguracionAccion
Es el managed bean en donde se almacena el
estado de los componentes y se definen las
validaciones, el comportamiento y las acciones
del formulario de configuración de acción
antispam.
ConfiguracionRegla
Es el managed bean en donde se almacena el
estado de los componentes y se definen las
validaciones, el comportamiento y las acciones
del formulario de configuración de regla
antispam.
ConfiguracionUsuario
Es el managed bean en donde se almacena el
estado de los componentes y se definen las
validaciones, el comportamiento y las acciones
del formulario de gestión de usuarios.
ReporteCorreoAnalizadoEs el managed bean que almacena el estado de
los componentes y realiza las consultas del
formulario de reporte de correos analizados.
ReporteReglaEvaluadaEs el managed bean que almacena el estado de
los componentes y realiza las consultas del
formulario de reporte de reglas evaluadas.
104
com.realmsoft.Bizshield.beans
Class BizshieldUtil
java.lang.Object
com.realmsoft.Bizshield.beans.BizshieldUtil
public class BizshieldUtil
extends java.lang.Object
Es una clase que contiene métodos de utilidad de la aplicación Bizshield Web
Administrator.
Detalle del método
logout
public java.lang.String logout()
Este método es el encargado de realizar el logout del usuario, invalidando su
sesión.
Returns:
inicioBizshield, este valor es usado como outcome en las reglas de
navegación.
com.realmsoft.Bizshield .beans
Class ConfiguracionAccion
java.lang.Object
105
com.realmsoft.Bizshield
.beans.ConfiguracionAccion
public class ConfiguracionAccion
extends java.lang.Object
Es el managed bean en donde se almacena el estado de los componentes y
se definen las validaciones, el comportamiento y las acciones del formulario
de configuración de acción antispam. Estas acciones son: crear, editar,
consultar y eliminar.
Detalle del método
actualizarAsociacionReglas
private void actualizarAsociacionReglas()
Este método es el encargado de llenar y sincronizar las listas de reglas
disponibles y reglas asociadas.
crear
public java.lang.String crear()
Este método es el encargado de crear la acción antispam. Primero se
asegura que los datos ingresados en el formulario son consistentes llamando
al método validarConfiguracionAccion, si esta validación es exitosa se delega
la operación de crear la acción en la base de datos al método
106
crearOActualizarAccion de la clase de negocios ConfiguracionAccionBO y se
actualiza la lista de acciones con la acción creada. El resultado de esta
operación es mostrado en el cuadro de texto Mensaje del Sistema del
formulario de configuración de acción.
Returns:
SUCCESS si la acción antispam se creó exitosamente, FAILURE en caso de
error.
editar
public java.lang.String editar()
Este método es el encargado de editar una acción antispam existente.
Primero se asegura que los datos ingresados en el formulario son
consistentes llamando al método validarConfiguracionAccion, si esta
validación es exitosa se delega la operación de editar la acción en la base de
datos al método crearOActualizarAccion de la clase de negocios
ConfiguracionAccionBO y se actualiza la lista de acciones con la acción
editada. El resultado de esta operación es mostrado en el cuadro de texto
Mensaje del Sistema del formulario de configuración de acción.
Returns:
SUCCESS si la acción antispam se editó exitosamente, FAILURE en caso de
error.
107
liberarRegla
public java.lang.String liberarRegla()
Este método es el encargado de quitar la regla seleccionada de la lista de
reglas asociadas a la acción.
Returns:
SUCCESS, este valor es usado como outcome en las reglas de navegación.
limpiarCamposFormulario
private void limpiarCamposFormulario()
Este método es el encargado de limpiar todos los campos del formulario de
configuración de acción.
llenarCamposFormulario
private void llenarCamposFormulario()
Este método es el encargado de llenar los campos del formulario de
configuración de acción con la información de la acción seleccionada. Para
ello realiza una búsqueda de los datos, los parámetros y las reglas asociadas
de la acción seleccionada utilizando los objetos de acceso a datos (DAO).
seleccionarRegla
public java.lang.String seleccionarRegla()
108
Este método es el encargado de agregar la regla seleccionada a la lista de
reglas asociadas a la acción.
Returns:
SUCCESS, este valor es usado como outcome en las reglas de navegación.
validarConfiguracionAccion
public java.lang.String validarConfiguracionAccion()
Este método es el encargado de validar los datos de una acción antispam.
Se comprueba los campos no estén vacíos, que el nombre de acción no
exista, que los parámetros de la acción sean correctos y que no se asocien
acciones inconsistentes a una regla.
Returns:
SUCCESS si la validación de la acción se realizó exitosamente, FAILURE en
caso de error.
validarParametrosAccion
public java.lang.String validarParametrosAccion()
Este método es el encargado de validar que los parámetros ingresados para
una acción sean correctos, dependiendo del subtipo de dato del parámetro.
Returns:
SUCCESS si la validación de los parámetros se realizó exitosamente,
FAILURE en caso de error.
109
com.realmsoft.Bizshield.beans
Class ConfiguracionRegla
java.lang.Object
com.realmsoft.Bizshield
.beans.ConfiguracionRegla
public class ConfiguracionRegla
extends java.lang.Object
Es el managed bean en donde se almacena el estado de los componentes y
se definen las validaciones, el comportamiento y las acciones del formulario
de configuración de regla antispam. Estas acciones son: crear, editar,
consultar y eliminar.
Constructor Detail
ConfiguracionRegla
public ConfiguracionRegla()
Este método es el constructor sin argumentos. Inicializa todos los miembros
del objeto y llena las listas de reglas, acciones, procesos, variables y
operadores.
Detalle del método
actualizarAsociacionAcciones
private void actualizarAsociacionAcciones()
110
Este método es el encargado de llenar y sincronizar las listas de acciones
disponibles y acciones asociadas.
crear
public java.lang.String crear()
Este método es el encargado de crear la regla antispam. Primero se asegura
que los datos ingresados en el formulario son consistentes llamando al
método validarConfiguracionRegla, si esta validación es exitosa se delega la
operación de crear la regla en la base de datos al método
crearOActualizarRegla de la clase de negocios ConfiguracionReglaBO y se
actualiza la lista de reglas con la regla creada. El resultado de esta operación
es mostrado en el cuadro de texto “Mensaje del Sistema” del formulario de
configuración de regla.
Returns:
SUCCESS si la regla antispam se creó exitosamente, FAILURE en caso de
error.
editar
public java.lang.String editar()
Este método es el encargado de editar una regla antispam existente. Primero
se asegura que los datos ingresados en el formulario son consistentes
llamando al método validarConfiguracionRegla, si esta validación es exitosa
111
se delega la operación de editar la regla en la base de datos al método
crearOActualizarRegla de la clase de negocios ConfiguracionReglaBO y se
actualiza la lista de reglas con la regla editada. El resultado de esta
operación es mostrado en el cuadro de texto “Mensaje del Sistema” del
formulario de configuración de regla.
Returns:
SUCCESS si la regla antispam se editó exitosamente, FAILURE en caso de
error.
eliminar
public java.lang.String eliminar()
Este método es el encargado de eliminar una regla antispam existente,
delega la operación de eliminar la regla en la base de datos al método
caducarRegla de la clase de negocios ConfiguracionReglaBO y actualiza la
lista de reglas.
Returns:
SUCCESS si la regla antispam se eliminó exitosamente, FAILURE en caso
de error.
liberarAccion
public java.lang.String liberarAccion()
112
Este método es el encargado de quitar la acción seleccionada de la lista de
acciones asociadas a la regla.
Returns:
SUCCESS, este valor es usado como outcome en las reglas de navegación.
limpiarCamposFormulario
private void limpiarCamposFormulario()
Este método es el encargado de limpiar todos los campos del formulario de
configuración de regla.
llenarCamposFormulario
private void llenarCamposFormulario()
Este método es el encargado de llenar los campos del formulario de
configuración de regla con la información de la regla seleccionada. Para ello
realiza una búsqueda de los datos y las acciones asociadas de la regla
seleccionada utilizando los objetos de acceso a datos (DAO).
seleccionarAccion
public java.lang.String seleccionarAccion()
Este método es el encargado de agregar la acción seleccionada a la lista de
acciones asociadas a la regla.
Returns:
SUCCESS, este valor es usado como outcome en las reglas de navegación.
113
validarConfiguracionRegla
public java.lang.String validarConfiguracionRegla()
Este método es el encargado de validar los datos de una regla antispam. Se
comprueba los campos no estén vacíos, que el nombre de regla no exista,
que no se asocien acciones inconsistentes a una regla y que el contenido de
la regla sea léxica y sintácticamente correcto acorde a la gramática de BRL.
Returns:
SUCCESS si la validación de la regla se realizó exitosamente, FAILURE en
caso de error.
validarContenidoRegla
public java.lang.String validarContenidoRegla()
Este método es el encargado de comprobar que el contenido de la regla sea
léxica y sintácticamente correcto acorde a la gramática de Bizshield Rules
Language, a través del método parse de la clase Bizshield Parser. Si se
encuentran errores en el parseo de la expresión BRL, se muestra un mensaje
en el cuadro de texto “Mensaje del Sistema” del formulario de configuración
de regla, indicando la posición del mismo.
Returns:
SUCCESS si el contenido de la regla se validó exitosamente, FAILURE en
caso de error.
114
com.realmsoft.Bizshield.beans
Class ConfiguracionUsuario
java.lang.Object
com.realmsoft.Bizshield.beans.ConfiguracionUsuario
public class ConfiguracionUsuario
extends java.lang.Object
Es el managed bean en donde se almacena el estado de los componentes y
se definen las validaciones, el comportamiento y las acciones del formulario
de gestión de usuarios. Estas acciones son: crear, editar, consultar y
eliminar.
ConfiguracionUsuario
public ConfiguracionUsuario()
Este método es el constructor sin argumentos. Inicializa todos los miembros
del objeto y llena las listas de usuarios y roles.
crear
public java.lang.String crear()
115
Este método es el encargado de crear el usuario. Primero se asegura que los
datos ingresados en el formulario son consistentes llamando al método
validarDatosUsuario, si esta validación es exitosa se delega la operación de
crear el usuario en la base de datos al método crearOActualizarUsuario de la
clase de negocios ConfiguracionUsuarioBO y se actualiza la lista de usuarios
con el usuario creado. El resultado de esta operación es mostrado en el
cuadro de texto “Mensaje del Sistema” del formulario de gestión de usuario.
Returns:
SUCCESS si el usuario se creó exitosamente, FAILURE en caso de error.
editar
public java.lang.String editar()
Este método es el encargado de editar un usuario existente. Primero se
asegura que los datos ingresados en el formulario son consistentes llamando
al método validarDatosUsuario, si esta validación es exitosa se delega la
operación de editar el usuario en la base de datos al método
crearOActualizarUsuario de la clase de negocios ConfiguracionUsuarioBO y
se actualiza la lista de usuarios con el usuario editado. El resultado de esta
operación es mostrado en el cuadro de texto “Mensaje del Sistema” del
formulario de gestión de usuarios.
Returns:
SUCCESS si el usuario se editó exitosamente, FAILURE en caso de error.
116
eliminar
public java.lang.String eliminar()
Este método es el encargado de eliminar un usuario existente, delega la
operación de eliminar el usuario en la base de datos al método
caducarUsuario de la clase de negocios ConfiguracionUsuarioBO y actualiza
la lista de usuarios.
Returns:
SUCCESS si el usuario se eliminó exitosamente, FAILURE en caso de error.
limpiarCamposFormulario
private void limpiarCamposFormulario()
Este método es el encargado de limpiar todos los campos del formulario de
gestión de usuario.
llenarCamposFormulario
private void llenarCamposFormulario()
Este método es el encargado de llenar los campos del formulario de gestión
de usuario con la información del usuario seleccionado. Para ello realiza una
búsqueda de los datos del usuario seleccionado utilizando los objetos de
acceso a datos (DAO).
117
validarDatosUsuario
public java.lang.String validarDatosUsuario()
Este método es el encargado de validar los datos de un usuario. Se
comprueba los campos no estén vacíos, que el nombre de usuario no exista
y que los valores ingresados tengan el formato correcto dependiendo del tipo
de dato.
Returns:
SUCCESS si la validación de los datos del usuario se realizó exitosamente,
FAILURE en caso de error.
com.realmsoft.Bizshield.beans
Class ReporteCorreoAnalizado
java.lang.Object
com.realmsoft.Bizshield
.beans.ReporteCorreoAnalizado
public class ReporteCorreoAnalizado
extends java.lang.Object
Es el managed bean que almacena el estado de los componentes y realiza
las consultas del formulario de reporte de correos analizados.
Constructor Detail
ReporteCorreoAnalizado
public ReporteCorreoAnalizado()
118
Este método es el constructor sin argumentos. Inicializa todos los miembros
del objeto y llena las listas de procesos y resultados de evaluación.
Detalle del método
actualizarFechas
private boolean actualizarFechas()
Este método es el encargado de comprobar que las fechas ingresadas
tengan el formato correcto y que sean válidas. El formato correcto es YYYY-
MM-DD.
Returns:
true si la fecha es correcta, false si es incorrecta.
consultarReporte
public java.lang.String consultarReporte()
Este método es el encargado de realizar la consulta de correos analizados a
través de los objetos de acceso a datos (DAO), tomando como parámetros el
proceso, el resultado de la ejecución de proceso, la fecha inicial de análisis y
la fecha final de análisis. Si la consulta retorna resultados estos se muestran
en una tabla de datos displaytag, con opciones de paginación y exportación.
Returns:
SUCCESS si la consulta se realizó exitosamente, FAILURE en caso de error.
limpiarCamposFormulario
119
public java.lang.String limpiarCamposFormulario()
Este método es el encargado de limpiar todos los parámetros de búsqueda y
resultados del formulario de reporte de correos analizados.
Returns:
reporteCorreosAnalizados, este valor es usado como outcome en las reglas
de navegación.
com.realmsoft.Bizshield.beans
Class ReporteReglaEvaluada
java.lang.Object
com.realmsoft.Bizshield.beans.ReporteReglaEvaluada
public class ReporteReglaEvaluada
extends java.lang.Object
Es el managed bean que almacena el estado de los componentes y realiza
las consultas del formulario de reporte de reglas evaluadas.
Constructor Detail
ReporteReglaEvaluada
public ReporteReglaEvaluada()
Este método es el constructor sin argumentos. Inicializa todos los miembros
del objeto y llena las listas de procesos y resultados de evaluación.
120
Detalle del método
actualizarFechas
private boolean actualizarFechas()
Este método es el encargado de comprobar que las fechas ingresadas
tengan el formato correcto y que sean válidas. El formato correcto es YYYY-
MM-DD.
Returns:
true si la fecha es correcta, false si es incorrecta.
consultarReporte
public java.lang.String consultarReporte()
Este método es el encargado de realizar la consulta de reglas evaluadas a
través de los objetos de acceso a datos (DAO), tomando como parámetros el
proceso, el resultado de la evaluación de la regla, la fecha inicial de
evaluación y la fecha final de evaluación. Si la consulta retorna resultados
estos se muestran en una tabla de datos displaytag, con opciones de
paginación y exportación.
Returns:
SUCCESS si la consulta se realizó exitosamente, FAILURE en caso de error.
limpiarCamposFormulario
public java.lang.String limpiarCamposFormulario()
121
Este método es el encargado de limpiar todos los parámetros de búsqueda y
resultados del formulario de reporte de reglas evaluadas.
Returns:
reporteReglasEvaluadas, este valor es usado como outcome en las reglas de
navegación.
Package com.realmsoft.Bizshield.reporte
Class Summary
CorreoAnalizado
Es una clase cuya instanciaes un DTO que representaun registro del resultado dela búsqueda de correosanalizados.
ReglaEvaluada
Es una clase cuya instanciaes un DTO que representaun registro del resultado dela búsqueda de reglasevaluadas.
VisualizadorEmail
Es un Servlet que seencarga de consultar ymostrar el contenido de uncorreo electrónico enformato MIME.
VisualizadorEmailDecorator
Es una clase de tipoTableDecorator que seencarga de manejar lapresentación de la columnaVer Correo del reporte decorreos analizados.
122
com.realmsoft.Bizshield.reporte
Class CorreoAnalizado
java.lang.Object
com.realmsoft.Bizshield.reporte.CorreoAnalizado
public class CorreoAnalizado
extends java.lang.Object
Es una clase cuya instancia es un DTO que representa un registro del
resultado de la búsqueda de correos analizados. Las propiedades de este
objeto son mostradas en la tabla displaytag.
Parameters:
idCorreo - identificador del correo
de - remitente del correo
para - destinatario del correo
ipOrigen - dirección IP del remitente
seEjecutaronReglas - flag que indica si se ejecutaron reglas
esSpam - flag que indica si el correo se clasificó como spam
fechaEjecucionProceso - fecha de ejecución del proceso
proceso - proceso ejecutado
123
com.realmsoft.Bizshield .reporte
Class ReglaEvaluada
java.lang.Object
com.realmsoft.Bizshield.reporte.ReglaEvaluada
public class ReglaEvaluada
extends java.lang.Object
Es una clase cuya instancia es un DTO que representa un registro del
resultado de la búsqueda de reglas evaluadas. Las propiedades de este
objeto son mostrados en la tabla displaytag.
Constructor Detail
ReglaEvaluada
public ReglaEvaluada(java.lang.String proceso,
java.lang.String fechaEvaluacionRegla,
java.lang.String reglaEvaluada,
java.lang.String accionEjecutada,
java.lang.String tipoAccionEjecutada,
java.lang.String resultadoEvaluacionRegla)
Este método es el constructor de la clase. Inicializa todos los miembros del
objeto.
124
Parameters:
proceso - proceso ejecutado
fechaEvaluacionRegla - fecha de evaluación de la regla
reglaEvaluada - regla evaluada
accionEjecutada - acción ejecutada
tipoAccionEjecutada - tipo de acción ejecutada
resultadoEvaluacionRegla - resultado de evaluación de la regla
com.realmsoft.Bizshield.reporte
Class VisualizadorEmail
java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
com.realmsoft.Bizshield
.reporte.VisualizadorEmail
All Implemented Interfaces:
java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig
public class VisualizadorEmail
extends javax.servlet.http.HttpServlet
Es un Servlet que se encarga de consultar y mostrar el contenido de un
correo electrónico en formato MIME.
125
processRequest
private void processRequest(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Este método se ejecuta cuando se llama al Servlets, ya sea de tipo get o
post. Recibe el identificador de correo como parámetro del request y con este
valor realiza la consulta de los datos del correo electrónico a través de los
objetos de acceso a datos (DAO). También se encarga de imprimir en el
response el contenido del correo electrónico en formato MIME.
Parameters:
request - request del protocolo http
response - response del protocolo http
com.realmsoft.Bizshield.reporte
Class VisualizadorEmailDecorator
java.lang.Object
org.displaytag.decorator.TableDecorator
com.realmsoft.Bizshield.reporte.VisualizadorEmailDecorator
public class VisualizadorEmailDecorator
extends org.displaytag.decorator.TableDecorator
Es una clase de tipo TableDecorator que se encarga de manejar la
presentación de la columna Ver Correo del reporte de correos analizados.
126
Versión:
1.0
Autor:
elfstone
Detalle del método
getLinkVisualizarEmail
public java.lang.String getLinkVisualizarEmail()
Este método construye el link al Servlets VisualizadorEmail, pasando el
identificador de cada correo como parámetro del request. El link es mostrado
en la columna Ver Correo del reporte de correos analizados.
Returns:
link al Servlets VisualizadorEmail, con el identificador de correo como
parámetro de request.
com.realmsoft.Bizshield.ejecutoresAcciones
Class AceptarCorreo
java.lang.Object
com.realmsoft.Bizshield.ejecutoresAcciones.AceptarCorreo
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
127
public class AceptarCorreo
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase AceptarCorreo es una implementación de la interfaz EjecutorAccion.
Esta clase ejecuta la acción de aceptar correo.
Detalle del método
ejecutarAccion
public void ejecutarAccion( com.realmsoft.deterministicos.
clasesPersistentes.DtEjecucionProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion p_datosP
araEjecutarAccion)
Método que ejecuta la acción aceptar correo
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción
128
com.realmsoft.Bizshield .calculadoresVariables
Class CalculadorContentLanguaje
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorContentLanguaje
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorContentLanguaje
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorContentLanguaje es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable ContentLanguaje
Versión:
1.0, 13/05/2009
Autor:
David Toala Mosquera
Detalle del método
calcularVariable
129
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable ContentLanguaje de los
correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorCorreoRemitente
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorCorreoRemitente
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorCorreoRemitente
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
130
La clase CalculadorCorreoRemitente es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable CorreoRemitente
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable Correo Remitente de los
correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorDireccionesDestinos
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorDireccionesDestinos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
131
public class CalculadorDireccionesDestinos
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorDireccionesDestinos es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable DireccionesDestinos
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable DireccionesDestino para los
correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorDominioRemitente
java.lang.Object
132
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorDominioRemitente
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorDominioRemitente
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorDominioRemitente es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable DominioRemitente
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable DominioRemitente para los
correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
133
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorDominioRemitenteValido
java.lang.Object
com.realmsoft.Bizshield.calculadoresVariables.CalculadorDominioRe
mitenteValido
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorDominioRemitenteValido
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorDominioRemitenteValido es una implementación de la
interfaz CalculadorVariable y tiene como responsabilidad calcular el valor de
la variable DominioRemitenteValido
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso p_dtEjecucionProceso)
134
Este método implementa el cálculo de la variable DominioRemitenteValido
para los correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield .calculadoresVariables
Class CalculadorEsContenidoSoloArchivosAdjuntos
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorEsContenidoSoloArchivosAdju
ntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorEsContenidoSoloArchivosAdjuntos
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorEsContenidoSoloArchivosAdjuntos es una
implementación de la interfaz CalculadorVariable y tiene como
responsabilidad calcular el valor de la variable
EsContenidoSoloArchivosAdjuntos
135
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable
EsContenidoSoloArchivosAdjuntos para los correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
buscarContenidoTextPlain
public void buscarContenidoTextPlain(javax.mail.Part p,
java.lang.StringBuilder builder)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
tieneArchivosAdjuntos
public boolean tieneArchivosAdjuntos(javax.mail.Part p)
136
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
com.realmsoft.Bizshield .calculadoresVariables
Class CalculadorEstaSmtpToIgualMimeTo
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorEstaSmtpToIgualMimeTo
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorEstaSmtpToIgualMimeTo
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorEstaSmtpToIgualMimeTo es una implementación de la
interfaz CalculadorVariable y tiene como responsabilidad calcular el valor de
la variable EstaSmtpToIgualMimeTo
Detalle del método
calcularVariable
137
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable EstaSmtpToIgualMimeTo
para los correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorExtensionesArchivosAdjuntos
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorExtensionesArchivosAdjuntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorExtensionesArchivosAdjuntos
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
138
La clase CalculadorExtensionesArchivosAdjuntos es una implementación de
la interfaz CalculadorVariable y tiene como responsabilidad calcular el valor
de la variable ExtensionesArchivosAdjuntos
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable
ExtensionesArchivosAdjuntos para los correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
recuperarExtenciones
public void recuperarExtenciones(javax.mail.Part p,
java.util.Set<java.lang.String> ps_extensionesArchivos)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
139
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorIpOrigen
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorIpOrigen
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorIpOrigen
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorIpOrigen es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable IpOrigen
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso p_dtEjecucionProceso)
Este método implementa el cálculo de la variable IpOrigen para los correos
entrantes y salientes
Specified by:
140
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield .calculadoresVariables
Class CalculadorJuegoCaracteres
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorJuegoCaracteres
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorJuegoCaracteres
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorJuegoCaracteres es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable JuegoCaracteres
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
141
Este método implementa el cálculo de la variable JuegoCaracteres para los
correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
recuperarJuegosCaracteres
public void recuperarJuegosCaracteres(javax.mail.Part p,
java.util.Set<java.lang.String> p_caracteres)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorMimeFrom
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorMimeFrom
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
142
public class CalculadorMimeFrom
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorMimeFrom es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable MimeFrom
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable MimeFrom para los correos
entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorNombresArchivosAdjuntos
java.lang.Object
143
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorNombresArchivosAdjuntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorNombresArchivosAdjuntos
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorNombresArchivosAdjuntos es una implementación de la
interfaz CalculadorVariable y tiene como responsabilidad calcular el valor de
la variable NombresArchivosAdjuntos
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable NombresArchivosAdjuntos
para los correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
144
recuperarNombres
public void recuperarNombres(javax.mail.Part p,
java.util.List<java.lang.String> ps_nombresArchivos)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorNumeroDestinatarios
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorNumeroDestinatarios
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
public class CalculadorNumeroDestinatarios
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
145
La clase CalculadorNumeroDestinatarios es una implementación de la
interfaz CalculadorVariable y tiene como responsabilidad calcular el valor de
la variable NumeroDestinatarios
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable NumeroDestinatarios para
los correos entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
com.realmsoft.Bizshield.calculadoresVariables
Class CalculadorSubject
java.lang.Object
com.realmsoft.Bizshield
.calculadoresVariables.CalculadorSubject
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.CalculadorVariable
146
public class CalculadorSubject
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.CalculadorVariable
La clase CalculadorSubject es una implementación de la interfaz
CalculadorVariable y tiene como responsabilidad calcular el valor de la
variable Subject
Detalle del método
calcularVariable
public java.lang.Object
calcularVariable(com.realmsoft.deterministicos.clasesPersistentes.DtEjecuci
onProceso proceso)
Este método implementa el cálculo de la variable Subject para los correos
entrantes y salientes
Specified by:
calcularVariable in interface
com.realmsoft.deterministicos.interfaces.CalculadorVariable
Package com.realmsoft.Bizshield.datosParaEjecutarAcciones
com.realmsoft.Bizshield.datosParaEjecutarAcciones
Class DatosCuarentenaArchivosAdjuntos
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.DatosQuitarArchivosAdjuntos
147
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.DatosCuarentenaArchivosAdjuntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
public class DatosCuarentenaArchivosAdjuntos
extends DatosQuitarArchivosAdjuntos
La clase DatosCuarentenaArchivosAdjuntos es una implementación de la
interfaz DatosQuitarArchivosAdjuntos, es el DTO que contienen los
parámetros de la acción CuarentenaArchivosAdjuntos
Detalle del método
getRutaCuarentena
public java.lang.String getRutaCuarentena()
Permite recuperar la ruta donde se pondrán los archivos en cuarentena
Returns:
la ruta donde se pondrán los archivos en cuarentena
setRutaCuarentena
public void setRutaCuarentena(java.lang.String rutaCuarentena)
Permite especificar la ruta donde se pondrán los archivos en cuarentena
Parameters:
148
rutaCuarentena - específica la ruta donde se pondrán los archivos en
cuarentena
com.realmsoft.Bizshield.datosParaEjecutarAcciones
Class DatosMensajeBody
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.DatosMensajeBody
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
public class DatosMensajeBody
extends java.lang.Object
implements
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
La clase DatosMensajeBody es una implementación de la interfaz
DatosQuitarArchivosAdjuntos, es el DTO que contienen los parámetros de la
acción AniadirMensajeBody
Detalle del método
getMensajeTxt
public java.lang.String getMensajeTxt()
Permite recuperar el mensaje que será añadido en la parte text/plain de los
datos MIME del correo
149
Returns:
el mensaje que será añadido en la parte text/plain de los datos MIME del
correo
setMensajeTxt
public void setMensajeTxt(java.lang.String mensajeTxt)
Permite especificar el mensaje que será añadido en la parte text/plain de los
datos MIME del correo
Parameters:
mensajeTxt - especifica el mensaje que será añadido en la parte text/plain de
los datos MIME del correo
getMensajeHtml
public java.lang.String getMensajeHtml()
Permite recuperar el mensaje que será añadido en la parte text/html de los
datos MIME del correo
Returns:
el mensaje que será añadido en la parte text/html de los datos MIME del
correo
setMensajeHtml
public void setMensajeHtml(java.lang.String mensajeHtml)
150
Permite especificar el mensaje que será añadido en la parte text/html de los
datos MIME del correo
Parameters:
mensajeHtmlespecifica - el mensaje que será añadido en la parte text/html de
los datos MIME del correo
com.realmsoft.Bizshield.datosParaEjecutarAcciones
Class DatosMensajeSubject
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.DatosMensajeSubject
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
public class DatosMensajeSubject
extends java.lang.Object
implements
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
La clase DatosMensajeSubject es una implementación de la interfaz
DatosQuitarArchivosAdjuntos, es el DTO que contienen los parámetros de la
acción AniadirMensajeSubject
Detalle del método
getMensajeSubject
151
public java.lang.String getMensajeSubject()
Permite recuperar el mensaje adicional que será añadido en el subject del
correo
Returns:
el mensaje adicional que será añadido en el subject del correo
setMensajeSubject
public void setMensajeSubject(java.lang.String mensajeSubject)
Permite especificar el mensaje adicional que será añadido en el subject del
correo
Parameters:
mensajeSubject - específica el mensaje adicional que será añadido en el
subject del correo
com.realmsoft.Bizshield .datosParaEjecutarAcciones
Class DatosQuitarArchivosAdjuntos
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.DatosQuitarArchivosAdjuntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
Direct Known Subclasses:
DatosCuarentenaArchivosAdjuntos
152
public class DatosQuitarArchivosAdjuntos
extends java.lang.Object
implements
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
La clase DatosQuitarArchivosAdjuntos es una implementación de la interfaz
DatosQuitarArchivosAdjuntos, es el DTO que contienen los parámetros de la
acción QuitarArchivosAdjuntos
Detalle del método
getPatronArchivoAdjunto
public java.lang.String getPatronArchivoAdjunto()
Permite recuperar el patrón de nombre de archivo adjunto que se utilizara
para quitar archivos adjuntos del correo
Returns:
el patrón de nombre de archivo adjunto que se utilizara para quitar archivos
adjuntos
setPatronArchivoAdjunto
public void
setPatronArchivoAdjunto(java.lang.String patronArchivoAdjunto)
Permite especificar el patrón de nombre de archivo adjunto que se utilizara
para quitar archivos adjuntos del correo
153
Parameters:
patronesArchivosAdjunto - específica el patrón de nombre de archivo adjunto
que se utilizara para quitar archivos adjuntos
com.realmsoft.Bizshield.datosParaEjecutarAcciones
Class Datosr
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.Datosr
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
public class Datosr
extends java.lang.Object
implements
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
La clase Datosr es una implementación de la interfaz
DatosQuitarArchivosAdjuntos, es el DTO que contienen los parámetros de la
acción r
Detalle del método
getListaCorreos
public java.lang.String getListaCorreos()
Permite la recuperar la lista de correos a re direccionar
154
Returns:
la lista de correos a re direccionar
setListaCorreos
public void setListaCorreos(java.lang.String listaCorreos)
Permite especificar la lista de correos a re direccionar
Parameters:
listaCorreos - especifica la lista de correos a re direccionar
com.realmsoft.Bizshield.datosParaEjecutarAcciones
Class DatosResponderRemitente
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.DatosResponderRemitente
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
public class DatosResponderRemitente
extends java.lang.Object
implements
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
155
La clase DatosResponderRemitente es una implementación de la interfaz
DatosQuitarArchivosAdjuntos, es el DTO que contienen los parámetros de la
acción ResponderRemitente
Detalle del método
getSubject
public java.lang.String getSubject()
Permite recuperar el subject que será utilizado en el correo de respuesta al
remitente
Returns:
el subject que será utilizado en el correo de respuesta al remitente
setSubject
public void setSubject(java.lang.String subject)
Permite especificar el subject que será utilizado en el correo de respuesta al
remitente
Parameters:
subject - específica el subject que será utilizado en el correo de respuesta al
remitente
getContenido
public java.lang.String getContenido()
156
Permite recuperar el contenido del mensaje que será utilizado en el correo de
respuesta al remitente
Returns:
el contenido del mensaje que será utilizado en el correo de respuesta al
remitente
setContenido
public void setContenido(java.lang.String contenido)
Permite especificar el contenido del mensaje que será utilizado en el correo
de respuesta al remitente
Parameters:
contenido - especifica el contenido del mensaje que será utilizado en el
correo de respuesta al remitente
com.realmsoft.Bizshield.datosParaEjecutarAcciones
Class SinDatos
java.lang.Object
com.realmsoft.Bizshield
.datosParaEjecutarAcciones.SinDatos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
157
public class SinDatos
extends java.lang.Object
implements
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion
La clase SinDatos es una implementación de la interfaz
DatosQuitarArchivosAdjuntos, deberá ser usada para las acciones que no
necesitan parámetros.
Package com.realmsoft.Bizshield.ejecutoresAcciones
com.realmsoft.Bizshield .ejecutoresAcciones
Class AceptarCorreo
java.lang.Object
com.realmsoft.Bizshield
.ejecutoresAcciones.AceptarCorreo
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
public class AceptarCorreo
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
158
La clase AceptarCorreo es una implementación de la interfaz EjecutorAccion.
Esta clase ejecuta la acción de aceptar correo.
Detalle del método
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion p_datosP
araEjecutarAccion)
Método que ejecuta la acción aceptar correo
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción
com.realmsoft.Bizshield.ejecutoresAcciones
Class AniadirMensajeBody
java.lang.Object
159
com.realmsoft.Bizshield
.ejecutoresAcciones.AniadirMensajeBody
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
public class AniadirMensajeBody
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase AniadirMensajeBody es una implementación de la interfaz
EjecutorAccion. Esta clase ejecuta la acción añadir mensaje al body.
Detalle del método
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion paraEjecu
tarAccion)
Método que ejecuta la acción añadir mensaje en el body
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
160
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción, en
realidad deberá se una instancia de la clase DatosMensajeBody
buscarPartByMymeType
public javax.mail.Part buscarPartByMymeType(javax.mail.Part p,
java.lang.String ps_mymeType)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
com.realmsoft.Bizshield.ejecutoresAcciones
Class CuarentenaArchivosAdjuntos
java.lang.Object
com.realmsoft.Bizshield
.ejecutoresAcciones.CuarentenaArchivosAdjuntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
161
public class CuarentenaArchivosAdjuntos
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase CuarentenaArchivosAdjuntos es una implementación de la interfaz
EjecutorAccion. Esta clase ejecuta la acción de poner en cuarentena archivos
adjuntos del correo.
Detalle del método
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion paraEjecu
tarAccion)
Método que ejecuta la acción poner en cuarentena los archivos adjuntos del
correo
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
162
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción, en
realidad deberá se una instancia de la clase DatosMensajeBody
eliminarArchivosAdjuntos
public boolean eliminarArchivosAdjuntos(javax.mail.Part p,
java.lang.String ps_patronesArchivos,
java.util.ArrayList<javax.mail.BodyPart> p_partesQueSonArchivo)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
com.realmsoft.Bizshield.ejecutoresAcciones
Class QuitarArchivosAdjuntos
java.lang.Object
com.realmsoft.Bizshield
.ejecutoresAcciones.QuitarArchivosAdjuntos
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
public class QuitarArchivosAdjuntos
extends java.lang.Object
163
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase QuitarArchivosAdjuntos es una implementación de la interfaz
EjecutorAccion. Esta clase ejecuta la acción quitar archivos adjuntos del
correo.
Detalle del método
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion paraEjecu
tarAccion)
Método que ejecuta la acción quitar archivos adjuntos del correo electrónico
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción, en
realidad deberá se una instancia de la clase DatosMensajeBody
164
eliminarArchivosAdjuntos
public boolean eliminarArchivosAdjuntos(javax.mail.Part p,
java.lang.String ps_patronesArchivos)
throws javax.mail.MessagingException,
java.io.IOException
Throws:
javax.mail.MessagingException
java.io.IOException
com.realmsoft.Bizshield.ejecutoresAcciones
Class RechazarCorreo
java.lang.Object
com.realmsoft.Bizshield
.ejecutoresAcciones.RechazarCorreo
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
public class RechazarCorreo
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase RechazarCorreo es una implementación de la interfaz
EjecutorAccion. Esta clase ejecuta la acción rechazar correo.
Detalle del método
165
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion p_datosP
araEjecutarAccion)
Método que ejecuta la acción rechazar correo electrónico
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción, en
realidad deberá se una instancia de la clase DatosMensajeBody
com.realmsoft.Bizshield.ejecutoresAcciones
Class r
java.lang.Object
com.realmsoft.Bizshield .ejecutoresAcciones.r
All Implemented Interfaces:
166
com.realmsoft.deterministicos.interfaces.EjecutorAccion
public class r
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase r es una implementación de la interfaz EjecutorAccion. Esta clase
ejecuta la acción re direccionar correo.
Detalle del método
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion p_datosP
araEjecutarAccion)
Método que ejecuta la acción re direccionar correo electrónico
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
167
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción, en
realidad deberá se una instancia de la clase DatosMensajeBody
com.realmsoft.Bizshield.ejecutoresAcciones
Class ResponderRemitente
java.lang.Object
com.realmsoft.Bizshield
.ejecutoresAcciones.ResponderRemitente
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.EjecutorAccion
public class ResponderRemitente
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.EjecutorAccion
La clase ResponderRemitente es una implementación de la interfaz
EjecutorAccion. Esta clase ejecuta la acción responder a remitente del
correo.
Detalle del método
ejecutarAccion
public void
ejecutarAccion(com.realmsoft.deterministicos.clasesPersistentes.DtEjecucio
nProceso proceso,
168
com.realmsoft.deterministicos.interfaces.DatosParaEjecutarAccion paraEjecu
tarAccion)
Método que ejecuta la acción responder a remitente de correo electrónico
Specified by:
ejecutarAccion in interface
com.realmsoft.deterministicos.interfaces.EjecutorAccion
Parameters:
p_instanciaProceso - es la instancia de una ejecución de proceso sobre el
cual se ejecutara la acción
p_datosParaEjecutarAccion - los datos necesarios para ejecutar la acción, en
realidad deberá se una instancia de la clase DatosMensajeBody
Package com.realmsoft.Bizshield.procesos
com.realmsoft.Bizshield.procesos
Class CorreoEntranteSaliente
java.lang.Object
com.realmsoft.Bizshield
.procesos.CorreoEntranteSaliente
All Implemented Interfaces:
com.realmsoft.deterministicos.interfaces.Proceso
public class CorreoEntranteSaliente
169
extends java.lang.Object
implements com.realmsoft.deterministicos.interfaces.Proceso
La clase CorreoEntranteSaliente es una implementación de la interfaz
Proceso y tiene como responsabilidad dar acceso a los datos del Correo
(Entrante o Saliente)
Detalle del método
getIpOrigen
public java.lang.String getIpOrigen()
Permite recuperar la IP origen del correo
Returns:
IP origen del correo
setIpOrigen
public void setIpOrigen(java.lang.String ipOrigen)
Permite especificar la IP origen del correo
Parameters:
ipOrigen - es la IP origen del correo a especificar
getCorreoRemitente
public java.lang.String getCorreoRemitente()
Permite recuperar la dirección remitente del correo
Returns:
170
dirección remitente del correo
setCorreoRemitente
public void setCorreoRemitente(java.lang.String correoRemitente)
Permite especificar la dirección de correo remitente
Parameters:
correoRemitente - es la dirección de correo remitente a especificar
getDominioRemitente
public java.lang.String getDominioRemitente()
Permite recuperar el dominio de la dirección de correo remitente
Returns:
el dominio de la dirección de correo remitente
setDominioRemitente
public void setDominioRemitente(java.lang.String dominioRemitente)
Permite especificar el dominio de la dirección de correo remitente
Parameters:
dominioRemitente - es el dominio de la dirección de correo remitente a
especificar
getSubject
171
public java.lang.String getSubject()
Permite recuperar el subject del correo
Returns:
el subject
setSubject
public void setSubject(java.lang.String subject)
Permite especificar el subject del correo
Parameters:
subject - es el subject del correo a especificar
getBody
public java.lang.String getBody()
Permite recuperar el body del correo
Returns:
el body del correo
setBody
public void setBody(java.lang.String body)
Permite especificar el body del correo
Parameters:
body - el body del correo a especificar
172
getDireccionesDestinos
public java.util.Collection<java.lang.String> getDireccionesDestinos()
Permite recuperar las direcciones destino del correo
Returns:
las direcciones destino del correo
setDireccionesDestinos
public void
setDireccionesDestinos(java.util.Collection<java.lang.String> direccionesDe
stinos)
Permite especificar las direcciones destino del correo
Parameters:
direccionesDestinos - las direcciones destino del correo a especificar
getNumeroDestinatarios
public java.lang.Integer getNumeroDestinatarios()
Permite recuperar el número de destinatarios del correo
Returns:
el número de destinatarios del correo
setNumeroDestinatarios
173
public void setNumeroDestinatarios(java.lang.Integer numeroDestinatarios)
Permite especificar el número de destinatarios del correo
Parameters:
numeroDestinatarios - el número de destinatarios del correo a especificar
getMimeFrom
public java.lang.String getMimeFrom()
Permite recuperar el campo mime from del correo
Returns:
el mime from del correo
setMimeFrom
public void setMimeFrom(java.lang.String mimeFrom)
Permite especificar el campo mime from del correo
Parameters:
mimeFrom - el campo mime from del correo a especificar
getContentLanguaje
public java.lang.String getContentLanguaje()
Permite recuperar el campo content languaje del correo
Returns:
el campo conten languaje del correo
174
setContentLanguaje
public void setContentLanguaje(java.lang.String contentLanguaje)
Permite especificar el campo content languaje del correo
Parameters:
contentLanguaje - el campo content languaje del correo a especificar
getNombresArchivosAdjuntos
public java.util.Collection<java.lang.String> getNombresArchivosAdjuntos()
Permite recuperar el listado de nombres de los archivos adjuntos del correo
Returns:
el listado de nombres de los archivos adjuntos del correo
setNombresArchivosAdjuntos
public void
setNombresArchivosAdjuntos(java.util.Collection<java.lang.String> nombr
esArchivosAdjuntos)
Permite especificar el listado de nombres de los archivos adjuntos del correo
Parameters:
nombresArchivosAdjuntos - el listado de nombres de los archivos adjuntos
del correo a especificar
175
getExtensionesArchivosAdjuntos
public java.util.Collection<java.lang.String>
getExtensionesArchivosAdjuntos()
Permite recuperar el listado de extensiones de los archivos adjuntos del
correo
Returns:
el listado de extensiones de los archivos adjuntos del correo
setExtensionesArchivosAdjuntos
public void
setExtensionesArchivosAdjuntos(java.util.Collection<java.lang.String> ext
ensionesArchivosAdjuntos)
Permite especificar el listado de extensiones de los archivos adjuntos del
correo
Parameters:
extensionesArchivosAdjuntos - el listado de extensiones de los archivos
adjuntos del correo a especificar
getEstaSmtpToIgualMimeTo
public java.lang.String getEstaSmtpToIgualMimeTo()
Permite recuperar la bandera estaSmtpToIgualMimeTo del correo
Returns:
176
la bandera estaSmtpToIgualMimeTo del correo
setEstaSmtpToIgualMimeTo
public void
setEstaSmtpToIgualMimeTo(java.lang.String estaSmtpToIgualMimeTo)
Permite especificar la bandera estaSmtpToIgualMimeTo del correo
Parameters:
estaSmtpToIgualMimeTo - la bandera estaSmtpToIgualMimeTo del correo a
especificar
getEsContenidoSoloArchivosAdjuntos
public java.lang.String getEsContenidoSoloArchivosAdjuntos()
Permite recuperar la bandera esContenidoSoloArchivosAdjuntos del correo
Returns:
la bandera esContenidoSoloArchivosAdjuntos del correo
setEsContenidoSoloArchivosAdjuntos
public void
setEsContenidoSoloArchivosAdjuntos(java.lang.String esContenidoSoloA
rchivosAdjuntos)
Permite especificar la bandera esContenidoSoloArchivosAdjuntos del correo
Parameters:
177
esContenidoSoloArchivosAdjuntos - la bandera
esContenidoSoloArchivosAdjuntos del correo a especificar
getDominioRemitenteValido
public java.lang.String getDominioRemitenteValido()
Permite recuperar la bandera dominioRemitenteValido del correo
Returns:
la bandera dominioRemitenteValido del correo
setDominioRemitenteValido
public void
setDominioRemitenteValido(java.lang.String dominioRemitenteValido)
Permite especificar la bandera dominioRemitenteValido del correo
Parameters:
dominioRemitenteValido - la bandera dominioRemitenteValido del correo ha
especificar
getJuegoCaracteres
public java.util.Collection<java.lang.String> getJuegoCaracteres()
Permite recuperar la lista de juego de caracteres del correo
Returns:
la lista de juego de caracteres del correo
178
setJuegoCaracteres
public void
setJuegoCaracteres(java.util.Collection<java.lang.String> juegoCaracteres)
Permite especificar la lista de juego de caracteres del correo
Parameters:
juegoCaracteres - la lista de juego de caracteres del correo ha especificar
Package com.realmsoft.Bizshield.server
com.realmsoft.Bizshield .server
Class BizshieldService
java.lang.Object
com.realmsoft.Bizshield
.server.BizshieldService
public class BizshieldService
extends java.lang.Object
La Clase BizshieldService representa el servicio BizshieldService.
Descripción Funcional: una vez iniciado el servicio, comenzara a procesar
los correos electrónicos entrantes y salientes, evaluando las reglas
habilitantes, excluyentes y de control, debidamente configuradas en el
sistema, las que permitirán detectar los correos electrónicos considerados
179
como SPAM y no SPAM. Además ejecutara las acciones de control
configuradas sobre los correos electrónicos. Descripción Técnica: esta
clase es ejecutable debido a que tiene un método main, el cual al ser
ejecutado levantara los hilos necesarios para el procesamiento de correos
spam
Detalle del método
shutdown
public static void shutdown()
Provee una forma segura para parar todos los hilos de procesamiento del
BizshieldServices
main
public static void main(java.lang.String[] args)
Método para arrancar el Bizshield Services
com.realmsoft.Bizshield.server
Class MonitorActualizaciones
java.lang.Object
com.realmsoft.Bizshield
.server.MonitorActualizaciones
All Implemented Interfaces:
ConstantesParametroConfiguracion, java.lang.Runnable
180
public class MonitorActualizaciones
extends java.lang.Object
implements java.lang.Runnable,ConstantesParametroConfiguracion
La clase MonitorActualizaciones, es un hilo que se encarga buscar en el
repositorio público de reglas y en caso de encontrar nuevas definiciones
actualiza las reglas locales. El repositorio de reglas Bizshield al que se
accede para la actualización esta configurado en el archivo Bizshield .conf
en el parámetro especificado en la constante
realmsoft.Bizshield.server.configuration.ConstantesParametroConfiguracion
.URL_ACTUALIZACION
Detalle del método
ejecutarCambiarRegla
public void ejecutarCambiarRegla(java.lang.Long pl_idRegla,
java.lang.String ps_regla)
throws java.io.IOException,
java.lang.ClassNotFoundException
Implantación del método de hilo, el cual realiza la lógica de actualización
automática de las definiciones de las reglas.
Throws:
java.io.IOException
java.lang.ClassNotFoundException
181
run
public void run()
Specified by:
run in interface java.lang.Runnable
shutdown
public void shutdown()
Método para de manera segura el hilo de actualizaciones
com.realmsoft.Bizshield.server
Class MonitorReglas
java.lang.Object
com.realmsoft.Bizshield.server.MonitorReglas
All Implemented Interfaces:
java.lang.Runnable
public class MonitorReglas
extends java.lang.Object
implements java.lang.Runnable
La clase MonitorReglas, es un hilo que se encarga de ejecutar
frecuentemente el proceso que sensarActualizarReglas de la clase
com.realmsoft.Bizshield.server.TraductorBO. Este hilo es el que permite que
182
las reglas modificadas en la base de datos se vean reflejadas en los archivos
de reglas Drools (.drl)
Detalle del método
run
public void run()
Implantación del método de hilo, ejecuta cada 2 segundos el método
sensarActualizarReglas de la clase
com.realmsoft.Bizshield.server.TraductorBO mientras el subsistema
BizshieldServices iniciado.
Specified by:
run in interface java.lang.Runnable
shutdown
public void shutdown()
Método para detener de manera segura el hilo de monitorización de cambios
de reglas.
com.realmsoft.Bizshield.server
Class MonitorShutdown
java.lang.Object
com.realmsoft.Bizshield
.server.MonitorShutdown
All Implemented Interfaces:
183
java.lang.Runnable
public class MonitorShutdown
extends java.lang.Object
implements java.lang.Runnable
La clase MonitorReglas, es un hilo que se encarga de ejecutar
frecuentemente el proceso que sensarActualizarReglas de la clase
com.realmsoft.Bizshield .server.TraductorBO. Este hilo
es el que permite que las reglas modificadas en la base de datos se vean
reflejadas en los archivos de reglas Drools (.drl)
Detalle del método
run
public void run()
Implantación del método de hilo, ejecuta cada 2 segundos el método
sensarActualizarReglas de la clase
com.realmsoft.Bizshield.server.TraductorBO mientras el subsistema
BizshieldServices iniciado.
Specified by:
run in interface java.lang.Runnable
shutdown
public void shutdown()
184
Método para detener de manera segura el hilo de monitorización de cambios
de reglas
com.realmsoft.Bizshield.server
Class ShutdownService
java.lang.Object
com.realmsoft.Bizshield
.server.ShutdownService
All Implemented Interfaces:
java.lang.Runnable
public class ShutdownService
extends java.lang.Object
implements java.lang.Runnable
Hilo que se ejecuta automáticamente cuando el sistema operativo o el
usuario solicitan que el subsistema BizshieldServices se detenga, tiene como
responsabilidad iniciar la parada de todos los hilos del subsistema
BizshieldService
Detalle del método
run
public void run()
185
Implantación del método de hilo, que ejecuta el método
BizshieldService.shutdown()
Package com.realmsoft.Bizshield.server.configuration
com.realmsoft.Bizshield .server.configuration
Interface ConstantesParametroConfiguracion
All Known Implementing Classes:
ConfigurationManager, MonitorActualizaciones
public interface ConstantesParametroConfiguracion
Constantes usadas como parámetros en el archivo de configuración
Bizshield.conf
Field Detail
SMTPPORT
static final java.lang.String SMTPPORT
Puerto donde se levantara el servicio SMTP
Véase también:
Constant Field Values
DOMAINS
static final java.lang.String DOMAINS
186
Dominio del servidor SMTP que será protegido por Bizshield
Véase también:
Constant Field Values
EXECUTE_THREADS
static final java.lang.String EXECUTE_THREADS
Numero de hilos que atenderán las peticiones de correos SMTP
Véase también:
Constant Field Values
DEFAULT_SMTP_SERVERS
static final java.lang.String DEFAULT_SMTP_SERVERS
IP del SMTP Server que será protegido por Bizshield
Véase también:
Constant Field Values
LOGGING_DEFAULT_THRESHOLD
static final java.lang.String LOGGING_DEFAULT_THRESHOLD
Nivel de registro de logs por defecto
Véase también:
Constant Field Values
187
DNS_SERVER
static final java.lang.String DNS_SERVER
IP del DNS Server
Véase también:
Constant Field Values
URL_ACTUALIZACION
static final java.lang.String URL_ACTUALIZACION
Url donde reside el repositorio publico para las actualizaciones
Véase también:
Constant Field Values
com.realmsoft.Bizshield.server.configuration
Class ConfigurationManager
java.lang.Object
com.realmsoft.Bizshield
.server.configuration.ConfigurationManager
All Implemented Interfaces:
ConstantesParametroConfiguracion
public class ConfigurationManager
extends java.lang.Object
188
implements ConstantesParametroConfiguracion
Provee un repositorio centralizado para toda la información de configuración.
Toda la información de configuración deberá recuperada desde esta clase. El
ConfigurationManager se recargara los cambios en la configuración
dinámicamente. Las clases pueden almacenar en una referencia a la
instancia ConfigurationManager, ya que solo existe una solo instancia para
esta clase.
Detalle del método
initialize
public static ConfigurationManager
initialize(java.lang.String configurationDirectory)
throws java.lang.RuntimeException
Inicializa el ConfigurationManager usando el directorio especificado. Este
método sólo debe ser llamado una sola vez durante el arranque, y luego
nunca más. La ruta del archivo no se puede volver a inicializar!
Parameters:
configurationDirectory - - el directorio que contiene el archivo Bizshield.conf
Returns:
retorna la instancia singleton del ConfigurationManager
Throws:
189
java.lang.RuntimeException - - lanzada si es llamada mas de una vez, el
archivo Bizshield.conf no existe o si hay un error al cargar el archivo
Bizshiel.conf
inicializarObservadorCambios
public void inicializarObservadorCambios()
getInstance
public static ConfigurationManager getInstance()
Provee acceso a la instancia singleton
Returns:
la instancia singleton
loadProperties
public void loadProperties()
getLocalDomains
public java.lang.String[] getLocalDomains()
Recupera el dominio del SMTP server que será protegido por Bizshield
Returns:
190
el dominio del SMTP server que será protegido por Bizshield
setLocalDomains
public void setLocalDomains(java.lang.String[] localDomains)
Permite especificar el dominio del SMTP server que será protegido por
Bizshield
Parameters:
localDomains - es el dominio del SMTP server que se especifica para que
sea protegido por Bizshield
getExecuteThreadCount
public int getExecuteThreadCount()
Recupera el número de hilos que atenderán las peticiones SMTP
Returns:
el número de hilos que atenderán las peticiones SMTP
setExecuteThreadCount
public void setExecuteThreadCount(int executeThreadCount)
Permite especificar el número de hilos que atenderán las peticiones SMTP
Parameters:
191
executeThreadCount - es el numero de hilos que se especifican para que
atiendan las peticiones SMTP
getSmtpPort
public int getSmtpPort()
Recupera el número del puerto de sistema operativo por donde se atenderán
las peticiones SMTP
Returns:
el número del puerto de sistema operativo por donde se atenderán las
peticiones SMTP
setSmtpPort
public void setSmtpPort(int smtpPort)
Permite especificar el número del puerto de sistema operativo por donde se
atenderá las peticiones SMTP
Parameters:
smtpPort - es el numero del puerto de sistema operativo que se especifica
por donde se atenderá las peticiones SMTP
tokenize
public static java.lang.String[] tokenize(java.lang.String value)
Este método divide la cadena, utilizando la (,) como caracter de división
192
Parameters:
value - Cadena de caracteres a dividir
Returns:
el arreglo de caracteres con cada una de las subcadenas
getServidorCorreo
public SmtpServer getServidorCorreo()
Recupera un objeto que contiene la información del SMTP Server
Returns:
un objeto con la información del SMTP Server
setServidorCorreo
public void setServidorCorreo(SmtpServer servidorCorreo)
Permite especificar el objeto que contiene la información del SMTP Server
Parameters:
servidorCorreo - es el objeto especificado que contiene la información del
SMTP Server
getUrlActualizacion
public java.net.URL getUrlActualizacion()
Recupera una cadena con la Url que hace referencia al repositorio de
actualización automática
193
Returns:
el URL que hacer referencia al repositorio de actualización automática
com.realmsoft.Bizshield.server.configuration
Class SmtpServer
java.lang.Object
com.realmsoft.Bizshield
.server.configuration.SmtpServer
public class SmtpServer
extends java.lang.Object
La clase SmtpServer es una clase DTO, que encapsula los datos del SMTP
Server
Detalle del método
getHost
public java.lang.String getHost()
Permite recuperar el host del SMTP Server
Returns:
el host del SMTP Server
setHost
public void setHost(java.lang.String host)
Permite especificar el host del SMTP Server
194
Parameters:
host - es el host que se desea especificar
getPort
public int getPort()
Permite recuperar el número del puerto de sistema operativo donde estará
levantando el SMTP Server
Returns:
el número del puerto de sistema operativo por donde esta levantado el SMTP
Server
setPort
public void setPort(int port)
Permite especificar el número del puerto de sistema operativo donde estará
levantado el STMP Server
Parameters:
port - es el numero del puerto de sistema operativo que se desea especificar
getUsername
public java.lang.String getUsername()
Permite recuperar el username que se usara para conectarse al SMTP
Server
195
Returns:
el username que se usara para conectarse al SMTP Server
setUsername
public void setUsername(java.lang.String username)
Permite especificar el username que se usara para conectarse al SMTP
Server
Parameters:
username - es el username que se desea especificar para conectarse al
SMTP Server
getPassword
public java.lang.String getPassword()
Permite recuperar el password que se usara para conectarse al SMTP Server
Returns:
el password que se usara para conectarse al SMTP Server
setPassword
public void setPassword(java.lang.String password)
Permite especificar el password que se usara para conectarse al SMTP
Server
Parameters:
196
password - es el password que se desea especificar para conectarse al
SMTP server
toString
public java.lang.String toString()
Retorna una representación en cadena de caracteres del Objeto SmtpServer.
La cadena retornada tiene es host:port
Overrides:
toString in class java.lang.Object
Package com.realmsoft.Bizshield.server.errors
com.realmsoft.Bizshield .server.errors
Class ExcepcionDireccionInvalida
java.lang.Object
java.lang.Throwable
java.lang.Exception
com.realmsoft.Bizshield
.server.errors.ExcepcionDireccionInvalida
All Implemented Interfaces:
java.io.Serializable
public class ExcepcionDireccionInvalida
extends java.lang.Exception
197
Una ExcepcionDireccionInvalida es lanzada cuando la aplicación intenta
procesar una cadena de caracteres que representa una dirección de correo
electrónico y esta cadena no tiene el formato username@domain
Package com.realmsoft.Bizshield.server.info
com.realmsoft.Bizshield.server.info
Class DireccionCorreo
java.lang.Object
com.realmsoft.Bizshield
.server.info.DireccionCorreo
All Implemented Interfaces:
java.io.Serializable
public class DireccionCorreo
extends java.lang.Object
implements java.io.Serializable
La clase DireccionCorreo es una clase DTO, que encapsula una dirección de
correo
Constructor Detail
DireccionCorreo
public DireccionCorreo()
Constructor por defecto
198
DireccionCorreo
public DireccionCorreo(java.lang.String fullAddress)
throws ExcepcionDireccionInvalida
Constructor con una cadena de caracteres en formato de correo
Parameters:
fullAddress - es una cadena de caracteres que contiene una dirección de
correos ejemplo [email protected]
Throws:
ExcepcionDireccionInvalida - si fullAddress no es una dirección de correo
valida
DireccionCorreo
public DireccionCorreo(java.lang.String username,java.lang.String domain)
Constructor con los valores de una dirección de correo
Parameters:
username - corresponde a la parte del usuario de una dirección de correo
electrónico, ejemplo datoala
domain - corresponde a la parte del dominio de una dirección de correo
electrónico, ejemplo realmsoft.com
Detalle del método
toString
public java.lang.String toString()
199
Convierte el objeto en una cadena de caracteres con el formato
username@domain
Overrides:
toString in class java.lang.Object
Returns:
una cadena de caracteres con el formato username@domain
getUsername
public java.lang.String getUsername()
Recupera el usuario de la dirección de correo electrónico
Returns:
el usuario de la dirección de correo electrónico
setUsername
public void setUsername(java.lang.String ps_username)
Asigna el usuario de la dirección de correo electrónico
Parameters:
ps_username - contiene usuario de la dirección de correo electrónico a
cambiar
getDomain
public java.lang.String getDomain()
200
Recupera el dominio de la dirección de correo electrónico
Returns:
el dominio de la dirección de correo electrónico
setDomain
public void setDomain(java.lang.String ps_domain)
Asigna el dominio de la dirección de correo electrónico
Parameters:
domain - contiene el dominio de la dirección de correo electrónico a cambiar
getAddress
public java.lang.String getAddress()
Recupera la dirección de correo electrónico en formato username@domain
Returns:
la dirección de correo electrónico en formato username@domain
setAddress
public void setAddress(java.lang.String fullAddress)
throws ExcepcionDireccionInvalida
Setea la dirección de correo electrónico
Parameters:
201
fullAddress - es una dirección de correo que debe tener el formato
username@domain
Throws:
ExcepcionDireccionInvalida - si fullAddress no tiene el formato
username@domain
Package com.realmsoft.Bizshield.server.services.general
com.realmsoft.Bizshield .server.services.general
Interface ProcesadorSocket
All Superinterfaces:
java.lang.Runnable
All Known Implementing Classes:
ProcesadorSMTP
public interface ProcesadorSocket
extends java.lang.Runnable
La interfaz ProcesadorSocket debe ser implementada por cualquier clase que
necesite implementar el comportamiento de hilo procesador de socket
Detalle del método
setSocket
void setSocket(java.net.ServerSocket serverSocket)
202
Método que permite que se el especifique al procesado de socket cual es el
Serversocket por donde se esperan las conexiones
Parameters:
serverSocket - es el server socket por donde se esperaran conexiones
shutdown
void shutdown()
Método que hace que el hilo de procesamiento del socket termine
com.realmsoft.Bizshield .server.services.general
Class ServidorTCPMultihilo
java.lang.Object
com.realmsoft.Bizshield
.server.services.general.ServidorTCPMultihilo
All Implemented Interfaces:
java.lang.Runnable
public class ServidorTCPMultihilo
extends java.lang.Object
implements java.lang.Runnable
La clase ServidorTCPMultihilo representa un proceso servidor (servicio) que
podrá atender peticiones TCP (socket) paralelamente, por medio del uso de
203
hilos. Para el manejo del paralelismo esta clase tiene internamente un pool
de hilos, que son los que en realidad realizan el procesamiento e
implementan el protocolo de comunicación.
Constructor Detail
ServidorTCPMultihilo
public ServidorTCPMultihilo(int port,
java.lang.Class connectionProcessorClass,
int threads)
Inicializa el ServidorTcpMultihilo
Parameters:
port - es el numero del puerto de sistema operativo por donde el servicio
estará escuchando y esperando la conexión de los
clientes.connectionProcessorClass - es la clase de los hilos que formaran
parte del pool de hilos threads - es el numero de hilos que existirán en el pool
de hilos y que podrán atender simultáneamente peticiones TCP .
Detalle del método
run
public void run()
Arranca método que iniciara cada uno de los hilos del pool de hilos
Specified by:
run in interface java.lang.Runnable
204
shutdown
public void shutdown()
Detiene cada uno de los hilos del pool de hilos
Package com.realmsoft.Bizshield.server.services.smtp
com.realmsoft.Bizshield .server.services.smtp
Class EnviadorSMTP
java.lang.Object
com.realmsoft.Bizshield.server.services.smtp.EnviadorSMTP
public class EnviadorSMTP
extends java.lang.Object
La clase EnviadorSMTP se encarga de enviar los correos electrónicos hacia
el servidor de correos interno y servidores de correos externos
Detalle del método
sendMessage
public void sendMessage(MensajeSMTP message)
throws java.lang.RuntimeException
Envía un correo electrónico hacia el servidor de correos interno y externo,
según lo que indique el mensaje de correo a enviar.
Parameters:
message - es el mensaje que se quiere enviar
205
Throws:
java.lang.RuntimeException
com.realmsoft.Bizshield.server.services.smtp
Class MensajeSMTP
java.lang.Object
com.realmsoft.Bizshield.server.services.smtp.MensajeSMTP
All Implemented Interfaces:
java.io.Serializable
public class MensajeSMTP
extends java.lang.Object
implements java.io.Serializable
La clase MensajeSMTP contiene los datos de un correo electrónico.
getFromAddress
public DireccionCorreo getFromAddress()
Recupera la dirección de correo From
Returns:
la dirección de correo From
setFromAddress
public void setFromAddress(DireccionCorreo fromAddress)
206
Setea la dirección de correo from
Parameters:
fromAddress - es una dirección de correo
getToAddresses
public java.util.List<DireccionCorreo> getToAddresses()
Returns:
una lista de direcciones de correo destinatarios
setToAddresses
public void setToAddresses(java.util.List<DireccionCorreo> toAddresses)
Setea las direcciones de correo destinatarios
Parameters:
toAddresses - una lista de com.realmsoft.Bizshield.server.info.DireccionEmail
addToAddress
public void addToAddress(DireccionCorreo toAddress)
Añade una dirección de correo destinatario al correo
Parameters:
toAddress - un com.realmsoft.Bizshield.server.info.DireccionEmail
getDataLines
207
public java.util.List<java.lang.String> getDataLines()
Retorna una lista con las líneas de datos del correo
Returns:
una lista con las líneas de datos del correo
addDataLine
public void addDataLine(java.lang.String line)
Añade una línea de datos al correo electrónico
Parameters:
line - Línea de datos
getSize
public long getSize()
Calcula el tamaño del segmento de datos del correo
com.realmsoft.Bizshield.server.services.smtp
Class ProcesadorCorreos
java.lang.Object
com.realmsoft.Bizshield.server.services.smtp.ProcesadorCorreos
All Implemented Interfaces:
java.lang.Runnable
208
public class ProcesadorCorreos
extends java.lang.Object
implements java.lang.Runnable
La clase ProcesadorCorreos, es el hilo que se encarga de procesar los
correos, para determinar si son SPAM o no lo son.
Detalle del método
run
public void run()
Implementación del método de hilo, que cada dos segundos buscando
correos encolados y los envía a procesar método procesarCorreo de la clase
CorreoBO, en caso de determinar que el correo no es SPAM entonces envía
el correo con el método sendMessage de la clase
EnviadorSMTP.com.realmsoft.Bizshield.server.services.smtp
Class ProcesadorSMTP
java.lang.Object
com.realmsoft.Bizshield.server.services.smtp.ProcesadorSMTP
All Implemented Interfaces:
ProcesadorSocket, java.lang.Runnable
public class ProcesadorSMTP
extends java.lang.Object
implements ProcesadorSocket
209
La clase ProcesadorSMTP, es el hilo que se encarga de procesar las
peticiones SMTP(correos). Esta clase implementa todo el mecanismo de
comunicación a nivel del protocolo SMTP Los correos recibidos son
encolados en la base de datos.
Detalle del método
setSocket
public void setSocket(java.net.ServerSocket serverSocket)
Setea el objeto ServerSocket por donde esperara las conexiones SMTP
Specified by:
setSocket in interface ProcesadorSocket
Parameters:
serverSocket - es el server socket por donde se esperaran conexiones
run
public void run()
Implementación del método de hilo, el cual espera a que un cliente SMTP
realice una conexión con el ServerSocket, una vez obtenida la conexión
comienza a procesar la petición SMTP y a crear un objeto
com.realmsoft.Bizshield.server.services.smtp.MensajeSMTP. Luego
almacena el correo electrónico en la base de datos con la clase
com.realmsoft.Bizshield.bo.CorreoBO
Specified by:
210
run in interface java.lang.Runnable
Véase también:
com.realmsoft.Bizshield.server.services.smtp.MensajeSMTP,com.realmsoft.B
izshield.bo.CorreoBO, #setSocket( ServerSocket serverSocket )
shutdown
public void shutdown()
Description copied from interface: ProcesadorSocket
Método que hace que el hilo de procesamiento del socket termine
Package com.realmsoft.Bizshield.bo
com.realmsoft.Bizshield .bo
Class CorreoBO
java.lang.Object
com.realmsoft.Bizshield.bo.CorreoBO
All Implemented Interfaces:
Constantes
public class CorreoBO
extends java.lang.Object
implements Constantes
211
La clase CorreoBO implementa varios métodos de operaciones y
transacciones relacionadas con las reglas y lógica de negocio de los correos
Package com.realmsoft.Bizshield.parser.com.realmsoft.Bizshield.parser
Class BizshieldParser
java.lang.Object
com.realmsoft.Bizshield.parser.Bizshield
Parser
public class BizshieldParser
extends java.lang.Object
Es una clase que representa el parseador de una expresión BLR, realiza el
análisis léxico y sintáctico de la expresión y la divide en tokens.
Constructor Detail
BizshieldParser
public BizshieldParser(java.lang.String inputString)
Este método es el constructor de la clase. Inicializa todos los miembros del
objeto, recibe como parámetro el String que contiene la expresión BRL a
parsear.
Parameters:
inputString - la expresión BRL a parsear
BizshieldParser
212
public BizshieldParser(java.lang.String inputString long idProceso)
Detalle del método
getTokens
public java.util.List<BizshieldToken> getTokens()
Este método retorna la lista de Bizshield tokens obtenidos del parseo de la
expresión BRL.
Returns:
la lista de tokens producto del proceso de parseo de la expresión BRL
parse
public boolean parse()
throws java.lang.Exception
Este método es el encargado de realizar el parseado de la expresión BRL y
llenar la lista de tokens.
Returns:
true si la expresión BRL es parseada correctamente, false en caso de error.
Throws:
java.lang.Exception
com.realmsoft.Bizshield .parser
Class Bizshield Token
java.lang.Object
213
com.realmsoft.Bizshield.parser.Bizshield
Token
public class BizshieldToken
extends java.lang.Object
Esta clase representa un token genérico de BRL, es un wrapper de un token
ANTLR.
Constructor Detail
BizshieldToken
public BizshieldToken(java.lang.String tokenText int tokenType,
BizshieldTokenType BizshieldTokenType, int Bizshield Id)
Este método es el constructor de la clase. Inicializa todos los miembros del
objeto, recibe como parámetro el texto del token, el tipo ANTLR del token, el
tipo Bizshield del token y el identificador Bizshield del token.
Parameters:
tokenText - texto del token
tokenType - tipo ANTLR del token
BizshieldTokenType - tipo Bizshield del token Bizshield Id - identficador
Bizshield del token
com.realmsoft.Bizshield.parser
Enum Bizshield TokenType
214
java.lang.Object
java.lang.Enum<Bizshield TokenType>
com.realmsoft.Bizshield.parser.Bizshield
TokenType
All Implemented Interfaces:
java.io.Serializable, java.lang.Comparable<Bizshield TokenType>
public enum BizshieldTokenType
extends java.lang.Enum<BizshieldTokenType>
Es un enunciado que contiene las constantes que representan los tipos de
tokens Bizshield, los cuales son: operador, operando constante, operando
lista constante y operando variable.
com.realmsoft.Bizshield.validacion
Class AccionInconsistente
java.lang.Object
com.realmsoft.Bizshield.validacion.AccionInconsistente
public class AccionInconsistente
extends java.lang.Object
Es una clase que contiene métodos de utilidad para determinar si una lista de
acciones contiene acciones inconsistentes, es decir que no son compatibles.
215
com.realmsoft.Bizshield .validacion
Class InvocadorValidadorSubtipos
java.lang.Object
com.realmsoft.Bizshield.validacion.InvocadorValidadorSubtipos
public class InvocadorValidadorSubtipos
extends java.lang.Object
El propósito de esta clase es realizar la invocación de los métodos
validadores de Bizshield a través del API Java Reflect.
Detalle del método
invocarMetodoValidacion
public static boolean
invocarMetodoValidacion(java.lang.String p_nombreCualificadoMetodo,jav
a.lang.String p_argumento)
Este método es el encargado de invocar a los métodos de validación de
Bizshield a través del API Java Reflect. Los subtipos de datos de Bizshield
tienen asociado un método validador, el cual es llamado vía Java Reflect. El
método invocarMetodoValidacion recibe como parámetros el nombre
cualificado del método validador y el valor a validar.
Parameters:
p_nombreCualificadoMetodo - nombre cualificado del método validador a
invocar p_argumento - argumento del método validador
216
Returns:
true si la validación del parámetro es exitosa, false en caso de error
com.realmsoft.Bizshield .validacion
Class ValidadorSubtipos
java.lang.Object
com.realmsoft.Bizshield.validacion.ValidadorSubtipos
public class ValidadorSubtipos
extends java.lang.Object
Esta clase contiene los métodos de validación de datos de Bizshield. Cada
subtipo de dato tiene asociado uno de estos métodos validadores, los cuales
en su mayoría utilizan como mecanismo de validación expresiones regulares.
Detalle del método
validarDireccionIP
public static boolean validarDireccionIP(java.lang.String p_direccionIP)
El propósito de este método es realizar la validación de una expresión que
representa una dirección IP. Recibe como parámetro la cadena a validar.
Parameters:
p_direccionIP -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
217
validarDireccionCorreo
public static boolean
validarDireccionCorreo(java.lang.String p_direccionCorreo)
El propósito de este método es realizar la validación de una expresión que
representa una dirección de correo electrónica. Recibe como parámetro la
cadena a validar.
Parameters:
p_direccionCorreo -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarEntero
public static boolean validarEntero(java.lang.String p_entero)
El propósito de este método es realizar la validación de una expresión que
representa un número entero. Recibe como parámetro la cadena a validar.
Parameters:
p_entero -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarDecimal
218
public static boolean validarDecimal(java.lang.String p_decimal)
El propósito de este método es realizar la validación de una expresión que
representa un número decimal. Recibe como parámetro la cadena a validar.
Parameters:
p_decimal -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarCadenaCaracteres
public static boolean validarCadenaCaracteres(java.lang.String p_cadena)
El propósito de este método es realizar la validación de una expresión que
representa una cadena de caracteres. Recibe como parámetro la cadena a
validar.
Parameters:
p_cadena -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarFecha
public static boolean validarFecha(java.lang.String p_fecha)
219
El propósito de este método es realizar la validación de una expresión que
representa una fecha en formato YYYY-MM-DD. Recibe como parámetro la
cadena a validar.
Parameters:
p_fecha -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarHora
public static boolean validarHora(java.lang.String p_hora)
El propósito de este método es realizar la validación de una expresión que
representa una hora en formato hh:mm:ss. Recibe como parámetro la
cadena a validar.
Parameters:
p_hora -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarFechaHora
public static boolean validarFechaHora(java.lang.String p_fechaHora)
220
El propósito de este método es realizar la validación de una expresión que
representa una fecha y hora en formato YYYY-MM-DD hh-mm-ss. Recibe
como parámetro la cadena a validar.
Parameters:
p_fechaHora -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarNombrePersona
public static boolean
validarNombrePersona(java.lang.String p_nombrePersona)
El propósito de este método es realizar la validación de una expresión que
representa un nombre de persona. Recibe como parámetro la cadena a
validar.
Parameters:
p_nombrePersona -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarNombreArchivo
public static boolean
validarNombreArchivo(java.lang.String p_nombreArchivo)
221
El propósito de este método es realizar la validación de una expresión que
representa un nombre de archivo. Recibe como parámetro la cadena a
validar.
Parameters:
p_nombreArchivo -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarNombreCarpeta
public static boolean
validarNombreCarpeta(java.lang.String p_nombreCarpeta)
El propósito de este método es realizar la validación de una expresión que
representa un nombre de carpeta. Recibe como parámetro la cadena a
validar.
Parameters:
p_nombreCarpeta -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarRutaCarpeta
public static boolean validarRutaCarpeta(java.lang.String p_rutaCarpeta)
222
El propósito de este método es realizar la validación de una expresión que
representa una ruta de carpeta. Recibe como parámetro la cadena a validar.
Parameters:
p_rutaCarpeta -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarDominio
public static boolean validarDominio(java.lang.String p_dominio)
El propósito de este método es realizar la validación de una expresión que
representa un dominio de internet. Recibe como parámetro la cadena a
validar.
Parameters:
p_dominio -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarListaDireccionesCorreo
public static boolean
validarListaDireccionesCorreo(java.lang.String p_direccionesCorreo)
223
El propósito de este método es realizar la validación de una expresión que
representa una lista de direcciones de correo electrónico. Recibe como
parámetro la cadena a validar.
Parameters:
p_direccionesCorreo -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
validarSiNo
public static boolean validarSiNo(java.lang.String p_cadena)
validarListaExpresionesRegulares
public static boolean
validarListaExpresionesRegulares(java.lang.String p_expresionesRegulare
s)
El propósito de este método es realizar la validación de una cadena que
representa una lista de expresiones regulares. Recibe como parámetro la
cadena a validar.
Parameters:
p_expresionesRegulares -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
224
validarExpresionRegular
public static boolean
validarExpresionRegular(java.lang.String p_expresionRegular)
El propósito de este método es realizar la validación de una cadena que
representa una expresión regular. Recibe como parámetro la cadena a
validar.
Parameters:
p_expresionRegular -
Returns:
true si la validación del parámetro es exitosa, false en caso de error
Package com.realmsoft.deterministicos
com.realmsoft.deterministicos
Class Conjunto
java.lang.Object
com.realmsoft.deterministicos.Conjunto
public class Conjunto
extends java.lang.Object
La clase Conjunto es un DTO, que representa un conjunto que tiene un
identificador único.
225
Detalle del método
getIdConjunto
public long getIdConjunto()
Permite recuperar el id del conjunto
Returns:
el id del conjunto
setIdConjunto
public void setIdConjunto(long idConjunto)
Permite especificar el id del conjunto
Parameters:
idConjunto - el id del conjunto a especificar
getElementos
public java.util.Collection<java.lang.Object> getElementos()
Permite recuperar los elementos del conjunto
Returns:
elementos del conjunto
setElementos
public void
setElementos(java.util.Collection<java.lang.Object> p_elementos)
226
Permite especificar los elementos del conjunto
Parameters:
p_elementos - son los elementos del conjunto
com.realmsoft.deterministicos
Class MotorReglas
java.lang.Object
com.realmsoft.deterministicos.MotorReglas
All Implemented Interfaces:
Constantes
public class MotorReglas
extends java.lang.Object
implements Constantes
La clase MotorReglas es el encargado de evaluar las reglas sobre un
proceso
Constructor Detail
MotorReglas
public MotorReglas(long pl_idProceso)
throws java.lang.Exception
Constructor del Motor de reglas, al llamar a este constructor internamente se
cargan las reglas asociadas al proceso
Parameters:
227
pl_idProceso - es el id del proceso
Throws:
java.lang.Exception - si existe algún error al crear el MotorReglas
Detalle del método
ejecutarReglas
public java.util.List<java.lang.Long> ejecutarReglas(Proceso p_proceso)
throws java.lang.Exception
Es el método encargado de evaluar las reglas para un proceso específico
Parameters:
p_proceso - es el objeto que contiene los datos
Returns:
una lista con los id de las reglas que se cumplieron para el proceso
Throws:
java.lang.Exception - en caso de existir algún error al ejecutar las reglas
(evaluar las reglas)
Package com.realmsoft.deterministicos.bo
com.realmsoft.deterministicos.bo
Class ConfiguracionAccionBO
java.lang.Object
com.realmsoft.deterministicos.bo.ConfiguracionAccionBO
public class ConfiguracionAccionBO
228
extends java.lang.Object
Esta clase contiene los métodos de negocio utilizados para el mantenimiento
de las acciones antispam de Bizshield .
Detalle del método
crearOActualizarAccion
public void crearOActualizarAccion(java.lang.String p_nombreAccion,
java.lang.Long p_idTipoAccion,
java.util.Map<java.lang.String,java.lang.String> p_parametrosAccion,
java.util.List<java.lang.Long> p_reglasAsociadas,
java.lang.Integer p_idUsuario,
java.lang.Long p_idAccion)
Este método es el encargado de realizar la inserción de una nueva acción
antispam, o la actualización de una acción antispam existente. Recibe como
parámetros el nombre de la acción, el identificador del tipo de acción, la lista
de parámetros de acción, la lista de reglas asociadas a la acción, el
identificador del usuario que ingresa o modifica la acción, y el identificador de
la acción a modificar, en caso de actualización. La acción es persistida en la
base de datos a través de los objetos de acceso a datos (DAO).
Parameters:
p_nombreAccion - nombre de la acción
p_idTipoAccion - identificador del tipo de acción
229
p_parametrosAccion - lista de parámetros de la acción
p_reglasAsociadas - reglas asociadas a la acción
p_idUsuario - identificador del usuario
p_idAccion - identificador de la acción
caducarAccion
public void
caducarAccion(java.lang.Long p_idAccion,java.lang.Integer p_idUsuario)
Este método es el encargado de eliminar lógicamente una acción antispam,
estableciendo la fecha de fin de vigencia de ésta. Recibe como parámetros el
identificador de la acción a eliminar y el identificador del usuario que elimina
la acción.
Parameters:
p_idAccion - identificador de la acción a eliminar
p_idUsuario - identificador del usuario que elimina la acción
com.realmsoft.deterministicos.bo
Class ConfiguracionReglaBO
java.lang.Object
com.realmsoft.deterministicos.bo.ConfiguracionReglaBO
public class ConfiguracionReglaBO
230
extends java.lang.Object
Esta clase contiene los métodos de negocio utilizados para el mantenimiento
de las reglas antispam de Bizshield .
Detalle del método
crearOActualizarRegla
public void crearOActualizarRegla(java.lang.Long p_idProceso,
java.lang.String p_nombreRegla,
java.lang.String p_descripcionRegla,
java.lang.String p_contenidoRegla,
java.util.List<java.lang.Long> p_listaAccionesAsociadas,
java.lang.Integer p_idUsuario,
java.lang.Long p_idRegla)
Este método es el encargado de realizar la inserción de una nueva regla
antispam, o la actualización de una regla antispam existente. Recibe como
parámetros el identificador del proceso, el nombre de la regla, la descripción
de la regla, el contenido de la regla, la lista de identificadores de acciones
asociadas a la regla, el identificador del usuario que ingresa o modifica la
regla, y el identificador de la regla a modificar, en caso de actualización.
Antes de realizar una acción de inserción o actualización, se efectúa un
análisis léxico y sintáctico del contenido de la regla y se obtienen los
231
componentes individuales de la expresión BRL los cuales serán persistidos
en la base datos utilizando los objetos de acceso a datos (DAO).
Parameters:
p_idProceso - identificador del proceso
p_nombreRegla - nombre de la regla
p_descripcionRegla - descripción de la regla
p_contenidoRegla - contenido de la regla
p_listaAccionesAsociadas - lista de acciones asociadas a la regla
p_idUsuario - identificador del usuario
p_idRegla - identificador de la regla a editar
caducarRegla
public void
caducarRegla(java.lang.Long p_idRegla,java.lang.Integer p_idUsuario)
Este método es el encargado de eliminar lógicamente una regla antispam,
estableciendo la fecha de fin de vigencia de ésta. Recibe como parámetros el
identificador de la regla a eliminar y el identificador del usuario que elimina la
regla.
Parameters:
p_idRegla - identificador de la regla a eliminar
p_idUsuario - identificador del usuario que elimina la regla
232
com.realmsoft.deterministicos.bo
Class ConfiguracionUsuarioBO
java.lang.Object
com.realmsoft.deterministicos.bo.ConfiguracionUsuarioBO
public class ConfiguracionUsuarioBO
extends java.lang.Object
Esta clase contiene los métodos de negocio utilizados para el mantenimiento
de los usuarios de Bizshield .
Detalle del método
crearOActualizarUsuario
public void crearOActualizarUsuario(java.lang.Integer p_idRol,
java.lang.String p_username,
java.lang.String p_password,
java.lang.String p_nombres,
java.lang.String p_apellidos,
java.lang.String p_direccion,
java.lang.String p_telefono,
java.lang.String p_email,
java.lang.Integer p_empresa,
java.lang.Integer p_idUsuario)
233
Este método es el encargado de realizar la inserción de un nuevo usuario, o
la actualización de un usuario existente. Recibe como parámetros el
identificador del rol, el username, el password, los nombres, los apellidos, la
dirección, el teléfono, el correo electrónico, el identificador de la empresa y el
identificador del usuario a modificar, en caso de actualización. El usuario es
persistido en la base de datos a través de los objetos de acceso a datos
(DAO).
Parameters:
p_idRol - identificador del rol
p_username - nombre de usuario
p_password - contraseña de usuario
p_nombres - nombres
p_apellidos - apellidos
p_direccion - dirección
p_telefono - teléfono
p_email - email
p_empresa - identificador de empresa
p_idUsuario - identificador de usuario a modificar
caducarUsuario
public void caducarUsuario(java.lang.Integer p_idUsuario)
234
Este método es el encargado de eliminar lógicamente un usuario de
Bizshield, estableciendo su estado a inactivo. Recibe como parámetros el
identificador del usuario a eliminar.
Parameters:
p_idUsuario - identificador del usuario a eliminar
com.realmsoft.deterministicos.bo
Class ReglasBO
java.lang.Object
com.realmsoft.deterministicos.bo.ReglasBO
All Implemented Interfaces:
Constantes
public class ReglasBO
extends java.lang.Object
implements Constantes
La clase ReglaBO implementa varios métodos de operaciones y
transacciones relacionadas con las reglas y lógica de negocio de las reglas
que se configuran en el sistema Bizshield
Detalle del método
ejecutarReglas
public void ejecutarReglas(DtEjecucionProceso p_dtEjecucionProceso)
throws java.lang.Exception
235
Método encargado de la evaluación (ejecución) de las reglas El resultado de
la evaluación de cada una las reglas es guardado en la tabla
dt_evaluacion_regla
Parameters:
p_dtEjecucionProceso - es la representación de un ejecución de un
procesamiento de correo.
Throws:
java.lang.Exception - si existe algún error en la evaluación de las reglas
ejecutarAcciones
public void ejecutarAcciones(DtEjecucionProceso p_dtEjecucionProceso)
throws java.lang.ClassNotFoundException,
java.lang.InstantiationException,
java.lang.IllegalAccessException,
java.lang.IllegalArgumentException,
java.lang.SecurityException,
java.lang.reflect.InvocationTargetException,
java.lang.NoSuchMethodException
Método encargado de la ejecución de todas las acciones configuradas y
vigentes
Parameters:
236
p_dtEjecucionProceso - es la representación de una ejecución de un
procesamiento de correo
Throws:
java.lang.ClassNotFoundException
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.SecurityException
java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodException
ejecutarAccion
public void ejecutarAccion(DtAccion p_accion,
DtEjecucionProceso p_dtEjecucionProceso)
throws java.lang.ClassNotFoundException,
java.lang.InstantiationException,
java.lang.IllegalAccessException,
java.lang.IllegalArgumentException,
java.lang.SecurityException,
java.lang.reflect.InvocationTargetException,
java.lang.NoSuchMethodException
237
Método que ejecuta una acción especifica
Parameters:
p_accion - es la acción especifica a ejecutar
p_dtEjecucionProceso - es la ejecución de procesamiento de correo sobre el
cual se ejecutaran las acciones
Throws:
java.lang.ClassNotFoundException
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.SecurityException
java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodException
convertirSringObjetoSubtipoDato
public java.lang.Object
convertirSringObjetoSubtipoDato(DtSubtipoDato p_dtSubtipoDato,
java.lang.String ps_valor)
throws java.lang.ClassNotFoundException,
java.lang.IllegalArgumentException,
java.lang.SecurityException,
java.lang.InstantiationException,
238
java.lang.IllegalAccessException,
java.lang.reflect.InvocationTargetException,
java.lang.NoSuchMethodException
Método que convierte un String en el respectivo objeto de un subtipo de dato
Parameters:
p_dtSubtipoDato - es el subtipo de dato del cual se inferirá la clase de java
que se utilizara para construir el objeto ps_valor - es la cadena de caracteres
que será convertida a un objeto
Returns:
el objeto producto de la conversión de la cadena
Throws:
java.lang.ClassNotFoundException
java.lang.IllegalArgumentException
java.lang.SecurityException
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodException
com.realmsoft.deterministicos.bo
Class TraductorBO
java.lang.Object
com.realmsoft.deterministicos.bo.TraductorBO
239
All Implemented Interfaces:
Constantes
public class TraductorBO
extends java.lang.Object
implements Constantes
La clase TraductorBO es el encargado de convertir las reglas almacenadas
en la base de datos a reglas a archivos de reglas drools (.drl)
Detalle del método
traducirReglas
public void traducirReglas(long pl_idProceso)
throws java.io.IOException, java.lang.ClassNotFoundException
Método operación encargado de traducir las reglas de un proceso al archivo
drools, el archivo donde se registraran las reglas es el retornado por el
método getArchivoReglas
Parameters:
pl_idProceso - es el id del proceso asociado a las reglas que serán
traducidas
Throws:
java.io.IOException
java.lang.ClassNotFoundException
Véase también:
240
getArchivoReglas()
sensarActualizarReglas
public void sensarActualizarReglas()
Método transacción encargado de verificar si se han modificado las reglas de
algún proceso en la base de datos, en caso de encontrar reglas modificadas
refrescara los archivos de reglas drools (.drl). El mecanismo usado para
determinar si las reglas de un proceso han sido modificadas es chequeando
el valor del campo cambiaron_reglas de la tabla dt_proceso, cuando este
valor esta en S significa que han ocurrido modificaciones sobre las reglas de
ese proceso
actualizarReglas
public void actualizarReglas()
Método transacción encargado de refrescara los archivos de reglas drools
(.drl) con las definiciones de las reglas de base de datos. A diferencia del
método sensarActualizarReglas, este método no censa el campo
cambiaron_reglas de la tabla dt_proceso, sin importar su valor actualiza
todas las reglas de todos los procesos
getArchivoReglas
public java.io.File getArchivoReglas(long pl_idProceso)
241
Permite obtener el archivo de reglas drools (.drl) con las reglas asociadas a
un proceso
Parameters:
pl_idProceso - el id del proceso
Returns:
un objeto File que apunta al archivo de reglas drools (.drl)
validarReglaProceso
public void validarReglaProceso(long pl_idReglaProceso) throws
java.lang.Exception
Método que permite validar si una regla en la base de datos es valida y
puede ser convertida a regla drools
Parameters:
pl_idReglaProceso - id de la regla
Throws:
java.lang.Exception - en caso de haber algún error en la validación
Package com.realmsoft.deterministicos.interfaces
com.realmsoft.deterministicos.interfaces
Interface CalculadorVariable
public interface CalculadorVariable
242
La interfaz CalculadorVariable deberá ser implementada por las clases que
implementen mecanismos de cálculo para variables específicas
Detalle del método
calcularVariable
java.lang.Object calcularVariable(DtEjecucionProceso p_instanciaProceso)
Este método es el que implementa el cálculo de una variable
Parameters:
p_instanciaProceso - es una instancia de ejecución de proceso
Returns:
el valor de la variable calculado
com.realmsoft.deterministicos.interfaces
Interface EjecutorAccion
public interface EjecutorAccion
La interfaz EjecutorAccion deberá ser implementadas por las clases
implementar la lógica de ejecución de acciones específicas
Detalle del método
ejecutarAccion
void ejecutarAccion(DtEjecucionProceso p_instanciaProceso,
DatosParaEjecutarAccion p_datosParaEjecutarAccion)
Este método deberá ser implementado con la lógica necesaria para ejecutar
acciones específicas
243
Parameters:
p_instanciaProceso - es la instancia de procesos sobre el cual se ejecutara la
acción
p_datosParaEjecutarAccion - son los datos necesarios para la ejecución de
la acción (parámetros)
com.realmsoft.deterministicos.interfaces
Interface Proceso
public interface Proceso
La interfaz Proceso deberá ser implementada por las clases que contendrán
todos los datos de un proceso
Package com.realmsoft.deterministicos.tiposDatos
com.realmsoft.deterministicos.tiposDatos
Class Fecha
java.lang.Object
java.util.Date
com.realmsoft.deterministicos.tiposDatos.Fecha
All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable,
java.lang.Comparable<java.util.Date>
public class Fecha
244
extends java.util.Date
Extensión de la clase java.util.Date, esta clase crea un constructor que
permite crear una fecha con una cadena de caracteres
Constructor Detail
Fecha
public Fecha(java.lang.String ps_fecha)
throws java.text.ParseException
Constructor que permite crear una fecha con una cadena de caracteres.
Parameters:
ps_fecha - es la cadena de caracteres que contiene la fecha, debe estar en
formato dd/mm/yyyy
Throws:
java.text.ParseException - si existe un error al convertir la cadena a fecha
com.realmsoft.deterministicos.tiposDatos
Class FechaHora
java.lang.Object
java.util.Date
com.realmsoft.deterministicos.tiposDatos.FechaHora
All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable,
java.lang.Comparable<java.util.Date>
245
public class FechaHora
extends java.util.Date
Extensión de la clase java.util.Date, esta clase crea un constructor que
permite crear una fecha hora con una cadena de caracteres
Constructor Detail
FechaHora
public FechaHora(java.lang.String ps_fecha)
throws java.text.ParseException
Constructor que permite crear una fecha hora con una cadena de caracteres.
Parameters:
ps_fecha - es la cadena de caracteres que contiene la fecha hora, debe estar
en formato dd/mm/yyyy HH:mm:ss
Throws:
java.text.ParseException - si existe un error al convertir la cadena a fecha
hora
com.realmsoft.deterministicos.tiposDatos
Class Hora
java.lang.Object
java.util.Date
com.realmsoft.deterministicos.tiposDatos.Hora
All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable, ava.lang.Comparable<java.util.Date>
246
public class Hora
extends java.util.Date
Extensión de la clase java.util.Date, esta clase crea un constructor que
permite crear una hora con una cadena de caracteres
Constructor Detail
Hora
public Hora(java.lang.String ps_fecha)
throws java.text.ParseException
Constructor que permite crear una hora con una cadena de caracteres.
Parameters:
ps_fecha - es la cadena de caracteres que contiene la hora, debe estar en
formato HH:mm:ss
Throws:
java.text.ParseException - si existe un error al convertir la cadena a hora
247
2.20 CONFIGURACION PARA PRUEBAS
2.21 INSTALACION DE BIZSHIELD SERVICE
A continuación se detallan los pasos que hay que realizar para instalar el
Bizshield Service.
1) Copiar todos los archivos en alguna ruta del sistema de archivos.
Se recomienda que la ruta donde se copien los archivos sea
/usr/local/BizshieldService
2) Modificar el archivo /etc/profile, se deben añadir la variable
BIZSHIELD_SERVICE_HOME con el valor de la ruta donde se copio la
carpeta:
export BIZSHIELD_SERVICE_HOME=/usr/local/BizshieldService
3) Instalar el BizshieldService como servicio del sistema operativo.
Para esto se tendrá que copiar el archivo BizshieldService en la ruta
/etc/init.d y ejecutar los siguientes comandos:
chmod +x /etc/init.d/BizshieldService
cd /etc/init.d
248
chkconfig --add Bizshield Service
4) Modificación del archive de configuración Bizshield.conf el cual tendrá la
ruta /usr/local/Bizshield.conf
Este archivo es muy fácil de configurar, solo tiene pocos parámetros para
modificar. Estos son los parámetros.
• spuertoSmtp=25
• numeroHilosAtencion=1
• dominio=bizshield.pro.ec
• servidorSMTP=192.168.0.102
• servidorDNS=200.124.224.195
• urlActualizaciones=http://bizshield.pro.ec/bizshield.properties
1.) spuertoSmtp: Es el puerto por el cual se va a comunicar el servidor
Antispam que en este caso sería 25.
2.) numeroHilosAtencion: Se puede definir el numero de atenciones
simultaneas a la aplicación, el cual puede ser 5, 10, 20 etc, etc.
3.) Dominio: El cual especifica el dominio de la empresa el cual para este
caso será “bizshield.pro.ec”.
4.) servidorSMTP: Ubicamos la dirección del servidor SMTP.
5.) servidorDNS: Ubicamos la dirección del servidor DNS.
6.) urlActualizaciones: Esta es la dirección de la cual se va a descargar
las actualizaciones, tales como.
Dominios, correos, IP, que están en la lista de Spam.
249
2.22 ACTUALIZACIÓN DE BLACK LIST UPDATE.
Para las actualizaciones iniciales de las listas negras, para el proyecto
antispam, se utilizó una base de datos gratuita de listas negras la cual se
actualizada diariamente. Esta base no pide registro, solo una contribución
voluntaria. La actualización de estas listas negras es confiable ya que posee
un grado alto de identificación de falsos positivos. La dirección de descarga
de esta base es la siguiente:
http://www.joewein.de/sw/dbl-update/index.htm.
2.23 INSTALACION DE MYSQL EN LINUX
La manera recomendada de instalar MySQL en Linux es utilizando paquetes
RPM. Los RPMs de MySQL están generados en SuSE Linux 7.3, pero
funcionan con cualquier versión de Linux que soporte rpm y el uso de glibc.
MySQL AB proporciona RPMs específicos para algunas plataformas; la
diferencia entre un RPM específico para una plataforma y uno genérico es
que el primero es generado sobre la misma plataforma a donde está
destinado, y emplea enlazado dinámico, en tanto que el RPM genérico está
enlazado estáticamente con LinuxThreads.
En la mayoría de los casos, sólo será necesario instalar los paquetes MySQL-
server y MySQL-client para conseguir una instalación de MySQL en
250
funcionamiento. Los otros paquetes no se necesitan para una instalación
estándar. Están disponibles los siguientes paquetes RPM principales:
MySQL-server-VERSION.i386.rpm
El servidor MySQL. Será necesario, a menos que solamente se desee
conectar a un servidor MySQL ejecutado en otro ordenador. Nota: los
ficheros RPM del servidor se denominaban MySQL-VERSION.i386.rpm antes de
la versión 4.0.10. Es decir, no incluían -server en su nombre.
MySQL-client-VERSION.i386.rpm
Los programas cliente MySQL estándar. Es probable que siempre se instale
este paquete.
MySQL-shared-VERSION.i386.rpm
Este paquete contiene las bibliotecas compartidas (libmysqlclient.so*) que
ciertos lenguajes y aplicaciones necesitan para enlazar dinámicamente y
usar MySQL.
MySQL-VERSION.src.rpm
Contiene el código fuente de todos los paquetes anteriores. Puede usarse
para regenerar los RPMs bajo otras arquitecturas (por ejemplo, Alpha o
251
SPARC). Para ver todos los ficheros contenidos en un paquete RPM (por
ejemplo, un RPM MySQL-server), se debe ejecutar:
shell> rpm -qpl MySQL-server-VERSION.i386.rpm
Para llevar a cabo una instalación estándar mínima, debe ejecutarse:
shell> rpm -i MySQL-server-VERSION.i386.rpm
shell> rpm -i MySQL-client-VERSION.i386.rpm
Para instalar solamente el paquete cliente, debe ejecutarse:
shell> rpm -i MySQL-client-VERSION.i386.rpm
RPM ofrece una característica para verificar la integridad y autenticidad de
los paquetes antes de instalarlos.
El servidor RPM ubica los datos bajo el directorio /var/lib/mysql. También crea
una cuenta de acceso para el usuario mysql (si no existe anteriormente) a fin
de ejecutar el servidor MySQL, y crea las correspondientes entradas en
/etc/init.d/ para iniciar el servidor automáticamente al arrancar el sistema. (Esto
significa que si se había realizado una instalación previa y se hicieron
252
cambios al script de inicio, posiblemente se desee hacer una copia de ese
script para no perder los cambios al instalar un nuevo RPM.
Si se va a instalar el RPM MySQL en una distribución antigua de Linux la
cual no soporta scripts de inicio en /etc/init.d (directamente o por medio de un
symlink), deberá crearse un vínculo simbólico que apunte a la ubicación
donde realmente está instalado el script de inicialización. Por ejemplo, si la
ubicación es /etc/rc.d/init.d, se deberán ejecutar los siguientes comandos antes
de instalar el RPM para crear /etc/init.d como un vínculo simbólico que apunte
allí:
shell> cd /etc
shell> ln -s rc.d/init.d .
Sin embargo, todas las principales distribuciones Linux de la actualidad
soportan la nueva disposición de directorios que utiliza /etc/init.d, porque es un
requisito para cumplir con el LSB (Linux Standard Base, Base Estándar para
Linux).
Si entre los ficheros RPM instalados se encuentra MySQL-server, el servidor
mysqld debería estar ejecutándose luego de la instalación, y se debería
estar en condiciones de comenzar a utilizar MySQL.
253
Después de todo esto hay que pegar el archivo con el nombre my.cnf en la
ruta /etc/my.cnf
2.24 INSTALACIÓN DEL JDK (J2SE)
La base para operar cualquier producto que utiliza Java es el JDK de la
plataforma correspondiente, puede encontrar instrucciones para plataformas
Linux así como Windows, en las siguientes direcciones:
JDK para Linux : http://javabasico.osmosislatina.com/java_linux.htm
JDK para Windows : http://javabasico.osmosislatina.com/java_windows.htm
Los pasos para instalar la plataforma Java versión 1.5 en Linux son los
siguientes:
1) Ingresamos a la página de descargas de Java de Sun MicroSystems:
http://java.sun.com/j2se/1.5.0/download.jsp
2) Descargamos esta versión para Linux en binario:
jdk-1_5_0_04-linux-i586.bin
3) Lo copiamos dentro de Linux en el directorio /tmp/
4) Damos permisos de ejecución con el siguiente comando:
chmod +x jdk-1_5_0_04-linux-i586.bin
5) Se inicia la instalación ejecutando el siguiente archivo:
254
./jdk-1_5_0_04-linux-i586.bin
6) Al mostrar la licencia solo tendremos que aceptar algunos términos de
uso del JDK.
7) Se crea toda un estructura de nombre jdk1.5.0_04 la cual podemos
moverla donde queremos con el siguiente comando:
mv jdk1.5.0_04/ /usr/local/jdk1.5
8) Agregar las variables de entorno dentro del archivo /etc/profile:
export JAVA_HOME=/usr/local/jdk1.5
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:${JAVA_HOME}/bin
2.25 INSTALACIÓN DE TOMCAT
Bajar la versión binaria de Tomcat en: http://jakarta.apache.org/tomcat . (La
versión de Código Fuente (src) solo es necesaria si quiere experimentar y/o
Instalar Apache con Tomcat.
Descomprimir el archivo Tar de Tomcat en /usr/local/, esto genera un
directorio llamado jakarta-tomcat-<numero_de_version>, para dar mayor
uniformidad se recomienda cambiar el nombre de este directorio a Tomcat.
Posteriormente se debe definir una variable ambiental la cual le indicará al
sistema la ubicación de Tomcat, esta variable se llama CATALINA_HOME la
255
cual debe ser agregada a /etc/bashrc , si no esta familiarizado con ambientes
*nix, esto significa agregar la línea:
export CATALINA_HOME=/usr/local/Tomcat;
2.26 CONFIGURACIÓN DEL SERVIDOR DNS EN LA EMPRESA1.COM
Y configuración de su Servidor de correo JES que en este caso están
instalados en una misma maquina
FIGURA 46. Creación de zona con dominio empresa1.com
256
Creamos una zona con el dominio empresa1.com
Después configuramos los registros tipo A y tipo MX
Un registro tipo A que tenga la IP del servidor DNS que en este caso
sería 192.168.1.254
Un registro tipo A que tenga la IP del Servidor AntiSpam Bizshield
cuya IP seria 192.168.1.253
FIGURA 47. Creación de los registros tipo A y MX
Un registro Mx que es el intercambiador de correo (Mail Exchange)
257
FIGURA 48. Registro tipo MX creado.
En este encontramos la siguiente configuración, en el cual tenemos asociado
el Registro MX al registro tipo A que apunta al servidor antispam Bizshield
En el botón examinar buscamos la dirección donde se encuentra el registro
tipo A al cual se encuentra asociado como ya indicamos al servidor de
antispam
258
FIGURA 49. Pantalla de propiedades de empresa1.com
259
FIGURA 50. Cuadro de Examinar en Propiedades de empresa1.com
Aceptamos y ya está creado el registro tipo MX.
Para la configuración de las IP y DNS en la opción de Conexión de Área
Local - Protocolos de Internet, ingresamos la Dirección IP, la mascara de
subred, el servidor DNS, el cual como lo tenemos instalado en la misma
máquina tendrá la misma dirección.
260
FIGURA 51. Configuración de la IP y Dominio del Servidor 1
261
En la pestaña de DNS agregamos el sufijo empresa1.com
FIGURA 52. Anexar sufijo DNS de empresa1.com.
262
2.27 CONFIGURACIÓN DEL SERVIDOR DE CORREO JES EN LA
EMPRESA 1.
Instalamos primero el “jdk” que es la máquina virtual de java, necesario para
nuestra aplicación que esta desarrollada en java.
FIGURA 53. Ejecutable para instalar el jdk.
Copiamos el Servidor de correo con el nombre de “Jes” en La partición C:
FIGURA 54. Carpeta del programa Jes en la partición C:
263
Instalamos el mail.bat en el inicio de Windows para que al iniciar o arrancar
Windows se levante el servidor de correo JES
FIGURA 55. Archivo mail.bat del servidor de correo Jes.
Aquí vemos el lugar en donde esta el inicio de Windows el cual al momento
de iniciar el sistema operativo ejecutara toda aplicación que este en este
lugar
264
FIGURA 56. Lugar de ubicación del mail.bat en el inicio de Windows.
Editamos los dos archivos el mail.conf y el user.conf
FIGURA 57. Archivos de configuración del Servidor Jes.
265
Especificamos el dominio de la empresa que en este caso sería
“empresa1.com”
FIGURA 58. Archivo de configuración mail.conf en la empresa1.com.
Configuramos la variable “defaultsmtpservers=<IP del servidor antispam>”
En este parámetro colocamos la dirección IP del servidor antispam por
defecto.
266
FIGURA 59. Archivo de configuración de mail.conf parte 2.
En el archivo de configuración de usuario se ingresan todas las cuentas de
correo de la empresa con su respectiva clave la cual una ves ingresada y
posterior cierre de el archivo, al momento de abrirlo de nuevo nos daremos
cuenta que la clave aparecerá encriptado.
Aquí agregamos la lista de cuentas de todos los usuarios. Primero escribimos
user.<nombre de cuenta>@<dominio>
267
Un ejemplo de una cuenta es:
[email protected] =clave12345678
FIGURA 60. Archivo de configuración user.conf del Servidor Jes en laempresa1.com.
2.28 CONFIGURACIÓN DE SERVIDOR DNS EN LA EMPRESA2
Igual que en la empresa 1, en al empresa2 dando clic derecho vamos a host
nuevo en el cual nos permitirá crear el registro tipo A.
268
FIGURA 61. Configuración de Servidor DNS en la empresa2.
Solo damos un clic en agregar host sin escribir nada y ya estará creado el
registro tipo A.
FIGURA 62. Creación del registro tipo A.
269
Aquí creamos el registro de tipo MX que se utiliza para el intercambio de
correo y va asociado con el registro tipo A.
FIGURA 63. Creación del registro tipo MX en la empresa2.
En las propiedades de Conexión de área local ingresamos la Dirección IP,
La máscara de subred y el sufijo del dominio de la empresa 2, que en este
caso sería “empresa2.com”
270
FIGURA 64. Configuración de IP y DNS con sufijo de dominio en laempresa2.
2.29 CONFIGURACIÓN DE EL SERVIDOR DE CORREO JES EN LA
EMPRESA2
En este vamos a configurar los archivos “mail.conf” y “user.conf”·
271
FIGURA 65. Archivos de configuración de mail.conf y user.conf enempresa2.
Ponemos el puerto smtp =25, el puerto pop3=110, el pool de hilos que será
atendido simultáneamente que por motivos de prueba solo pondremos 5,
threads=5, el nombre de el dominio el cual en este caso será
“empresa2.com”
FIGURA 66. Configuración del archivo mail.conf en el Servidor Jes de laempres2.
También ponemos la IP del servidor SMTP por default que en este caso sería
la IP del servidor 2.
272
Ponemos la IP del “relay.ipaddresses” que nos permite re direccionar a una
maquina especifica a la que se quiere acceder, en este caso sería la
siguiente dirección de IP con un wildcards “192.168.2.* ” .
FIGURA 67. Continuación de la configuración anterior.
Todos los usuarios serán definidos en este archivo, que en este caso nuestro
usuario de prueba tiene el nombre siguiente [email protected]
hay que tomar en cuenta que el formato debe de ser siempre primero “user.”
segundo el nombre del usuario ej.: “pepe” y su domino “@empresa1.com”.
Aquí también ingresamos la contraseña del usuario, un ejemplo de esto sería
“[email protected]=miclave123”.
273
FIGURA 68. Configuración del archivo user.conf del servidor de correo Jesen la empresa2.