ÍNDICE GENERAL AGRADECIMIENTO II...
Transcript of ÍNDICE GENERAL AGRADECIMIENTO II...
I
ÍNDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA III
TRIBUNAL DE GRADUACIÓN IV
DECLARACIÓN EXPRESA V
RESUMEN VI
ÍNDICE DE CONTENIDO VIII
ÍNDICE DE FIGURAS X
II
Agradecimiento
Le agradecemos a Dios por darnos la fuerza necesaria
para luchar día a día para alcanzar nuestras metas, y a
nuestras familias por el apoyo incondicional que nos dieron
desde los inicios de la carrera, solo con la ayuda de ellos
logramos llegar hasta esta etapa final, gracias por todo lo
que hicieron por nosotros.
III
Dedicatoria
Este Proyecto esta dedicado a Dios, a nuestras familias, al esfuerzo de cada
uno de los integrantes de este proyecto, a la constante lucha por conseguir los
objetivos que cada uno de nosotros se fijo desde el principio de nuestros
estudios.
Dedicamos nuestro Proyecto a todos los que de una u otra forma hicieron
posible que culminemos esta etapa de nuestras vidas como lo es la obtención
del titulo de Ingenieros en Sistemas Computacionales.
IV
Tribunal de Graduación
Presidente 1er Vocal
2do Vocal Secretario
V
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente a los suscritos,
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)
Carlos Plua
Carlos Ponce
Paul Baño
VI
Resumen
Las grandes redes de computadoras ameritan estar controladas de una manera
eficaz y correcta para evitar su mal funcionamiento.
Esto conlleva a la utilización de herramientas de hardware y software que
permitan solucionar los problemas presentados en la administración de
grandes Redes Corporativas.
Por eso nuestro proyecto Servidor de Dominio Primario con integración a
Microsoft esta orientado a la administrar las cuentas y recursos del dominio en
cuestión, sean estos usuarios, grupos de trabajo y/o estaciones de trabajo.
Para la realización de este Proyecto se utilizaron herramientas informáticas de
código libre tales como Java, Postgresql, Openldap, Eclipse, Sistema Operativo
Linux en su distribución Fedora Core 7, en lo relacionado al hardware se
utilizaron computadoras de alto rendimiento tipo PC.
En el Sistema Operativo Linux en su distribución Fedora Core 7 fue necesario
configurar los servicios de DNS, DHCP, LDAP y Samba.
VII
Summary
The big networks should be controlled in an effective and correct way to avoid
their inconrrect operation.
This produce the use of hardware and software tools that allow to solve the
problems showed in the administration of big networks
For that reason our project Primary Domain Controller with integration to
Microsoft is develope to administrate the resort of the network, these could be
users, work groups and/or work stations.
To develope this project we use tools of free code as example Java,
Postgresql, Openldap, Eclipse, Operating system Linux in their distribution
Fedora Core 7, in the related to the hardware we use computers of high
performance
In the Operating system Linux in their distribution Fedora Core 7 were
necessary to configure the services of DNS, DHCP, LDAP and Samba.
VIII
Índice de Contenido
INTRODUCCIÓN ................................................... Error! Bookmark not defined.
CAPITULO 1 ........................................................... Error! Bookmark not defined.
ENTORNO PARA EL DESARROLLO DEL PROYECTO .Error! Bookmark not
defined.
1.- Problemática ................................................. Error! Bookmark not defined.
1.1.- El Problema...................................... Error! Bookmark not defined. 1.2.- La Solución ...................................... Error! Bookmark not defined. 1.3.- Visión ............................................... Error! Bookmark not defined. 1.4.- Misión ............................................... Error! Bookmark not defined. 1.6.- Alcances .......................................... Error! Bookmark not defined. 1.7.- Ventajas y Desventajas .................... Error! Bookmark not defined. 1.8.- Análisis FODA .................................. Error! Bookmark not defined. 1.9.- Arquitectura del Sistema .................. Error! Bookmark not defined. 1.10.- Recursos ........................................ Error! Bookmark not defined. 1.11- Cronograma de Actividades ............ Error! Bookmark not defined. 1.12- Estudio de Mercado ........................ Error! Bookmark not defined. 1.12.1.- Análisis de Mercado ................ Error! Bookmark not defined. 1.13.- Análisis de Riesgos e intangibles ... Error! Bookmark not defined. 1.13.1.- Interpretación de los riesgos ... Error! Bookmark not defined.
1.13.2.- Impacto Probabilidades y Plan de Contingencias de riesgos ................................................................. Error! Bookmark not defined. 1.13.3.- Tabla de riesgos ...................... Error! Bookmark not defined. 1.14.- CONCLUSION ............................... Error! Bookmark not defined.
CAPITULO 2 ........................................................... Error! Bookmark not defined.
Análisis ................................................................ Error! Bookmark not defined. 2.1.- ¿Que es Servidor de Dominio Corporativo? ... Error! Bookmark not defined. 2.2.- Componentes del Servidor de Dominio Corporativo.Error! Bookmark not defined. 2.3.- Samba .............................................. Error! Bookmark not defined. 2.4.- LDAP ................................................ Error! Bookmark not defined. 2.5.- Modelado del Análisis ...................... Error! Bookmark not defined. 2.6. - Diagrama de Flujo de Dato ............. Error! Bookmark not defined. 2.7.- Diseño de Componentes ................. Error! Bookmark not defined.
DISEÑO DEL SISTEMA ........................................ Error! Bookmark not defined.
3.- DISEÑO ............................................................. Error! Bookmark not defined.
3.1.- Diseño de Clases y Objetos ..................... Error! Bookmark not defined.
3.1.1.- Principales Objetos Dao ................ Error! Bookmark not defined. 3.1.2.- Principales Objetos Bo .................. Error! Bookmark not defined. 3.1.3.- Principales Servlets ....................... Error! Bookmark not defined. 3.3.- Diseño de la Interfaz ........................ Error! Bookmark not defined.
Capitulo 4 ................................................................ Error! Bookmark not defined.
Codificación ............................................................ Error! Bookmark not defined.
4.1. - Principales Componentes ........................ Error! Bookmark not defined.
4.1.2.- Servidor de Dominio ...................... Error! Bookmark not defined. 4.1.3.- Usuario Administrador ................... Error! Bookmark not defined. 4.2.- Procesos Principales ........................ Error! Bookmark not defined. 4.3.- Estándares ....................................... Error! Bookmark not defined.
IX
4.3.2.- Definición de la estructura de datosError! Bookmark not defined.
Desarrollo, Pruebas e Implementación del Sistema ..........Error! Bookmark not
defined.
5.- Desarrollo ...................................................... Error! Bookmark not defined.
5.1.- Creación de la Base de Datos.......... Error! Bookmark not defined. 5.2.- Desarrollo de Aplicación .................. Error! Bookmark not defined. 5.3.- PRUEBAS DEL SISTEMA ............... Error! Bookmark not defined. 5.4.- Modelo de prueba ............................ Error! Bookmark not defined. 5.5.- IMPLEMENTACIÓN DEL SISTEMA Error! Bookmark not defined. 5.6.- Recursos de Hardware .................... Error! Bookmark not defined.
Capitulo 6 ................................................................ Error! Bookmark not defined.
Recomendaciones y Conclusiones ...................... Error! Bookmark not defined.
6.1.- Recomendaciones ..................................... Error! Bookmark not defined.
6.1.1.- Recomendaciones Software ......... Error! Bookmark not defined. 6.1.2.- Hardware....................................... Error! Bookmark not defined. 6.1.3.- Recomendaciones Finales: ........... Error! Bookmark not defined. 6.2.- Conclusiones:................................... Error! Bookmark not defined.
Glosario de Términos............................................. Error! Bookmark not defined.
Bibliografía .............................................................. Error! Bookmark not defined.
X
INDICE DE FIGURAS
Figura 1 65
Figura 2 66
Figura 3 67
Figura 4 68
Figura 5 .69
Figura 6 70
Figura 7 71
Figura 8 72
Figura 9 76
Figura 10 80
Figura 11 80
Figura 12 81
Figura 13 81
Figura 14 82
Figura 15 82
Figura 16 83
Figura 17 83
Figura 18 84
Figura 19 84
Figura 20 85
Figura 21 85
XI
Figura 22 86
Figura 23 86
Figura 24 87
Figura 25 87
Figura 26 88
Figura 27 89
1
INTRODUCCIÓN
Las grandes redes de computadoras ameritan estar controladas de una
manera eficaz y correcta para evitar su mal funcionamiento.
Esto conlleva a la utilización de herramientas de hardware y software que
permitan solucionar los problemas presentados en la administración de
grandes Redes Corporativas.
Para los Administradores de Redes, sistemas como los que otorgan las
grandes empresas de Desarrollo (Microsoft, Linux, y otros) se adaptan a su
entorno de trabajo de acuerdo a sus necesidades.
Dependiendo de los requerimientos de la organización se adaptara una que
otra herramienta de software, si esta opción es la más conveniente o no
dependerá del tiempo de uso de la aplicación y de la buena preparación y el
control del Administrador de la Red Corporativa en dicha organización.
Para nuestro tema de proyecto “Servidor de Dominio Corporativo con
integración a Microsoft” vamos a utilizar la plataforma Linux porque
2
consideramos que presenta muchas bondades en cuanto a la configuración y
parametrización de nuestra futura aplicación.
El mundo actual de las redes de computadoras amerita tener herramientas
sofisticadas que de una manera u otra satisfagan las necesidades de los
Administradores de Redes por motivos como ese y por muchos mas nos
hemos propuesto implementar una aplicación que brinde todas esas
bondades y que sea de igual o mayor magnitud de las que ya existen en el
mercado para de esta manera poder competir con las grandes empresas
proveedoras de sistemas.
3
CAPITULO 1
ENTORNO PARA EL DESARROLLO DEL PROYECTO
1.- Problemática
1.1.- El Problema
En los actuales momentos las redes computacionales se conforman
de un gran número de estaciones de trabajo (PC’s), surgen problemas
al momento de no poder controlar de forma eficaz algo tan importante
como es el acceso a la información.
Desde el punto de vista de la seguridad, el manejo correcto de la
autenticación es vital para limitar el acceso a la información. Y al no
manejar este concepto, se está abriendo las puertas a los accesos no
permitidos.
La administración (mediante el uso de grupos de trabajo) también se
vuelve un dolor de cabeza para cualquier administrador. Ya que el
esquema de seguridad que aplicamos deberá ser configurado en cada
máquina, individualmente (es decir de forma no centralizada). Por
ejemplo: En el mejor de los casos podremos dar acceso a los usuarios
4
que estén creados localmente en cada máquina. Mientras que por otro
lado, puede que todos los usuarios de la red tengan permiso para
acceder, modificar o eliminar información.
1.2.- La Solución
Por los problemas definidos anteriormente nuestra propuesta de
solución es realizar una implementación basada en el sistema
operativo Linux con las siguientes prestaciones:
Un servidor de dominio corporativo el cual controlará de una manera
eficaz el acceso de las diferentes estaciones de trabajo a los
diferentes recursos.
Con la implementación de este dominio corporativo se logrará
centralizar el control de acceso que tendrán los usuarios.
Posibilidad de configurar remotamente el servidor de dominio
corporativo, por medio de una interfaz web.
Aplicar las políticas referentes a los usuarios y contraseñas, los
métodos de acceso a los servidores y a los sistemas. Para así poder
5
identificar a los usuarios que inician sesiones en el dominio,
proporcionando al usuario el acceso a la red de acuerdo a los
derechos de acceso que se le hayan asignado y que sirvan como
prueba de su autenticidad para el resto de los dispositivos de la red,
Definir la complejidad que debe reunir las contraseñas y su validación
dentro de la red, el tiempo de trabajo de las estaciones de trabajo,
áreas de acceso por cada usuario y ocultar los datos frente a accesos
no autorizados
1.3.- Visión
Implementar un modelo seguro de un servidor de dominio en el que
se garantice que todos los usuarios que acceden a nuestro dominio
obtengan los recursos a los que tengan derecho.
1.4.- Misión
Nuestra misión es darle al administrador de red corporativa una
implementación que logre un control eficaz sobre el acceso a los
recursos que presta dicha red y de esta manera evitar las anomalías
que se presentan día a día cuando no se tiene un control total de los
accesos a los servicios que presta dicha red.
6
Facilitar la transferencia de archivos y la copia de respaldo de los
datos entre miembros del Dominio
1.5.-Objetivos
1.5.1.- General
Llevar a cabo la implementación de un Controlador de Dominio
Primario, es decir, un servidor único que llevará todo el control de la
red interna, obteniendo la información de los usuarios de un servidor
LDAP, para ofrecer la posibilidad a los clientes Windows que inicien
sesión en el dominio.
1.5.2.- Específicos
Compartir servicios y recursos entre los usuarios de un entorno de red
formado por equipos que tengan instalados sistemas operativos
Windows o Linux.
Implantar un esquema de directorios de tipo LDAP para almacenar los
datos de los diferentes usuarios del dominio.
Implantar un esquema de seguridad basado en usuario y contraseña
usando Openldap
7
Transparentar el inicio de sesión de los diferentes usuarios en el
dominio, es decir que el servidor sea totalmente accesible a los
usuarios autenticados y sin importar que estén usando Linux o
Windows y puedan trabajar sin ningún tipo inconveniente.
Dar los accesos a los recursos permitidos en cualquier punto de la red
mediante un único proceso de inicio de sesión.
Crear un punto de administración único para los objetos de la red.
Implementar una interfaz Web que permita manejar las opciones del
controlador de dominio.
1.6.- Alcances
Configuración de Servidor Linux:
Configuración Samba para interactuar con Windows.
Configuración LDAP como esquema de directorio.
Integración Samba y LDAP
Configuración de los servicios DNS y DHCP
Autenticación y acceso a los recursos
Acceso a los recursos a usuarios autenticados.
8
Denegación de acceso a usuarios no autenticados.
Ingreso a la página de configuración del Dominio Corporativo
Validación de usuario y contraseña.
Manejo de Grupos y Cuentas:
Grupos
Creación de grupos.
Modificación de grupos (Ingreso o eliminación de usuarios del
grupo).
Eliminación de grupos.
Cuentas de usuario
Recolección de datos para nueva cuenta de usuario.
Almacenamiento de los datos de las diferentes cuentas de
usuario registradas en el dominio (datos como: UID, GID,
nombre completo, e-mail).
Modificación de cuenta.
Eliminación de cuenta.
9
Cuentas de máquina
Recolección de datos para nueva cuenta de máquina.
Almacenamiento de los datos de la máquina.
Modificación de cuenta.
Eliminación de cuenta.
Manejo de políticas:
Políticas de usuario
Asignación de horarios en que una cuenta puede trabajar
dentro del dominio.
Inhabilitación de cuentas.
Políticas de contraseña
Caducidad de contraseña.
Complejidad de contraseña.
Complejidad predeterminada (alta, media, ninguna).
Complejidad Personalizada
10
1.7.- Ventajas y Desventajas
1.7.1.- Ventajas
Los servicios de redes más convencionales usan esquemas de
autenticación basados en contraseña. Tales esquemas requieren que
cuando un usuario necesita una autenticación un servidor de red, debe
proporcionar un nombre de usuario y una contraseña.
Lamentablemente, la información de autenticación para muchos
servicios se transmite sin estar encriptada. Para que un esquema de
este tipo sea seguro, la red tiene que estar inaccesible a usuarios
externos, y todos los usuarios de la red deben ser de confianza.
Así este caso, una vez que la red se conecte a la Internet, ya no
puede asumir que la red es segura. Cualquier intruso del sistema con
acceso a la red y un analizador de paquetes puede interceptar
cualquier contraseña enviada de este modo, comprometiendo las
cuentas de usuarios y la integridad de toda la infraestructura de
seguridad.
El principal beneficio de usar LDAP es que la información para una
organización entera puede ser consolidada en un repositorio central.
Por ejemplo, en lugar de manejar listas de usuario para cada grupo
11
dentro de una organización, LDAP puede ser usado como un
directorio central accesible desde cualquier lugar en la red.
1.7.2.- Desventajas
Openldap presupone que cada usuario es de confianza pero que está
utilizando una máquina no fiable en una red no fiable. Su principal
objetivo es el de prevenir que las contraseñas no encriptadas sean
enviadas a través de la red. Sin embargo, si cualquier otro usuario
aparte del usuario adecuado, tiene acceso a la máquina que emite
tickets usados para la autenticación; llamado
Para que una aplicación use Openldap, el código debe ser modificado
para hacer las llamadas apropiadas a las librerías de Openldad.
Para algunas aplicaciones, esto puede suponer un esfuerzo excesivo
de programación debido al tamaño de la aplicación y su diseño. Para
otras aplicaciones incompatibles, los cambios se deben realizar en el
modo en que el servidor de red y sus clientes se comunican; de
nuevo, esto puede suponer bastante programación. En general, las
aplicaciones de código cerrado que no tienen soporte para Openldap
son usualmente las más problemáticas.
12
Finalmente, si decide usar Openldap en su red, debe darse cuenta de
que es una elección de todo o nada. Si decide usar Openldap en su
red, debe recordar que si se transmite cualquier contraseña a un
servicio que no usa Openldap para autenticar, se corre el riesgo de
que el paquete pueda ser interceptado. Así, su red no obtendrá ningún
beneficio de usar Openldap.
13
1.8.- Análisis FODA
1.8.1.- Fortalezas
Los usuarios solo van tener los privilegios necesarios para
acceder a los recursos que necesitan siendo usuarios.
Para identificar un equipo de la red se usaran nombres que es
más fácil de recordar que las respectivas direcciones IP del
equipo al que se a de acceder.
Las direcciones IP pueden cambiar pero los nombres
permanecen constantes.
Evitar que las claves de acceso se repitan entre los usuarios.
Autentificado el usuario en el dominio, de manera que el
usuario para que solo pueda acceder a los recursos que se le
hayan asignados
Administrar usuarios mediante el uso de grupos de usuarios, el
cual nos da la facilidad de aplicar las políticas de seguridad a
14
grupos específicos los cuales heredaran estas a los miembros
de dicho grupo.
1.8.2.- Oportunidades
Los usuarios no necesitaran de aprenderse números
(direcciones IP) solo deberán de recordar un nombre para
encontrar los recursos ya sea en Internet o en una Intranet, lo
cual facilita el trabajo de el usuario al momento de solicitar un
recurso.
Los usuarios solo van tener los privilegios necesarios a los
recursos que necesitan para realizar sus actividades de
usuarios, es decir, solo accederán a los recursos que se hayan
previamente definido, evitando así cualquier intromisión en
alguna recurso que no se le haya asignado
La seguridad del sistema depende en gran medida de nuestras
políticas y de la configuración del sistema.
Revisar las claves de los usuarios para evitar claves fáciles.
15
1.8.3.- Debilidades
En un exceso de seguridad, podemos cometer el error de limitar
demasiado los privilegios de los usuarios. Esto hace que el
usuario no pueda usar los recursos que normalmente
necesitaría para desempeñar su trabajo.
Si los usuarios tienen privilegios de los que más allá de sus
funciones requieran, estos por desconocimiento,
experimentación o maldad causen daño al sistema o
entorpezcan el trabajo de otros usuarios.
Al establecer las políticas de contraseña se obligue al usuario a
usar claves de acceso difíciles de recordar para el y tenga que
tener que escribirlas en un papel o dejar la clave en una parte
visible.
1.8.4.- Amenazas
A los usuarios del sistema no se les establezcan normas y
políticas sobre el uso de la máquina
16
Establecer que haya varios administradores para uno o varios
recursos, es decir varias personas pueden controlar un recurso
al mismo tiempo.
Que el usuario al momento de solicitarle el cambio de una clave
de acceso solo le cambie una letra o un número.
1.9.- Arquitectura del Sistema
1.9.1. Modelo de desarrollo
El modelo de desarrollo que se planifico para la puesta en marcha
del proyecto es El Método de Ciclo de Vida en Espiral, para
empezar a implementar este modelo debemos establecer los
objetivos, alcances, visión y misión del proyecto, planificación de
las tareas requeridas para definir recursos, el tiempo y otras
informaciones relacionadas con el proyecto. Establecer el Análisis
de riesgos: las tareas requeridas para evaluar riesgos técnicos y
otras informaciones relacionadas con el proyecto.
El Método de Ciclo de Vida en Espiral se eligió por los siguientes
motivos:
17
En cada giro que se realiza en este modelo se usa como nuevo
punto de partida en base a lo que anteriormente definido,
permitiendo corregir los errores sin mayor complicación
Permite aplicar el enfoque de construcción de prototipos en
cualquier etapa de evolución del proyecto.
Reduce los riesgos antes de que se conviertan en problemas.
1.9.2.- Arquitectura para el desarrollo WEB
En la implementación de nuestra aplicación vamos a utilizar la
arquitectura de tres capas para el desarrollo WEB:
La ventaja principal de este estilo, es que el desarrollo se puede llevar
a cabo en varios niveles y en caso de algún cambio sólo se lo realiza
al nivel requerido sin tener que revisar entre el código de los otros
componentes.
Además permite distribuir el trabajo de creación de una aplicación por
niveles, de este modo, cada grupo de trabajo está totalmente
18
abstraído del resto de niveles, simplemente es necesario conocer la
API que existe entre niveles.
En el diseño de sistemas informáticos actual se suele usar las
arquitecturas multinivel o Programación por capas. En dichas
arquitecturas a cada nivel se le confía una misión simple, lo que
permite el diseño de arquitecturas escalables (que pueden ampliarse
con facilidad en caso de que las necesidades aumenten).
1.9.2.1.- Primera Capa:
La primera capa es diseñar la interfaz grafica para el usuario, de modo
que el sistema comunique la información y así capturar la información
interactuando con la aplicación externa, es decir, presenta el sistema
al usuario, le comunica la información y captura la información del
usuario dando un mínimo de proceso. Esta capa se comunica
únicamente con la capa de negocio.
1.9.2.2.- Segunda Capa:
Servidor de aplicaciones Tomcat el cuál servirá las páginas jsp, aquí
es donde residen los programas que se ejecutan, recibiendo las
peticiones del usuario y enviando las respuestas tras el proceso. Esta
capa se comunica con la capa de presentación, para recibir las
19
solicitudes y presentar los resultados, y con la capa de datos, para
solicitar al gestor de base de datos para almacenar o recuperar datos
de él.
1.9.2.3.- Tercera Capa:
La tercera capa es un sistema de bases de datos para guardar las
configuraciones que el usuario realice al Servidor de Dominio. Está
formada por un de gestor de bases de datos que realiza todo el
almacenamiento de datos, reciben solicitudes de almacenamiento o
recuperación de información desde la capa de negocio.
20
1.10.- Recursos
1.10.1.- Hardware
3 PC´s (PC_01 Servidor Linux, PC_02 Cliente Windows, PC_03
Cliente Windows y Virtual Machine para Linux)
Memoria RAM: 512 Mb en adelante c/u para los equipos Linux.
Disco duro: 40GB
1 Switch
3 Cables de red con conectores rj45
1.10.2.- Software
S.O. Windows XP.
Máquina Virtual para Linux.
S.O. Linux Fedora Core.
Java
Navegador FireFox Mozzilla.
Servidor de Aplicaciones Apache.
Base de datos PostGre
Open Ldap
21
1.10.3.- Descripción del Hardware y Software
1.10.3.1.- Hardware
La primera PC se la utilizara como Servidor. Esta se encargará
de controlar el Dominio, receptara las solicitudes de ingreso de
los clientes, además de ser la puerta de enlace para acceder a
los recursos compartidos en el Dominio.
La segunda y tercera Pc se las utilizara como clientes, las
cuales realizaran la función de pedir acceso al servidor,
compartir recursos y solicitar recursos entre ellas y al servidor
Las Pc’s antes descritas deben poseer ciertas características
de Hardware como memoria RAM de 512 Mb y disco duro de
40 Gb, tarjeta de red,
El Switch de ocho puertos de 10/100 Mbps, los cables servirán
para interconectar las computadoras entre si.
1.10.3.2.- Descripción del Software
Lo que busca nuestra solución de software es realizar de forma
transparente la configuración del dominio corporativo, es decir,
que el administrador no tendrá que configurar directamente
22
cada uno de los elementos que se emplean en la
implementación del dominio. Sea este LDAP o Samba.
El software, que será desarrollado mediante la arquitectura 3
capas, se encargará de recoger los cambios a realizar mediante
su interfaz web y así mismo será el encargado de realizar las
configuraciones correspondientes en cada elemento
implementado.
El software será desarrollado aplicando programación JSP, que
nos permite aprovechar las bondades del lenguaje Java.
La forma de acceder al software será mediante un navegador
web, que será el encargado de presentar nuestras páginas
JSP.
Las páginas JSP están compuestas de código HTML/XML
mezclado con etiquetas especiales para programar scripts
ejecutables en el servidor en sintaxis Java (que es en esencia
un lenguaje multiplataforma). Por lo tanto, las JSP podremos
escribirlas con nuestro editor HTML/XML habitual.
23
Las razones para escoger estas herramientas son:
Plataforma e independencia del servidor.- JSP sigue la
filosofía de la arquitectura JAVA de "escribe una vez
ejecuta donde quieras"
Proceso de desarrollo abierto (open source).- El API JSP
se beneficia de la extendida comunidad JAVA existente.
Reusabilidad entre plataformas.- Los componentes JSP
son reusables en distintas plataformas (UNIX, Windows)
1.10.3.3.- Implementación
La implementación del dominio se la hará en la distribución
Linux Fedora 6 (kernel 2.6).
La autenticación será Single Sign On, lo que implica que el
usuario se logonea una sola vez en el dominio y no logonearse
por cada servicio de la red al que se quiere acceder.
La base del dominio estará en 3 componentes:
Samba (Para integración con equipos con plataforma Microsoft)
24
LDAP (servicio de directorio)
A parte de estos componentes, serán configurados para este
proyecto los siguientes servicios:
DHCP (Administración de IPs dentro del dominio)
DNS (Para resolución de nombres)
1.10.3.3.1.- Samba
Se usará Samba 3 para lograr la interacción entre los equipos
con plataforma Linux y los que tienen plataforma Microsoft
Cabe recalcar que Samba 3 no es un equivalente de Windows
2003 Server.
Samba ofrece las siguientes características:
Administración de cuentas
Aprovisionamiento de recursos.
Soporte para roles de administración.
Administración de servicios.
25
1.103.3.2.- LDAP (Lightweight Directory Access Protocol)
LDAP será el directorio del dominio corporativo y será usado
por Openldap para autenticar la información provista por los
usuarios que intentan logonearse en el dominio.
La ventaja principal de usar LDAP es la consolidación de cierto
tipo de información en el interior de su empresa. Por ejemplo,
todas las diferentes listas de usuarios en el interior de su
empresa pueden ser fusionadas en un solo directorio LDAP.
Este directorio, a continuación, podrá ser consultado desde
cualquier aplicación habilitada para LDAP a la que le sirva la
información.
En ambas Pc que servirán de cliente tendrán instalado el
sistema operativo Windows XP, las cuales se las configurara
como miembros del Dominio, además en una de las Pc clientes
se les instalara el Vmware para poder instalar un tercer cliente
que tendrá como sistema operativo una distribución de Linux
El VmWare es un software que permite crear una maquina
virtual dentro del sistema operativo XP, en esta maquina virtual
se puede instalar otro sistema operativo sin que afecte al que
26
esta inicialmente instalado, y a su vez se puedan estar
ejecutando los dos sistemas operativos a la vez.
En el computador que se usara como servidor se instalara una
distribución del Sistema Operativo Linux
El lenguaje de programación que se utilizara en la creación de
la interfaz Web es Java.
Para levantar la aplicaron Web se utilizara el navegador FireFox
Mozilla nos permitirá levantar la aplicación a crear en el
ambiente web
27
1.11- Cronograma de Actividades
Para el desarrollo e implementación se han considerado 184 días
Actividad Duración
Fecha
Comienzo Fecha Fin
Entrega del tema de proyecto 1 día lun 16/04/07 lun 16/04/07
Comprensión del tema 1 día mar 17/04/07 mar 17/04/07
Diálogo sobre el tema del
proyecto 1 día mar 17/04/07 mar 17/04/07
Entrevista con el ayudante de
proyecto 1 día mié 18/04/07 mié 18/04/07
Entendimiento general del
funcionamiento de Linux 2 días jue 19/04/07 vie 20/04/07
Investigar funcionamiento de
SAMBA 3 días lun 23/04/07 mié 25/04/07
Investigar funcionamiento de DNS
y DHCP 3 días lun 23/04/07 mié 25/04/07
Investigar funcionamiento de
LDAP 3 días lun 23/04/07 mié 25/04/07
Investigar sobre integración
SAMBA, y LDAP 3 días lun 23/04/07 mié 25/04/07
Misión 1 día jue 26/04/07 jue 26/04/07
28
Visión 1 día jue 26/04/07 jue 26/04/07
Determinar el Problema 1 día vie 27/04/07 vie 27/04/07
Determinar nuestra Solución 1 día vie 27/04/07 vie 27/04/07
Definir de objetivos Generales 1 día lun 30/04/07 lun 30/04/07
Definir de objetivos Específicos 1 día mar 01/05/07 mar 01/05/07
Determinar Alcances 2 días mar 01/05/07 mié 02/05/07
Establecer Arquitectura del
sistema 1 día jue 03/05/07 jue 03/05/07
Establecer Modelo de desarrollo 1 día jue 03/05/07 jue 03/05/07
Establecer Metodología de diseño 1 día jue 03/05/07 jue 03/05/07
Establecer Recursos 1 día vie 04/05/07 vie 04/05/07
Estudio de Mercado 1 día lun 07/05/07 lun 07/05/07
Análisis del mercado 1 día mar 08/05/07 mar 08/05/07
Elaborar cuestionario de la
entrevista 1 día mié 09/05/07 mié 09/05/07
Entrevistas para los usuarios y
jefes de sistemas 3 días jue 10/05/07 lun 14/05/07
Establecer políticas de servicio 1 día mar 15/05/07 mar 15/05/07
Estudio Técnico 1 día mié 16/05/07 mié 16/05/07
Análisis FODA del sistema 1 día jue 17/05/07 jue 17/05/07
Establecer proceso de servicio 1 día lun 07/05/07 lun 07/05/07
29
Establecer proceso de desarrollo
del software 1 día mar 08/05/07 mar 08/05/07
Definir requerimientos de
Hardware y Software 1 día mar 08/05/07 mar 08/05/07
Establecer descripción de
Hardware y Software 1 día mar 08/05/07 mar 08/05/07
Análisis del Proyecto 2 días mié 09/05/07 jue 10/05/07
Elaboración del Diagrama Entidad
Relación (DER) 1 día vie 11/05/07 vie 11/05/07
Diccionario de Datos 3 días lun 14/05/07 mié 16/05/07
Elaboración de Diagrama de Flujo
de datos (DFD) 2 días jue 17/05/07 vie 18/05/07
Elaboración de Diagrama de Flujo
de Información (DFI) 2 días jue 17/05/07 vie 18/05/07
Elaboración de Diagrama de
Transición de Estados (DTE) 2 días lun 21/05/07 mar 22/05/07
Elaboración de Diagrama de
Componente 2 días lun 21/05/07 mar 22/05/07
Diseño del Proyecto 2 días mié 23/05/07 jue 24/05/07
Instalación de herramientas de
diseño 2 días vie 25/05/07 lun 28/05/07
Instalación de JAVA 1 día mar 29/05/07 mar 29/05/07
30
Instalación de Wmware
Workstation 1 día mié 30/05/07 mié 30/05/07
Instalación de Sistema Operativo
Linux distribución Fedora Core 7 1 día mié 30/05/07 mié 30/05/07
Instalación de Apache 1 día jue 31/05/07 jue 31/05/07
Instalación de Postgresql 1 día vie 01/06/07 vie 01/06/07
Diseño de Interfaces 20 días lun 04/06/07 vie 29/06/07
Diseño de interfaz de opción de
Usuario 15 días lun 02/07/07 vie 20/07/07
Configuración de el Servidor
(Crear el dominio) 1 día lun 23/07/07 lun 23/07/07
Configurar el Samba 2 días mar 24/07/07 mié 25/07/07
Configurar el OpenLdap 2 días jue 26/07/07 vie 27/07/07
Configurar los demás equipos del
dominio 2 días lun 30/07/07 mar 31/07/07
Establecer explicación de
Interfaces del sistema 3 días mié 01/08/07 vie 03/08/07
Revisión General de la primera
fase de presentación 3 días Mie 06/08/07 mar 08/08/07
Diseño de la base de datos 10 días mié 08/08/07 mar 21/08/07
Codificación 37 días mié 12/09/07 mie 31/10/07
31
Plan de pruebas 10 días jue 1/11/07 vie 14/11/07
Corrección 20 dias Mar 6/11/07 lun 2/12/07
Implementación del Proyecto 15 días lun 19/11/07 Jue 29/11/07
Entrega del Proyecto 15 días Vie 30/11/07 Vie 14/12/07
1.12- Estudio de Mercado
Nuestro estudio de Mercado se lo realizó en base a las necesidades
de las grandes y pequeñas organizaciones que deben controlar de
una manera eficaz su red de computadoras, así mismo como la
configuración de lo recursos compartidos y la asignación de
privilegios a los diferentes usuarios en dicha red.
El objetivo principal es conseguir la aceptación de nuestro producto
en dicho mercado, conocer la opinión de nuestros clientes sobre
nuestro producto y así realizar nuevas modificaciones para que en
futuras versiones de nuestro sistema se pueda corregir estas
falencias y mostrar un producto que brinde mejores prestaciones.
El sistema a implementar será desarrollado con herramientas de
código abierto para poder competir con los productos ya existentes
en el mercado de las diferentes empresas desarrolladoras de
32
software y ofrecer una herramienta que reúna en un solo paquete de
software tosa las aplicaciones relaciona con los Servidores de
Dominios Corporativos.
1.12.1.- Análisis de Mercado
Nuestro mercado meta son las pequeñas y grandes empresas que
necesitan tener una herramienta que les permita administrar (sus
falencias en la prestación de servicios y administración de) los
recursos compartidos en sus redes de computadoras.
En nuestro mercado meta son muy pocas las organizaciones que
tienen implantado una herramienta que les permita control total sobre
sus redes locales, nuestro servidor de domino corporativo esta
orientado a este tipo de clientes.
Se desarrollara una herramienta de fácil acceso y configuración para
que de esta manera se vaya ubicando en nuestro mercado meta
33
1.13.- Análisis de Riesgos e intangibles
Que nuestro sistema no se adapte a nuestros clientes lo que
incurriría en un nuevo análisis de los requerimientos del
software a implementar
Si las aplicaciones existentes para cubrir la necesidad de un
Servidor de Dominio Corporativo ofrecen mejores beneficios
que nuestro sistema a implementar, nuestros clientes se
decidan por estas y dejen a un lado nuestra aplicación.
Que la metodología de desarrollo elegida no sea la correcta
Surgimiento de nuevas especificaciones del Software.
Estimación errónea del tiempo.
Problemas con el Personal de Desarrollo
No llegar a un consenso para las reuniones establecidas en
cuanto a la planificación de la entrega de avances de la
aplicación a implementar por parte del grupo de desarrollo.
Un grave problema es la preparación de los usuarios hacia la
nueva herramienta a utilizar esto se produce por el poco
conocimiento para manejar software
Debemos tener nuestro plan de contingencias en casos de
perdidas de información cuando no realicemos los respaldos
respectivos.
34
Problemas con los equipos de hardware
1.13.1.- Interpretación de los riesgos
Que nuestro sistema no se adapte a nuestros clientes lo que
incurriría en un nuevo análisis de los requerimientos del software
a implementar.
Un mundo aparte son los clientes ellos siempre van a tener la razón, y
esto conlleva a nuestros programadores a tratar de una manera u otra
adaptarse a todo tipo de clientes porque se van a realizar severas
modificaciones si es el caso por ejemplo que se tenga que cambia la
GUI (Interfaz Grafica de Usuario) al estilo que prefiere el cliente, o
talvez la manera como nuestro sistema presenta los reportes no le
agrade, situaciones que para los diseñadores de software conllevan en
ciertos casos a tumbar todo un proceso largo de desarrollo y no queda
más que empezar otra vez con una nueva entrevista o un nuevo
análisis.
35
Si las aplicaciones existentes para cubrir la necesidad de un
Servidor de Dominio Corporativo ofrecen mejores beneficios que
nuestro sistema a implementar, nuestros clientes se decidan por
estas y dejen a un lado nuestra aplicación.
Si bien es cierto tenemos que poner los pies sobre la tierra y saber
que vamos a competir con verdaderos gigantes del desarrollo de
software pero esto no conlleva a que nos amilanemos y no podamos
competir en ese gran mercado, por el contrario con una herramienta
optima podremos hacernos conocer en este medio y de esa forma ir
ganando terreno en el desarrollo de software.
Que la metodología de desarrollo elegida no sea la correcta
Este punto conlleva a perdidas de tiempo exageradas, no haber
establecido la metodología correcta de desarrollo seria como empezar
el proyecto desde cero al no tener una comunicación entre los
diferentes módulos no podríamos realizar las pruebas establecidas y
peor aun no lograríamos la integración final de los paquetes de código
algo que seria catastrófico para nuestro objetivo final.
36
Surgimiento de nuevas especificaciones del Software
Siempre en todo proyecto de desarrollo de software va a pasar que de
último momento se ven reflejados nuevos requerimientos, que conlleva
esta situación lo primero el tiempo estimado del proyecto se alarga,
luego realizar nuevos módulos e integrarlos a ultima hora pero
debemos estar preparados para situaciones como esta.
Estimación errónea del tiempo
Todo proyecto debe cumplir con un tiempo estimado para su
finalización pero también es cierto que se da el caso que se alarga
nuestra proyección del tiempo que efectos conlleva esta situación, no
cumplir con nuestros objetivos definidos, la insatisfacción de nuestro
cliente y por ultimo puede darse el caso de cierre de proyecto.
Problemas con el Personal de Desarrollo
En el manejo de recursos para este proyecto se debe llegar a un
consenso para de una manera u otra apuntar a un solo objetivo que es
la finalización del proyecto pero es verdad que si falta esa
comunicación entre desarrolladores o que no se acepten criterios de
37
los otros integrantes y se tenga una manera autoritaria de imponer sus
ideas y no se permita la democracia y aceptar que no siempre se tiene
la razón en todo y aprender a escuchar y mancomunadamente apuntar
a un objetivo común.
No llegar a un consenso para las reuniones establecidas en
cuanto a la planificación de la entrega de avances de la aplicación
a implementar por parte del grupo de desarrollo
Todos tenemos nuestro tiempo bien planificado para realizar nuestras
actividades, pero para conseguir que este proyecto llegue a su
culminación deberemos adaptarnos a los horarios establecidos en un
consenso previo sin que esto conlleve a quitarnos tiempo laboral, y no
poder reunirnos para revisar los avances del sistema, si bien es cierto
esto es lo que siempre ocurre la falta de tiempo para las reuniones
puede llevar a no terminar con el objetivo trazado.
Un grave problema es la preparación de los usuarios hacia la
nueva herramienta a utilizar esto se produce por el poco
conocimiento para manejar software
38
En el momento de la implantación de nuestra aplicación en la empresa
XYZ que solicito nuestros servicios, debemos realizar la respectiva
capacitación a los usuarios sean esto los novatos o los avanzados
dependerá de las políticas de la empresa a quienes colocaran en el
manejo de la nueva herramienta por nuestra parte tenemos que
adaptarnos a los diferentes tipos de usuarios que se nos presenten en
dicha organización.
Debemos tener nuestro plan de contingencias en casos de
perdidas de información cuando no realicemos los respaldos
respectivos.
Es vital en todo proyecto realizar respaldos de la información que
estemos procesando y mas aun en un proyecto de desarrollo de
software en donde las líneas de código son fundamental para la
integración de los diferentes módulos a diseñar con un plan de
contingencias bien definido y cumpliendo con el procedimiento
establecido esto no debería ocurrir pero se debe tener en cuenta ante
cualquier anomalía que se presente como riesgos naturales por
ejemplo.
39
Problemas con los equipos de hardware
Para poder implementar un sistema como el que vamos a desarrollar
debemos contar con tecnología que preste todas las bondades para
nuestro estudio investigativo pero debemos tener protegidos estos
equipos en todos los aspectos, seguridad corriente, etc., porque la
falla o desperfecto de unos de ellos conllevaría a retratos severos en
cuanto al tiempo establecido.
1.13.2.- Impacto Probabilidades y Plan de Contingencias de riesgos
Que nuestro sistema no se adapte a nuestros clientes lo que
incurriría en un nuevo análisis de los requerimientos del software
a implementar.
Impacto
Si el sistema a implementar no cumple con los requerimientos
del cliente este no aceptará el producto y pedirá que se realicen
modificaciones para adaptarlo a sus necesidades.
40
Probabilidad
La vamos a calificar como una probabilidad baja porque si esto
ocurre entonces no tenemos bien definido los alcances del
sistema y esto se lo realiza en las fases iniciales donde se
establecen los requerimientos previos.
Plan de Contingencia
Para que el sistema se adapte a los requerimientos del cliente
deberemos realizar entrevistas periódicas con la parte
interesada y presentar prototipos para ir mejorando la entrega
final y también deberemos conocer los procesos que se
ejecutan en la empresa para comprobar si nuestro sistema va a
optimizar esos procesos.
Si las aplicaciones existentes para cubrir la necesidad de un
Servidor de Dominio Corporativo ofrecen mejores beneficios
que nuestro sistema a implementar, nuestros clientes se
decidan por estas y dejen a un lado nuestra aplicación.
Impacto
Para el grupo de desarrollo conllevaría a tener que recapitular el
proyecto y diseñar una herramienta con más prestaciones y
beneficios para poder satisfacer al cliente.
41
Probabilidad
La probabilidad es media alta porque el cliente esta en su
derecho de escoger la herramienta que para el sea mas
conveniente indistintamente que esa elección sea la correcta
Plan de Contingencia
Si la aplicación no satisface a nuestro cliente debemos tener
implementados sistemas que ofrezcan muchas bondades
adicionales con el que estamos promocionando y de esta
manera brindarle al cliente varias alternativas.
Que la metodología de desarrollo elegida no sea la correcta
Impacto
Esto conlleva a que se debe escoger una nueva metodología
para rediseñar lo que ya se ha establecido y conlleva a la
perdida de tiempo.
Probabilidad
En este caso vamos a calificar la probabilidad como baja ya que
se debe realizar un análisis minucioso antes de seleccionar la
metodología adecuada
42
Plan de Contingencia
La metodología a utilizar se la define en las entrevistas con el
cliente el es el que nos va a dar la pauta para la selección de un
tipo u otro a utilizar si se da el caso la clásica o la orientada a
objetos
Surgimiento de nuevas especificaciones del Software
Impacto
El tiempo de culminación del proyecto se verá afectado porque
se tiene que detallar los nuevos requerimientos del cliente y
adaptarlos a los ya definidos incrementando las actividades y el
tiempo de culminación del proyecto.
Probabilidad
La probabilidad para este riesgo es media porque es en la etapa
de análisis donde se establecen las políticas de desarrollo y de
cambio en caso de presentarse esta situación.
Plan de Contingencia
En el inicio de las actividades se establecen políticas de
desarrollo para que los cambios no afecten severamente al
tiempo de entrega del sistema
43
Estimación errónea del tiempo
Impacto
Se va a alargar la entrega del sistema al cliente porque no se
cumplirán con los tiempos establecidos en el cronograma de
actividades.
Probabilidad
La probabilidad de este riesgo la vamos a calificar media alta
porque siempre se presentan acontecimientos que se escapan
de la planificación establecida en la etapa de desarrollo.
Plan de Contingencia
Es fundamental establecer el cronograma de actividades
estableciendo los tiempos fijos para la culminación de las
diferentes etapas de los módulos que serán integrados cabe
recalcar que en este cronograma también se debe determinar
holguras de tiempo para los imprevistos que se presenten.
Problemas con el Personal de Desarrollo
Impacto
Esto afectará a la estabilidad del grupo de desarrolladores
porque no se podrá llegar a un consenso en cuanto a la
44
comunicación entre los involucrados en el desarrollo del
proyecto.
Probabilidad
Debemos de entender que una cosa es lo personal y otra lo
laboral porque cuando se juntan las dos partes y se transmite
esa inestabilidad al grupo se obtienen malos resultados esta
probabilidad la vamos a calificar como poco probable
Plan de Contingencia
Si bien es cierto cada persona es un mundo debemos buscar
manejar de buscar la conciliación y el dialogo con actividades
que involucren establecer canales de comunicación entre los
integrantes del grupo y de esta manera buscar la estabilidad
para alcanzar los objetivos específicos.
No llegar a un consenso para las reuniones establecidas en
cuanto a la planificación de la entrega de avances de la aplicación
a implementar por parte del grupo de desarrollo
Impacto
Si bien es cierto no significa que porque se reúna muy a
menudo el grupo esto conllevará a obtener un resultado
45
satisfactorio pero también la falta de reunión producirá poco
entendimiento de la visión general de lo que el sistema debe
reflejar.
Probabilidad
Pues bien para suplir este inconveniente se estableció previo
consenso un cronograma de actividades en el cual todos
estuvimos de acuerdo por eso vamos a calificar esta
probabilidad como baja.
Un grave problema es la preparación de los usuarios hacia la
nueva herramienta a utilizar esto se produce por el poco
conocimiento para manejar software
Impacto
El usuario posee conocimientos básicos de herramientas de
software por tal motivo adaptarse a una nueva aplicación con un
entorno nuevo de interfaz podría provocar un impacto severo en
sus rutinas diarias por tal motivo podría poner resistencia para
usar el nuevos sistemas implantado en su organización.
46
Probabilidad
Dependiendo de las políticas de la empresa XYZ que compre
nuestro sistema dependerá la capacitación del mismo, en
general nuestra aplicación va dirigida a usuarios avanzados
porque se trata de un sistema que va controlar procesos por tal
motivo se califica a esta probabilidad como baja porque el
usuario debe tener conocimientos previos en sistemas de este
tipo
Plan de Contingencia
El sistema se desarrollará para que los diferentes tipos de
usuario se adapten a la nueva herramienta para se entregará un
manual de usuario que indique todo lo relacionado con el
correcto funcionamiento del sistema con esto hasta los usuarios
novatos en aplicaciones de dominio podrán entender y
configurar los servidores de una manera muy fácil y rápida.
Problemas con los equipos de hardware
Impacto
Catastrófico si un equipo dejará de funcionar el riesgo seria
grave porque se tendría que adquirir un nuevo computador lo
47
que conlleva aumento del presupuesto y peor aun afectaría al
cronograma de tiempo establecido.
Probabilidad
Esta probabilidad es alta porque este tipo de imprevistos son los
que muy a menudo suceden y en este caso se deberá contar un
plan de contingencias para corregir el problema.
Plan de Contingencia
Aunque esto incurre costo adicional debemos tener un equipo
extra para el caso de falla de hardware y con esto poder
reemplazarlo en el omento justo sin que altere la planificación
establecida.
1.13.3.- Tabla de riesgos
Para nuestro sistema vamos a considerar la siguiente
nomenclatura para identificar el nivel de impacto
1. Riesgo leve
2. Riesgo fuerte
3. Riesgo agresivo
48
Riesgo Probabilidad Impacto
Que nuestro sistema no se adapte a nuestros
clientes lo que incurriría en un nuevo análisis de los
requerimientos del software a implementar
25% 1
Si las aplicaciones existentes para cubrir la
necesidad de un Servidor de Dominio Corporativo
ofrecen mejores beneficios que nuestro sistema a
implementar, nuestros clientes se decidan por estas
y dejen a un lado nuestra aplicación.
50% 2
Que la metodología de desarrollo elegida no sea la
correcta 50 % 2
Surgimiento de nuevas especificaciones del
Software 50 % 2
Estimación errónea del tiempo 40 % 2
Problemas con el Personal de Desarrollo 30 % 2
No llegar a un consenso para las reuniones
establecidas en cuanto a la planificación de la
entrega de avances de la aplicación a implementar
por parte del grupo de desarrollo
40 % 2
Un grave problema es la preparación de los usuarios
hacia la nueva herramienta a utilizar esto se produce 30 % 1
49
por el poco conocimiento para manejar software
Debemos tener nuestro plan de contingencias en
casos de perdidas de información cuando no
realicemos los respaldos respectivos.
70 % 2
Problemas con los equipos de hardware 40 % 2
1.14.- CONCLUSION
Con este tipo de herramientas informáticas trataremos de que la
utilización de este sistema sea de lo mas amigable para el usuario y
que preste todas las bondades de los Servidores de Dominio
existentes en el mercado para poder competir en un futuro no muy
lejano con nuestra aplicación en los requerimientos de las
organizaciones de nuestro mercado ya establecido.
50
CAPITULO 2
Análisis
2.1.- ¿Que es Servidor de Dominio Corporativo?
Un dominio es un conjunto de ordenadores conectados en una red
que confían a uno de los equipos de dicha red la administración de los
usuarios y los privilegios que cada uno de los usuarios tiene en dicha
red.
El Servidor de Dominio Corporativo es aquel que tiene la
responsabilidad de administrar las cuentas y recursos del dominio en
cuestión, y/o servidores y /o estaciones de trabajo.
Los usuarios de un mismo dominio tendrán un inicio de sesión único
(Single Sing-On) en el servidor del dominio para acceder a los
recursos de cualquier parte de la red, una cuenta única para acceder a
las máquinas del dominio
La característica de resolución de nombres se encarga de
comprender el nombre (un texto) que le envía, en una dirección IP
51
(números). Si se encuentra el nombre que se esta indicando, dentro
del dominio, la resuelve dándole el acceso que se le haya previamente
establecido al usuario.
Las características más importantes de un Servidor de nombres de
dominio son:
Se podrá dividir la red en dominios y sub-dominios creando una
estructura jerárquica que esta identificada por caminos, por lo que un
departamento de una empresa podrá ser una región compuesta de
uno o más dominios y sub-dominios administradas por un único
administrador. Cada departamento se identificara por un nombre o
alias y cada nombre de dominio de un nodo del servicio de dominio
está formado por una agrupación de nombres, cada una de ellas
separada por un punto.
2.2.- Componentes del Servidor de Dominio Corporativo.
2.2.1.- Cuentas de usuarios
En las cuentas de los usuarios se establecen datos como el
propietario de la misma, contraseña de acceso, localización de su
directorio de inicio de sesión, grupo al que pertenece.
52
Cuenta local de usuario: pertenecen a una única estación de trabajo.
El procedimiento de login de las mismas se valida en una base de
datos local de la estación. La herramienta administrativa de la estación
para crearlas, modificarlas, borrarlas y establecer políticas de
seguridad es el Administrador de usuarios o el Administrador de
usuarios para dominios.
Cuenta de dominio: pertenecen al dominio en cuestión. El
procedimiento de login requiere, además del nombre de usuario y
contraseña, el dominio al que se está haciendo login. La validación se
hace en una base de datos existente en el servidor de dominio. La
herramienta administrativa del servidor para crearlas, modificarlas,
borrarlas y establecer políticas de seguridad del dominio es el
Administrador de usuarios para dominios.
Tanto si se hace login en un tipo de cuenta u otro, para acceder al
menú de seguridad de la estación o el servidor
2.2.2.- Cuentas de grupos
Las cuentas de usuarios se organizan en grupos. Cuando se añade un
usuario a un grupo, el usuario tendrá los derechos y permisos
asignados a ese grupo.
53
Grupo local: lo forman cuentas locales de usuarios y grupos globales
de otros dominios. Se usan para asignar a grupos de usuarios
permisos para acceder a un recurso.
Grupo global: lo forman únicamente cuentas de dominio. Aunque los
grupos globales pueden usarse para asignar permisos a los recursos,
su funcionalidad principal es agrupar las cuentas de un dominio. Para
lo primero es mejor añadir los grupos globales como locales.
Los usuarios se convierten en miembros de los grupos de sistema
automáticamente al acceder a la red.
Es conveniente revisar qué derechos tienen todos estos grupos por
defecto dentro del menú de políticas de derechos de usuarios
2.2.3.- Clientes (estaciones de trabajo)
El usuario en su estación de trabajo cuando intenta acceder a un
recurso (por ejemplo intenta acceder a una maquina que se llama
“Respaldos”) solicita una consulta para resolver el nombre del recurso
que el esta solicitando (en este caso “Respaldo”), básicamente
preguntan por la dirección IP que corresponde a un nombre
determinado. Este proceso de solicitud es transparente para el
54
usuario, ya que en su equipo internamente ejecuta programas para
realizar la consulta.
2.2.4.- Servidores de Dominio.
Son servicios que se han configurado en el Servidor para que escuche
y conteste las solicitudes de consultas realizadas por los Clientes.
Este obtiene la información del dominio a partir de un archivo de
configuración ubicado en el mismo servidor.
2.3.- Samba
Empleado en sistemas Uni/Linux para lograr interactuar con sistemas
Microsoft.
Atributos de interés:
sambaLMPassword
sambaNTPassword
sambaSID (requerido)
sambaPrimaryGroupSID
Ítems que se pueden sobrecargar en configuraciones de smb.conf al
usar Samba como Controlador de Dominio Primario:
sambaHomePath
sambaLoginScript
sambaProfilePath
sambaHomeDrive
55
2.4.- LDAP
LDAP significa Lightweight Directory Access Protocol (Protocolo
Liviano de Acceso a Directorio), es un protocolo que provee servicios
de directorio, organizando la información de forma muy similar a como
lo hace un sistema de archivos, o el servicio de nombres de dominio
(DNS) en Internet.
2.4.1.- Jerarquías en árbol de varios servicios
LDAP funciona como una base de datos, optimizada para las
operaciones de lectura y búsqueda. Por otro lado, no posee
soporte para ingreso de datos por transacciones ni rollback, que se
encuentran en los motores de base de datos relacionales.
Normalmente en LDAP las operaciones de ingreso de datos son a
todo o nada.
La arquitectura cliente-servidor y estructura en forma de árbol que
utiliza LDAP para almacenar su información, tiene algunas ventajas
muy interesantes, como ser:
Evita la duplicación de datos, la estructura de datos obliga a
que no exista el mismo dato en dos lugares diferentes del
esquema.
56
Permite la distribución de la administración, al igual que el
servicio de DNS, la responsabilidad en la administración de los
datos de un árbol se puede separar entre distintos equipos si
es necesario.
Acepta niveles de acceso bien detallados, pudiendo definir
políticas de seguridad por cada nodo.
2.4.2.- Principales funciones del Ldap
Libretas de direcciones compartidas.
Autenticación de usuarios centralizada
Perfiles de usuarios centralizados, para permitir Roaming
En resumen, LDAP es un servicio muy flexible que permite a un
administrador centralizar variados servicios, y de esta manera facilitar
la tarea de mantenimiento sin que disminuya la confiabilidad del
sistema.
57
2.5.- Modelado del Análisis
Tabla: USUARIO
nombre:
Atributos: clave primaria
Tipo: varchar
Descripción: identificador de la tabla USUARIO
nombre_completo:
Atributos: Ninguno
Tipo: varchar
Descripción: nombre y apellido del usuario
descripción:
Atributos: Ninguno
Tipo: varchar
estado_cuenta
Descripción: características de usuario
Atributos: Ninguno
Tipo: varchar
Descripción: Estado de la cuenta
cambiar_pass
Atributos: Ninguno
Tipo: varchar
Descripción: Si el usuario puede o no cambiar el password
58
password
Atributos: Ninguno
Tipo: varchar
Descripción: la contraseña del usuario
Tabla: GRUPO
nombre:
Atributos: clave primaria
Tipo: varchar
Descripción: identificador de la tabla GRUPO
descripción:
Atributos: Ninguno
Tipo: varchar
Descripción: características del grupo
Tabla: GRUPO_USUARIO
nombre_grupo:
Atributos: clave primaria
Tipo: varchar
Descripción: identificador de la tabla GRUPO_USUARIO
descripción:
Atributos: Ninguno
59
Tipo: varchar
Descripción: características del grupos de usuarios
gid:
Atributos: Ninguno
Tipo: varchar
Descripción: características de el código de grupo
Tabla: DOMINIO
nombre:
Atributos: clave primaria
Tipo: varchar
Descripción: identificador deL dominio
descripción:
Atributos: Ninguno
Tipo: varchar
Descripción: características del dominio
Tabla: PARAMETROS_DOMINIO
nombre:
Atributos: clave primaria
Tipo: varchar
Descripción: identificador de dominio
60
archivo_dhcp:
Atributos: Ninguno
Tipo: varchar
Descripción: archivo de configuración
gid_actual:
Atributos: Ninguno
Tipo: varchar
Descripción: información del dominio
tiempo_bloqueo:
Atributos: Ninguno
Tipo: varchar
Descripción: características de dominio
longitud_min_password:
Atributos: Ninguno
Tipo: varchar
Descripción: longitud de la contraseña
lockout_attempt:
Atributos: Ninguno
Tipo: varchar
Descripción:
61
complejidad_password:
Atributos: Ninguno
Tipo: varchar
Descripción: longitud de la contraseña
horario_actual:
Atributos: Ninguno
Tipo: varchar
Descripción: horario actual
Tabla: INFORMACION_DE_CONTACTO
nombre:
Atributos: clave primaria
Tipo: varchar
Descripción: identificador de dominio
email:
Atributos: Ninguno
Tipo: varchar
Descripción: correo del usuario
direccion:
Atributos: Ninguno
Tipo: varchar
Descripción: dirección del contacto
62
cargo:
Atributos: Ninguno
Tipo: varchar
Descripción: cargo del contacto
ciudad:
Atributos: Ninguno
Tipo: varchar
Descripción: ciudad del contacto
provincia:
Atributos: Ninguno
Tipo: varchar
Descripción: provincia del contacto
telefono:
Atributos: Ninguno
Tipo: varchar
Descripción: teléfono del contacto
celular:
Atributos: Ninguno
Tipo: varchar
Descripción: celular del contacto
63
fecha_nacimiento :
Atributos: Ninguno
Tipo: varchar
Descripción:
jefe:
Atributos: Ninguno
Tipo: varchar
Descripción: jefe delusuario
Tabla: COMPLEJIDAD_PASSWORD
nivel:
Atributos: clave primaria
Tipo: varchar
Descripción: nivel de complejidad
descripcion:
Atributos: Ninguno
Tipo: varchar
Descripción: correo del password
n_minuculas:
Atributos: Ninguno
Tipo: varchar
Descripción: clave en minúsculas
64
n_mayusculas:
Atributos: Ninguno
Tipo: varchar
Descripción: clave en mayúsculas
n_digitos:
Atributos: Ninguno
Tipo: varchar
Descripción: cantidad de digitos
n_especiales:
Atributos: Ninguno
Tipo: varchar
Descripción: caracteres_especiales
65
2.6. - Diagrama de Flujo de Dato
Serv
idor
de
Dom
inio
Cor
pora
tivo
Prim
ary
Dom
ain
Con
trole
r (PD
C)
USU
ARIO
AD
MIN
ISTR
ADO
R
DE
DO
MIN
IO
CO
RPO
RAT
IVO
Sist
ema
de
Adm
inis
traci
ón
de D
omin
io
Serv
icio
de
Dire
ctor
io
(LD
AP) Ke
rber
os
SAM
BA
Clie
nte
WEB
DH
CP
DN
SM
iem
bro
de
Dom
inio
Serv
icio
Figura 1
66
Figura 2
67
Figura 3
68
Figura 4
69
Figura 5
70
Figura 6
71
2.7.- Diseño de Componentes
Figura 7
72
Figura 8
73
Figura 9
74
CAPITULO 3
DISEÑO DEL SISTEMA
3.- DISEÑO
3.1.- Diseño de Clases y Objetos
3.1.1.- Principales Objetos Dao
UsuarioDAO
GrupoDAO
GrupoUsuarioDAO
InformacionDeContactoDAO
ParametrosDominioDAO
ComplejidadPasswordDAO
3.1.2.- Principales Objetos Bo
UsuarioBO
GrupoBO
GrupoUsuarioBO
InformacionDeContactoBO
ParametrosDominioBO
ComplejidadPasswordBO
75
3.1.3.- Principales Servlets
Actualizar Grupo
Actualizar Información de Contacto
Actualizar Usuario
Agregar Grupo Usuario
Buscar Configuración DHCP
Buscar Grupo
Buscar Horario Usuario
Buscar Información de Contacto
Buscar Maquina
Buscar Todas Maquinas
Buscar todos Grupos
Buscar Todos Usuarios
3.2.- Fase de Diseño de Contenido e Interfaz
Para el desarrollo de nuestra interfaz
76
3.2.1.- Estructura del sitio
Figura 9
77
3.2.2.- Descripción del sitio
3.2.2.1.- Pagina Principal
Inicio: en esta pantalla se podrá observar información correspondiente
del nombre del proyecto y los datos de los autores de este sistema.
Empresa: Explicación de la funcionalidad principal de Sistema
Acerca de: Información dell Hardware y Software utilizado en el
servidor
Login: el usuario al digitar su nombre y su password podrá acceder a
los diferentes módulos de la aplicación como usuarios y grupos.
3.2.2.2.- Módulos de Usuario:
Usuarios: Pagina principal del modulo usuario en el cual
muestra todos los usuarios creados y que pueden ser utilizados
para unirse al dominio.
Crear usuario: el administrador del sistema mediante una
pagina jsp podrá crear un nuevo usuario en nuestro dominio
para ser almacenado en la base de datos.
Contacto Usuario: para los respectivos usuarios se podrá
asignar nuevas características para el perfil de usuario
78
Usuario Miembro de: en esta pantalla se da la facilidad el
administrador para que le asigne un usuario a un respectivo
grupo de esta manera ese usuario pertenecerá a un nuevo
grupo.
Horarios de Usuario: en esta pantalla permite añadir y ver los
horarios de acceso al dominio que tenga un usuario especifico
Cambiar Contraseña: en esta pantalla permitirá cambiar la
contraseña que tenga un usuario
3.2.2.3.- Módulos de Grupo:
Grupos: Pagina principal del modulo grupo el cual muestra
toda los grupos creados que pertenecen al dominio
Crear Grupo: en los servidores de dominio existen diversos
tipos de usuario con esta opción el administrador podrá crear un
nuevo tipo de grupo.
Eliminar y Actualizar la información del Grupo.- Al dar clic
sobre el nombre de un grupo se ira a otra pagina donde se
podrá modificar o eliminar el grupo.
79
3.2.2.4.- Módulo de Servicio:
Servicios: Pagina principal del modulo la cual muestra las
opciones de servicio que se pueden configurar.
DHCP: en los servidores de dominio el demonio dhcpd se
encargará de asignar las direcciones IP correspondientes a los
diferentes equipos que forman parte de nuestra red. En esta
pantalla se podrá modificar parámetros de configuración del
archivo dhcpd.conf, también podremos pedir nueva IP para
refrescar la dirección de red actual que posee un equipo que
forma parte de nuestro Dominio.
Complejidad Contraseña: en esta página se modifica la
complejidad de la contraseña que se utiliza para unirse al
dominio.
DNS: en esta pagina muestra la configuración que tiene la zona
project12.com
80
3.3.- Diseño de la Interfaz
Página Principal
Figura 10
Pagina de Ingreso de Usuario y Clave
Figura 11
81
Pagina Principal de Usuarios
Figura 12
Pagina de Creación de Usuario
Figura 13
82
Pagina de Modificación y Eliminación de Usuario
Figura 14
Pagina de Información De Usuario
Figura 15
83
Pagina de Usuario Miembro de
Figura 16
Pagina de Cambiar Password
Figura 17
84
Pagina Principal de Grupo
Figura 18
Pagina de Modificación de Grupo
Figura 19
85
Pagina de Creación de Grupo
Figura 20
Pagina Principal de Maquina
Figura 21
86
Pagina de Eliminar Maquina
Figura 22
Pagina De Servicios
Figura 23
87
Pagina de Configuración de DHCP
Figura 24
Pagina de Reservación de IP
Figura 25
88
Página de Configuración de DNS
Figura 26
89
Capitulo 4
Codificación
4.1. - Principales Componentes
90
Figura 26
4.1.2.- Servidor de Dominio
En este equipo se va a instalar el Sistema Operativo Linux en su
distribución Fedora Core 7, en el mismo se habilitarán los servicios
que conforman la estructura principal de un servidor de Dominio tales
como DNS, DHCP, SAMBA, LDAP entre los más importantes.
Servicio SMBLDAP_TOOLS
En este componente se configurarán los archivos en el
servidor Linux para integrar los servicios SAMBA y LDAP de
esta manera trabajan en conjunto dichos demonios, en
nuestro Servidor De Dominio.
Servidor DNS
En este componente se configurarán los servicios de DNS el
cual tendrá la responsabilidad de resolver nombres de
maquina a direcciones IP y viceversa este es nuestro
componente que hará las funciones de Servidor de DNS.
Servidor DHCP
Para poder asignar una dirección IP a un equipo debemos
configurar el servicio de DHCP el cual tendrá la función de
91
asignar una dirección IP a los diferentes equipos que forman
parte del dominio, cabe recalcar que se establecerán límites
en cuanto a los rangos de direcciones IP .
Servidor Samba
Nuestro servidor de Dominio deberá integrar equipos que
usen Sistemas Operativos Windows y Linux.
Servidor Ldap
Para almacenar información correspondiente a los objetos
del Dominio tenemos nuestro servidor de directorios Ldap el
cual tiene la función de asignar características nuevas a los
diferentes usuarios y además será nuestra Base de Datos
para consultas y modificaciones cuando nuestra aplicación
haga uso de este servicio.
4.1.3.- Usuario Administrador
En este componente se dará la facilidad al usuario
administrador para que pueda ingresar a manipular los
diferentes servicios que forman parte del Servidor de Dominio
Corporativo,
92
Servlets - Java Server Pages
Los servlets y Java Server Pages (JSPs) son dos métodos de
creación de páginas web dinámicas en servidor usando el
lenguaje Java.
Los JSPs y servlets se ejecutan en una máquina virtual Java, lo
cual permite que, en principio, se puedan usar en cualquier tipo
de ordenador, siempre que exista una máquina virtual Java para
ello, los JSPs son en realidad servlets: un JSP se compila a un
programa en Java la primera vez que se invoca, y del programa
en Java se crea una clase que se empieza a ejecutar en el
servidor como un servlet. La principal diferencia entre los
servlets y los JSPs es el enfoque de la programación: un JSP
es una página Web con etiquetas especiales y código Java
incrustado, mientras que un servlet es un programa que recibe
peticiones y genera a partir de ellas una página web.
Clases DAO - BO
Para implementar los accesos a nuestra base del dominio
mediante una aplicación web utilizaremos el modelo DAO, que
93
es utilizado para separar las operaciones de los datos de bajo
nivel desde un nivel más alto de la lógica de negocio.
4.2.- Procesos Principales
4.2.1.-Proceso creación de usuario
Luego de que el jsp pasa los datos ingresados y validados de
forma general, estos son procesados de la siguiente forma:
primero se realiza una validación del password ingresado,
verificado de acuerdo a las políticas de contraseña que se
hayan establecido. Los datos de usuario luego son empleados
para:
1. Generar registros tanto en la tabla USUARIO como
INFORMACION_DE_CONTACTO, para guardar el nombre
de usuario y sus configuraciones (descripción y políticas
asignadas) en la base de datos,
2. Generar un archivo llamado usuario.ldif, que es usado para
generar una entrada de directorio que luego puede ser
modificada para contener datos personales del usuario, por
ejemplo: email, dirección, teléfono, etc.
3. Realizar la adición del usuario al directorio LDAP
94
4.2.2.- Proceso propiedades de usuario.
En un servidor de dominio lo importante es tener bien definidos
las características de los diferentes usuarios creados en el
dominio con este proceso accedemos a configurar esos
parámetros y agregarles nuevos valores a los que se ingresan
por defecto.
4.2.3.- Asignar un usuario a un grupo respectivo
Todos los usuarios de nuestro dominio pueden pertenecer a
uno o varios de los grupos existentes en el dominio con este
proceso logramos que un usuario sea añadido al grupo que
seleccionemos.
4.2.4.- Proceso propiedades de grupo.
En nuestro servidor de dominio cada grupo tendrá funciones
distintas en este proceso controlamos que se añadan nuevas
características como son las de administración del dominio,
además podremos cambiar el nombre de grupo.
95
4.2.5.- Proceso Grupos de dominio
Los diferentes grupos de nuestro dominio tendrán respectivas
funciones que le permitirán tener el control total del dominio o
solo acceder a ciertos recursos compartidos, en este proceso
podremos cambiar tipos de grupos y de esta forma asignarle
nuevos privilegios.
4.2.6.- Proceso Propiedades de DHCP
En este proceso el administrador del dominio podrá modificar
los parámetros del archivo de Configuración del demonio dhcpd
para de esta manera asignar nuevos valores en cuanto a la
parametrización del servidor DHCP.
4.3.- Estándares
4.3.1.- Estándar de los Datos
En esta parte se describe la sintaxis utilizada para la
estructura de campos y tablas utilizadas en la
implementación de nuestra aplicación.
96
Para identificar las tablas se les asignará un nombre que esta compuesto por
letras mayúsculas y en el caso de contener dos palabras las separaremos
con un guión bajo, para los objetos utilizaremos letras minúsculas y si están
compuestos por mas de una palabra las separamos con un guión bajo, y
para los métodos la nomenclatura java seguido del nombre del objeto al que
pertenece dicho método.
NOMBRE DE LA TABLA
EJ: GRUPO_USUARIO
DESCRIPCIÓN DE LOS OBJETOS
EJ: nombre_grupo
DESCRIPCIÓN DE LOS MÉTODOS
EJ:public String getnombre( )
97
4.3.2.- Definición de la estructura de datos
USUARIO
Descripción Campo Tipo Null
Identificador de Usuario Nombre varchar not null
Nombre del Usuario Nombre_completo varchar null
Características Descripción varchar null
Características Cambia_pass varchar null
Características estado_cuenta varchar null
Características Password varchar not null
Estructura de la Tabla USUARIO
98
GRUPO
Descripción Campo Tipo Null
Identificador de grupo Nombre varchar not null
Características Descripción varchar not null
Estructura de la Tabla GRUPO
GRUPO_USUARIO
Descripción Campo Tipo Null
Identificador de grupo Nombre_grupo Varchar not null
Identificador de usuario Nombre_usuario varchar not null
Identificador de usuario Gid varchar not null
Estructura de la Tabla GRUPO_USUARIO
99
COMPLEJIDAD_PASSWORD
Descripción Campo Tipo Null
Identificador de nivel de
contraseña
Nivel Varchar not null
Descripcion n_minusculas varchar not null
Descripción n_mayusculas varchar not null
Descripción n_digitos varchar not null
Descripcion n_especiales varchar not null
Estructura de la Tabla COMPLEJIDAD_PASSWORD
PARAMETROS_DOMINIO
Descripción Campo Tipo Null
Identificador del
nombre del dominio
Nombre Varchar not null
Identificador del archivo_dchp varchar not null
100
Identificador de usuario gid_actual varchar not null
Identificador de usuario tiempo_bloqueo varchar not null
Identificador de usuario Longitud_min_password varchar not null
Identificador de usuario Lockout_attempt Varchar not null
Identificador de usuario complejidad_password Varchar not null
Identificador de usuario horario_actual Varchar Not null
Estructura de la Tabla PARAMETROS_DOMINIO
INFORMACION_DE_CONTACTO
Descripción Campo Tipo Null
Identificador de nombre Usuario Varchar Not null
Descripción Email varchar null
Descripción Direccion varchar null
Descripción Cargo varchar null
101
Descripción Ciudad varchar null
Descripción Provincia varchar null
Descripción Telefono varchar null
Descripción Celular varchar null
Descripción Jefe varchar null
Estructura de la Tabla INFORMACION_DE_CONTACTO
102
Capitulo 5
Desarrollo, Pruebas e Implementación del Sistema
5.- Desarrollo
5.1.- Creación de la Base de Datos
Para la elección de la base de datos verificamos las siguientes
características:
1. Seleccionamos el motor de base de datos PostgresQL 8.1.10
2. Los cambios incluyen ordenamientos mas rápidos en disco y en
memoria, mejor escalabilidad multi-procesador, mejores planes de
ejecución en consultas sobre datos particionados.
3. Los objetos de conexión y manipulación de datos de la base están
desarrollados en su totalidad en lenguaje java, un lenguaje que
interactúa de una manera optima con el motor de base de datos
definido.
5.2.- Desarrollo de Aplicación
En este proyecto como política de grupo se definió que nuestra
aplicación va a constar de dos partes para su desarrollo las
cuales detallamos a continuación:
103
El front-end es la parte del software que interactúa con el
usuario y el back-end es la parte que procesa la entrada desde
el front-end. La separación del sistema en "front ends" y "back
ends" es un tipo de abstracción que ayuda a mantener las
diferentes partes del sistema separadas. La idea general es que
el front-end sea el responsable de recolectar los datos de
entrada del usuario, que pueden ser de muchas y variadas
formas, y procesarlas de una manera conforme a la
especificación que el back-end pueda usar. La conexión del
front-end y el back-end es un tipo de interfaz.
5.2.1.- Back-end (Interacción con el Servidor de Dominio
Linux)
Para la primera parte del proyecto se va a desarrollar todas la
clases necesarias en lenguaje Java que van a permitir
realizar la conexión con el servidor Linux para de esta manera
lograr que nuestra aplicación tenga total acceso a los archivos
de configuración del servidor.
5.2.2.- Front-end (Presentación visual del proyecto)
En lo relacionado a la parte de la interfaz tratamos de que
nuestro sistema presente pantallas amigables a los usuarios del
104
sistema, para que le sea transparente al momento de
interactuar con las clases desarrolladas en Java en donde se
va a realizar todas las transacciones que el cliente solicite, a
excepción de los comandos de Linux que le envíe al servidor,
por lo que las páginas serán desarrolladas en JSP (Java
Server Pages).
Estas páginas se deben alojar en un servidor Web para que los
usuarios puedan acceder a ellas y poder obtener los servicios
planteados en este proyecto, por lo que se utiliza el servidor
Apache Tomcat el cual va a ser el encargado de gestionar las
peticiones de los clientes que se conecten al sistema.
5.3.- PRUEBAS DEL SISTEMA
5.3.1.- Pruebas de la aplicación ensamblada:
Con esta prueba lo que buscamos es descubrir errores en cuanto a la
funcionalidad del sistema, cada módulo que forma parte de nuestra
aplicación deberá ser ensamblada conforme a lo planificado en las
etapas anteriores del desarrollo de nuestra aplicación.
5.3.2.- Pruebas de la aplicación con varios usuarios:
105
Nuestra aplicación brindara facilidad para configurar los diferentes
servicios de nuestro servidor hacen de esta herramienta una manera
sencilla de Administración de un Servidor de Dominio, para las
pruebas de aplicación se lo hará ingresando datos reales por parte de
los usuarios que van a ser uso de nuestra aplicación.
5.4.- Modelo de prueba
NAVEGACIÓN DE LOGIN:
TIPO OBJETO NAVEGACIÓN CONTENIDO OBSERVACIONES
CLIK Botón Login OK OK Resultados Esperados
CLIK Vínculos de
aceptar
contraseña
ERROR ERROR No se acepta la
contraseña ingresada
en el sistema
CLIK Vínculos de
aceptar
contraseña
ERROR ERROR No aparece el mensaje
de usuario y contraseña
aceptada
NAVEGACIÓN DE USUARIO:
TIPO OBJETO NAVEGACIÓN CONTENIDO OBSERVACIONES
CLIK Botón OK OK Resultados Esperados
106
usuario
CLIK Vinculo
general
OK OK Resultados Esperados
CLIK Vinculo
contacto
ERROR ERROR No se mostraron los
datos de usuario
CLIK Vinculo
miembro de
ERROR ERROR La pagina no muestra
los resultados
esperados
CLIK Vinculo
cambiar
passw
ERROR ERROR No se mostraron los
datos de usuario
CLIK Vinculo
contacto
ERROR ERROR El campo del nombre
de usuario esta
habilitado
CLIK Vinculo
contacto
ERROR ERROR El botón de actualizar
esta desubicado
NAVEGACIÓN DE GRUPOS:
TIPO OBJETO NAVEGACIÓN CONTENIDO OBSERVACIONES
CLIK Botón grupo OK OK Resultados Esperados
CLIK Vinculo
nuevo grupo
OK OK Resultados Esperados
107
CLIK Vinculo
grupo del
dominio
ERROR ERROR No se cargaron los
nombres de grupos
CLIK Vinculo
usuarios que
pertenecen
al grupo
ERROR ERROR No se muestran los
usuarios pertenecientes
al grupo seleccionado
CLIK Vinculo
usuarios que
se pueden
agregar al
grupo
ERROR ERROR Los usuarios no se
pueden agregar a los
diferentes grupos
NAVEGACIÓN DE MAQUINAS:
TIPO OBJETO NAVEGACIÓN CONTENIDO OBSERVACIONES
CLIK Botón
maquina
OK OK Resultados Esperados
CLIK Pagina
maquina
ERROR ERROR Los nombres de
maquinas no se
presentaron al instante
CLIK Vinculo
maquina
ERROR ERROR Los datos de las
maquinas no aparecen
en las cajas de texto
108
NAVEGACIÓN DE SERVICIOS:
TIPO OBJETO NAVEGACIÓN CONTENIDO OBSERVACIONES
CLIK Botón
Servicios
OK OK Resultados Esperados
CLIK Vínculos
configuración
DNS
ERROR ERROR No se presentaron los
datos del archivo de
configuración del DNS
CLIK Vínculos
configuración
DHCP
ERROR ERROR No se presentaron los
datos del archivo de
configuración del DHCP
NAVEGACIÓN DE CERRAR SECCIÓN:
TIPO OBJETO NAVEGACIÓN CONTENIDO OBSERVACIONES
CLIK Botón cerrar
sesión
OK OK Resultados Esperados
CLIK Vínculos de
cerrar
sesión
ERROR ERROR El vinculo no regresa a
la pagina de login
109
5.5.- IMPLEMENTACIÓN DEL SISTEMA
5.5.1.- Componentes de Software
La implementación del dominio se la hará en la distribución Linux
Fedora 7 (kernel 2.6).
A parte de estos componentes, serán configurados para este proyecto
los siguientes servicios:
DHCP (Administración de IPs dentro del dominio)
DNS (Para resolución de nombres)
Samba (Para integración con equipos con plataforma Microsoft)
LDAP (servicio de directorio)
5.5.2.- Samba
Se usará Samba 3 para lograr la interacción entre los equipos
con plataforma Linux y los que tienen plataforma Microsoft
Cabe recalcar que Samba 3 no es un equivalente de Windows
2003 Server.
Samba ofrece las siguientes características:
Administración de cuentas
Aprovisionamiento de recursos.
110
Soporte para roles de administración.
Administración de servicios.
5.5.3.- LDAP (Lightweight Directory Access Protocol)
LDAP será el directorio del dominio corporativo y será usado
por samba para autenticar la información provista por los
usuarios que intentan logonearse en el dominio.
La ventaja principal de usar LDAP es la consolidación de cierto
tipo de información en el interior de su empresa. Por ejemplo,
todas las diferentes listas de usuarios en el interior de su
empresa pueden ser fusionadas en un solo directorio LDAP.
Este directorio, a continuación, podrá ser consultado desde
cualquier aplicación habilitada para LDAP a la que le sirva la
información.
5.6.- Recursos de Hardware
Se necesitarán 2 Pc que servirán de clientes, tendrán instalado
el sistema operativo Windows XP, las cuales se las configurará
como miembros del Dominio, además en una de las PC clientes
se les instalara el Vmware para poder instalar un tercer cliente
que tendrá como sistema operativo una distribución de Linux.
111
El VmWare es un software que permite crear una maquina
virtual dentro del sistema operativo XP, en esta maquina virtual
se puede instalar otro sistema operativo sin que afecte al que
esta inicialmente instalado, y a su vez se puedan estar
ejecutando los dos sistemas operativos a la vez.
En el computador que se usara como servidor se instalará una
distribución del Sistema Operativo Linux .
Para levantar la aplicaron Web se utilizara el navegador FireFox
Mozzilla nos permitirá levantar la aplicación a crear en el
ambiente web.
112
Capitulo 6
Recomendaciones y Conclusiones
6.1.- Recomendaciones
6.1.1.- Recomendaciones Software
Al empezar a configurar Linux para desarrollar la aplicación
utilizábamos el Sistema Operativo Fedora Core 6 pero no
soportaba adecuadamente el paquete Openldap y al reiniciar el
sistema operativo se dañaba la instalación del sistema.
Por ese motivo utilizamos el Sistema Operativo Fedora Core 7,
el cual demostró ser una distribución de Linux bastante
confiable, ofrece estabilidad a los servicios que implementamos
en nuestro servidor.
Para tener un mejor rendimiento y presentación del sistema
debe utilizar el navegador de Internet Firefox Mozilla ya que la
aplicación fue totalmente desarrollada en Fedora Core 7 y todo
su funcionalidad esta soportada adecuadamente en este
navegador.
113
En este tipo de sistemas la integración de los distintos servicios
es de suma importancia puesto que si uno de ellos no esta
funcionando correctamente va a detener la aplicación y
provocara un funcionamiento inadecuado.
El uso de la herramienta GQ LDAP Client es recomendada para
una mejor administración y control del Openldap, en esta
herramienta se pueden administrar todos los datos que tiene
almacenada la base de datos que utiliza el Openldap.
Nos dimos cuenta que el lenguaje Java que se instala por
defecto en la Distrinucion de Fedora Core no se puede utilizar
adecuadamente por ese motivo es necesario instalarlo
independientemente.
El servicio tomcat que viene por defecto instalado en la
distribución no es el adecuado para trabajar se debe instalar el
Apache-Tomcat 5.5.25
114
6.1.2.- Hardware
Nuestro tiene las siguientes características:
Disco Duro de 120 GB
Memoria RAM 512 MB
Procesador PIV de 3.0 GHZ
6.1.3.- Recomendaciones Finales:
En este tipo de proyectos de gran escala como son los
servidores de dominio corporativos se debe tener muy en
cuenta que cada componente que conforme el sistema como tal
deberá estar bien configurado porque de lo contrario cuando un
componente falle esto conllevará a que todo el sistema fallará
ocasionando así una perdida irremediable de información y de
tiempo valioso para la empresa.
La seguridad en este tipo de sistemas es de suma importancia
el acceso solo debe ser permitido a los Administradores para
evitar el uso indebido del mismo.
En un Servidor de Dominio Corporativo es de suma importancia
que los servicios que conforman este dominio siempre estén
115
disponibles y activados porque si un servicio se encuentra
desactivado este implica que los demás servicios dejen de
funcionar, por tal motivo el seguimiento que se le debe dar al
sistema que controle el dominio de la red debe ser de forma
periódica y controlar el estado de cada recurso que forma parte
del dominio.
Para complementar una adecuada administración y control de
un dominio primario, este proyecto se debería complementar
con otros de seguridad como por ejemplo un firewall
programable, un Sistema de detección de intruso, servidor de
antivirus, etc.
Se recomienda que la navegación de nuestra aplicación se
deberá hacer en el Navegador de Mozilla FireFox , para que las
interfaces se muestren en su totalidad y sin errores en las
paginas esto se debe a que nuestra aplicación fue desarrollada
en el entorno Linux el cual es desarrollado en código libre,
motivo por el cual se recomienda FireFox que también es de
código libre.
116
Para que nuestra aplicación pueda ser ejecutada se
recomienda que el Firewall de Windows este deshabilitado
porque al estar habilitado imposibilita el acceso a nuestra
aplicación, ya que nuestro sistema es controlado remotamente
al estar habilitado el Firewall no se podrá acceder remotamente
a la aplicación, y este provocara que la aplicación no esta
disponible.
Por el lado del Servidor Linux en su Distribución Fedora Core 7
los servicios de DNS DHCP LDAP deberán estar siempre
activos para que los diferentes objetos de nuestro Dominio sean
estos usuarios, grupos, maquinas se puedan administrar desde
la aplicación web.
En la administración del Servidor Linux en lo relacionado a la
configuración de los archivos de los distintos servicios que
forman parte del Servidor de Dominio, estos servicios deberán
estar detenidos para poder acceder a sus archivos y
configurarlos de acuerdo a los requerimientos solicitados por
los futuros usuarios del dominio.
117
Es altamente recomendable que los administradores tengan
una lista de todas las mac address de todas las maquinas que
controlen.
Nuestra aplicación Servidor de Dominio Corporativo se
recomienda su uso para Centros de Cómputo, Laboratorios
Informáticos, y empresas que deseen administrar
adecuadamente todas las estaciones de trabajos.
6.2.- Conclusiones:
Nuestro servidor de dominio corporativo con integración a
Microsoft esta disponible para ser unir estaciones de trabajo
que utilicen SistemasOperativos Windows o Linux.
Nos hemos dado cuenta durante el transcurso del desarrollo de
este proyecto que las herramientas de código libre demostraron
ser igual o mejor en su funcionalidad y aplicación que las que
haya que pagar una licencia por su uso.
118
Que el sistema operativo Microsoft en su versión de servidores
puede ser reemplazado tranquilamente por cualquier
distribución de Linux.
Samba 3 todavía no puede reemplazar totalmente al Active
Directory de Microsoft, pero si puede reemplazar a un servidor
NT, ya que su tecnología esta orientada en eso. Se espera que
cuando liberen la version 4 del Samba ya se pueda sustituir al
Active Directory.
En el mercado actual existen diversos tipos de aplicaciones que
controlan y administran Servidores de Dominio, en nuestra
aplicación, logramos configurar los archivos de varios servicios
que se utilizan para el normal funcionamiento de un Servidor de
Domino.
Las aplicaciones de administración de servicios remotos se
encuentran en gran número mercado actual, por tal motivo
como este nuestra aplicación fue desarrollada con esta
tecnología donde la aplicación reside en una maquina que
cumple las funciones de Servidor y es controlada desde un
equipo cliente, con lo que se cumple con el estándar de
119
desarrollo Cliente – Servidor, una tecnología que a dado
buenos resultados a los administradores de Servidores.
Finalmente llegamos a la conclusión que no solo tenemos
herramientas del entorno Microsoft, sino que tenemos un sin
número de aplicaciones gratuitas que nos facilitan la
administración de los servidores, y que también podemos
desarrollar nuestras propias aplicaciones como fue nuestro
caso logramos obtener resultados esperados y de mucha
calidad.
Para realizar un proyecto de este tipo nos dimos cuenta que
gran parte del tiempo empleado en el desarrollo del mismo fue
de tipo investigativo.
120
Glosario de Términos
DNS: Sistema de Nombres de Dominio
DHCP: Protocolo de configuración dinámica de host
SMB: Bloque de mensajes de servidor
LDAP: Protocolo de acceso a directorios ligero
USUARIO: Objeto del dominio, son usuarios que pueden administrar el
Servidor de dominio, compartir recursos y ejecutar aplicaciones.
GRUPO: Objeto del dominio, son grupos que permitirán definir y administrar
el acceso a los recursos en un dominio.
MAQUINA: Objeto del dominio, estaciones de trabajo.
IP: Protocolo de Internet, la IP es la dirección o código que identifica
exclusivamente a cada uno de los ordenadores existentes
MAC ADRESS : dirección de control de acceso al medio
121
Bibliografía
SAMBA-3 BY EXAMPLE, Practical Exercises in Successful Samba
Deployment John H. Terpstra 7th August 2006.
THE OFICIAL SAMBA-3 HOWTO AND REFERENCE GUIDE by Jelmer R.
Vernooij, John H. Terpstra, and Gerald (Jerry) Carter 7th August 2006
LDAP SYSTEM ADMINISTRATION By Gerald Carter Publisher by O'Reilly
March 2003, pages 308
http://www.linuxparatodos.net Información variada de Linux
http://www.howtoforge.com/fedora_dynamic_dns Configuración de Dhcp
Dinámico
http://www.directoriox.com.ar/noticieros/instalando-java-tomcat-eclipse-en-
linux.html?Itemid=53 Configuración de Java Tomcat Eclipse
2
Manual de Usuario
1.- Mapa de Sitio
3
2.- Interfaz del Sistema Project12.com
En un navegador web de preferencia ingrese la dirección
https://project12.com:8443/project12 aparece la siguiente interfaz.
2.1.- Interfaz Principal
Esta es la interfaz principal que se carga al iniciar el Sistema de
Administración Web del Controlador de Dominio Primario.
A la izquierda se 4 botones: Inicio, Empresa, Acerca de y Login.
Inicio aparece el nombre del Sistema.
Empresa muestra los nombres de los integrantes del grupo.
4
Acerca de muestra información del Hardware y Software utilizado en
el sistema.
2.2.- Ingreso de Usuario y Clave
En esta interfaz se debe ingresar el nombre de usuario y contraseña para
acceder a los demás componentes del sistema.
Solo los usuarios administradores podrán tener acceso completo al
sistema.
Al verificarse que el usuario y la contraseña son correctas se procede a la
interfaz de usuarios del dominio.
5
2.3.- Interfaz Principal de Usuario
Esta es la pagina principal de Usuarios a esta pagina se accede
inmediatamente después de ingresar el usuario y la contraseña o
presionando el boton Usuarios desde cualquiera de las demas
intergaces del sistema.
Esta es la interfaz principal de usuario en la cual se muestra la información
general de los usuarios existentes en el Dominio.
.
En esta interfaz se tiene dos opciones ir a la opción de crear un nuevo
usuario o al dar clic en un nombre ir a la opción de modificar o eliminar el
usuario.
6
2.4.- Interfaz de Creación de Usuario
Al presionar la opcion nuevo en la interfaz principal de Usuarios se
muestra la siguiente interfaz.
En esta interfaz se ingresan los datos para la creación de nuevos
usuarios.
Al presionar el botón guardar se confirma la información a guardar y se
va la interfaz principal de usuario.
En las interfaces de Administración de usuario contienen los siguientes
hipervínculos:
7
General para modificar o eliminar los datos del usuario
Contacto para ingresar la información personal del usuario .
Miembro de podrán ver los grupos a los cuales pertenece un usuario.
Cambiar Password para cambiar el password a un usuario.
Horario para asignarle un horario de permiso ingresar al dominio.
Barra de hipervínculos
8
2.5.- Interfaz General de Usuario
Estando en la interfaz principal de Usuarios al presionar el nombre de
un usuario que se encuentre registrado aparece la siguiente interfaz.
En esta interfaz se podrán los datos de nombre completo y descripción
del usuario seleccionado.
Al presionar el botón eliminar saldrá un mensaje de advertencia el cual
es para indicar que se procede a eliminar el usuario.
9
Existen 2 opciones adicionales en esta interfaz .
1. El usuario no puede cambiar la contraseña, para evitar que el
usuario se asigne el mismo la contraseña.
2. Cuenta deshabilitada para bloquear la cuenta de acceso al
dominio.
10
2.6.- Interfaz de Información de Usuario
Al presionar el hipervínculo Contacto aparece la siguiente interfaz.
En esta interfaz se ingresa la información personal del usuario.
La información pedida en esta interfaz es E-Mail, dirección personal,
cargo que ocupa en la empresa, ciudad, provincia, numero de teléfono
dela casa, numero de teléfono del celular, fecha de nacimiento y
Nombre del Jefe.
11
2.7.- Interfaz de Usuario Miembro de
Al presionar el hipervínculo Usuario Miembro de aparece la siguiente
interfaz.
En esta interfaz se muestra los grupos a los que pertenece un usuario. En la
parte superior se muestra los grupos que pertenece y en la de abajo se
muestra los grupos que se puede agregar al usuario.
Para agregarlo o sacarlo de un grupo solo se le debe dar un clic en el grupo.
Nota: Los cambios son aplicados inmediatamente .
12
2.8.- Interfaz de Cambiar Password
Al presionar el hipervínculo Cambiar Password de aparece la siguiente
interfaz.
En la cual se debe de ingresar el nuevo password a cambiar, se
procedera a realizar el cambio del password siempre y cuando cumpla las
condiciones establecidas en complejidad de password.
13
2.9.- Interfaz Principal de Grupo
Al presionar el boton GRUPOS en cualquiera de las diferentes interfaces
del sistema aparece la siguiente Interfaz.
Esta es la interfaz principal de grupo en la que se muestra todos los
grupos existentes en el dominio primario.
Al presionar el botón de nuevo se va a la opción de crear un nuevo grupo.
Al presionar sobre un nombre de grupo se va a la opción de modificar o
eliminar el grupo.
14
2.10.- Interfaz de Modificación de Grupo
Al seleccionar cualquiera de los nombres de los grupos registrados que
aparecen en la página principal aparece la siguiente pantalla:
En esta interfaz se puede modificar los datos del grupo o eliminar
según sea el caso.
Al presionar los botones de actualizar o eliminar se realiza la opción
deseada y se va a la interfaz principal de grupo.
Ademas muestra todos los usuarios que pertenecen al grupo y los
usuarios que se le pueden agregar al grupo.
Nota: Los cambios son aplicados inmediatamente.
15
2.11.- Interfaz de Creación de Grupo
Estando en la página principal de de Grupo y al presionar el boton
nuevo aparece la siguiente interfaz:
En esta interfaz se ingresa los datos del nuevo grupo que se desea
crear.
Al presionar el botón crear se realiza la opción deseada y se va a la
interfaz principal de grupo.
16
2.12.- Interfaz Principal de Maquina
Al presionar el boton MAQUINAS en cualquiera de las diferentes
interfaces del sistema aparece la siguiente Interfaz:
En esta interfaz se muestra la información de todas las maquinas que
pertenecen al dominio.
Al dar clic sobre el nombre de una máquina se va a la opción de eliminar
la máquina del dominio.
Nota: Al presionar el boton se debe esperar unos segundos antes de que
aparezca la interfaz.
17
2.13.- Interfaz de Eliminar Maquina
Al presionar sobre una maquina en la paquina principal de maquinas
aparece la siguiente interfaz.
En esta opción se puede eliminar una máquina del dominio.
Al presionar el botón de eliminar se realiza la operación deseada y se va a
la interfaz principal de maquina.
Nota al presionar el boton eliminar se realiza la operación sin preguntar
18
2.14.- Interfaz Principal de Servicios
Al presionar el boton SERVICIOS en cualquiera de las diferentes
interfaces del sistema aparece la siguiente Interfaz
La cual contiene los siguientes hipervínculos:
Configuración de DHCP: Para configuraciones basicas del DHCP y
reservar una ip para una maquina
Configuración de Complejidad de Password: Para la configuración de
la segurirdad del password de los usuarios del dominio.
19
Configuración de DNS: Para revisar las maquinas que se encuentran
registradas en el DNS y modificar configuraciones basicas del mismo.
Usuarios Administradores del Sistema: Para crear un usuario que
pueda ingresar al sistema.
20
2.15.- Interfaz de Configuración de DHCP
Al presionar sobre el hipervínculo Configuración DHCP aparecera la
siguiente pagina.
En esta opción se pude modificar el rango de Ip que puede usar el Dhcp y
si se desea se puede realizar una nueva reservación de ip es decir que
una maquina tenga siempre la misma Ip.
21
2.16.- Interfaz de Reservación de IP
Al presionar el boton reservación de IP en la interfaz principal de DHCP
presenta la siguiente interfaz.
En esta interfaz se ingresa los datos de la maquina que se desea que
tenga Ip estática y no dinámica es decir que siempre tenga la misma Ip.
Nota al presionar el boton eliminar realiza la accion sin preguntar.
22
2.17.- Interfaz de Configuración de DNS
Al presional la opcion de configuración de DNS en la pantalla principal de
Servicios aparecera la siguiente interfaz.
En esta página se puede realizar una configuración basica del DNS, ademas
muestra las paginas que se encuentran registradas al mismo.
23
24
Manual Tecnico
Para el desarrollo del sistema de Administración de Dominio Primario
usamos el modelo de programación de 3 capas, por ese motivo nuestro
sistema esta dividido en: Objetos BO (Bussiness Objetc), Objetos DAO (Data
Access Object), Servlet y Jsp
1.- Clases DAO
Hemos creado un DAO por cada tabla de la base de datos. Cada clase DAO
se encarga de la interacción con la base de datos
Los objetos Dao que usamos en la aplicación son:
UsuarioDAO
GrupoDAO
GrupoUsuarioDAO
InformacionDeContactoDAO
ParametrosDominioDAO
ComplejidadPasswordDAO
1.1.- Contenido de las Principales Clases DAO
1.1.1.- UsuarioDAO
/* Librerias que utliza el Objeto UsuarioDAO
package com.project12.classes;
import java.sql.*;
25
import java.util.*;
Esta es la Clase UsuarioDAO en la cual se encarga de realizar todos los
procedimientos de insertar, eliminar, buscar, actualizar en la base con la
información proporcionada por el usuario administrador mediante la
interfaz
/*Inico de la Clase UsuarioDAO
public class UsuarioDAO {
Se define una función tipo conexión private Connection unCon = null;
public UsuarioDAO(Connection unaConexion) {
unCon = unaConexion;
}
La función guardar recibe como parámetro un objeto tipo usuario se
define un boolean que se lo usara como una bandera para indicar el
resultado de la sentencia sql, se define un string el cual se va a
asignar la sentencia sql insert que se va a ejecutar en la base Los
signos de interrogación del insert se los reemplaza por un valor que se
obtiene del objeto tipo usuario, se define una variable tipo entero en la
cual se le asigna el valor del resultado de ejecutar el insert Se cierra la
26
conexión a la base y se retorna un boolean con el resultado de la
operación.
/*Inicio de la función Guardar
public boolean guardar (Usuario unUsuario) throws
SQLException, ClassNotFoundException {
boolean valorDevolver = false;
String sql = "Insert into usuario (nombre,nombre_completo,descripcion,
cambia_pass, estado_cuenta) values (?,?,?,?,?);";
PreparedStatement unPS= unCon.prepareStatement(sql);
unPS.setString(1,unUsuario.getNombre());
unPS.setString(2,unUsuario.getNombreCompleto());
unPS.setString(3, unUsuario.getDescripcion());
unPS.setString(4, unUsuario.getCambiaPass());
unPS.setString(5, unUsuario.getEstadoCuenta());
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
return valorDevolver;
}
27
/*Fin de la función Guardar
La función actualizar recibe como parámetro un objeto tipo usuario se
define un boolean que se lo usara como una bandera para indicar el
resultado de la sentencia sql, se define un string el cual se va a
asignar la sentencia sql update que se va a ejecutar en la base.
Los signos de interrogación del update se los reemplaza por un valor
que se obtiene del objeto tipo usuario, se define una variable tipo
entero en la cual se le asigna el valor del resultado de ejecutar el
update.
Se cierra la conexión a la base y se retorna un boolean con el
resultado de la operación.
/*Inicio de la función Actualizar
public boolean actualizar (Usuario unUsuario) throws
SQLException, ClassNotFoundException {
boolean valorDevolver = false;
String sql = "Update usuario set nombre_completo=?, descripcion=?,
cambia_pass=?, estado_cuenta=? where nombre =?;";
PreparedStatement unPS= unCon.prepareStatement(sql);
unPS.setString(1,unUsuario.getNombreCompleto());
unPS.setString(2, unUsuario.getDescripcion());
28
unPS.setString(3, unUsuario.getCambiaPass());
unPS.setString(4, unUsuario.getEstadoCuenta());
unPS.setString(5, unUsuario.getNombre());
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
return valorDevolver;
}
/*Fin de la función Actualizar
La función Eliminar recibe como parámetro un string que contiene el
nombre del usuario a eliminar, se define un boolean que se lo usara
como una bandera para indicar el resultado de la sentencia sql, se
define un string el cual se va a asignar la sentencia sql delete que se
va a ejecutar en la base.
Los signos de interrogación del insert se los reemplaza por un valor
que se obtiene del objeto tipo usuario, se define una variable tipo
entero en la cual se le asigna el valor del resultado de ejecutar el
delete.
29
Se cierra la conexión a la base y se retorna un boolean con el resultado de la
operación
/* Inicio de la Función Eliminar
public boolean eliminar (String nombre) throws SQLException,
ClassNotFoundException {
boolean valorDevolver = false;
String sql = "Delete from usuario where nombre=?";
PreparedStatement unPS = unCon.prepareStatement(sql);
unPS.setString(1, nombre);
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
return valorDevolver;
}
/* Fin de la Función Eliminar
El Vector buscarTodos no recibe parámetros se define un objeto tipo
vector en el cual se guardara todos los resultados que genere la
30
consulta, se define un string el cual se va a asignar la sentencia sql
select que se va a ejecutar en la base.
Se define un objeto tipo usuario el cual se va a usar en un ciclo de
repetición while el cual va a recorrer el objeto y asignándolo al vector.
Se cierra la conexión a la base y se retorna el vector con los
resultados de la operación
/* Inicio de la Función buscarTodos
public Vector buscarTodos() throws Throwable {
Vector valorDevolver = new Vector();
String sql = "Select * from usuario order by nombre;";
PreparedStatement unPS = unCon.prepareStatement(sql);
ResultSet unRS = unPS.executeQuery();
Usuario unUsuario = null;
while (unRS.next()){
unUsuario= new Usuario();
unUsuario.setNombre(unRS.getString("nombre"));
unUsuario.setNombreCompleto(unRS.getString
("nombre_completo"));
unUsuario.setDescripcion(unRS.getString("descripcion"));
valorDevolver.addElement(unUsuario);
}
unRS.close();
31
unPS.close();
return valorDevolver;
}
/* Fin de la Función buscarTodos
El Vector buscarUsuario recibe como parámetro un string que contiene
el nombre del usuario a buscar, se define un string el cual se va a
asignar la sentencia sql delete que se va a ejecutar en la base.
El signo de interrogación del select se los reemplaza por un valor que
se obtiene del objeto tipo grupo, en un ciclo de repetición while el cual
va a recorrer el objeto y asignándolo al objeto tipo usuario.
Se cierra la conexión a la base y se retorna un boolean con el
resultado de la operacion
/* Inicio de la Función buscarUsuario
public Usuario buscarUsuario(String nombreUsuario) throws
Throwable{
Usuario unUsuario = new Usuario();
String sql = "Select nombre, nombre_completo, descripcion,
cambia_pass, estado_cuenta from usuario where nombre= ?;";
PreparedStatement unPS= unCon.prepareStatement(sql);
unPS.setString(1,nombreUsuario);
32
ResultSet unRS= unPS.executeQuery();
while (unRS.next()) {
unUsuario.setNombre(unRS.getString("nombre"));
unUsuario.setNombreCompleto(unRS.getString
("nombre_completo"));
unUsuario.setDescripcion(unRS.getString("descripcion"));
unUsuario.setCambiaPass(unRS.getString("cambia_pass"));
unUsuario.setEstadoCuenta(unRS.getString("estado_cuenta"));
}
unRS.close();
unPS.close();
return unUsuario;
}
}
/* Fin de la Función buscarUsuario
/* Fin de la Clase Usuario
33
1.1.2.- GRUPODAO
package com.project12.classes;
import java.sql.*;
import java.util.*;
Esta es la Clase GrupoDAO en la cual se encarga de realizar todoslos
procedimientos de insertar, eliminar, buscar, actualizar en la base con
la informacion proporcionada por el usuario administrador mediante la
interfaz */
public class GrupoDAO {
/* Se difine una funcion tipo conexion */
private Connection unCon = null;
/* La funcion antes definida se la recibe como parametro en esta
funcion para poder conectarse con la base */
public GrupoDAO(Connection unaConexion){
unCon = unaConexion;
}
La funcion guardar recibe como parametro un objeto tipo grupo se
define un boolean que se lo usara como una bandera para indicar el
34
resultado de la sentencia sql, se define un string el cual se va a
asignar la sentencia sql insert que se va a ejecutar en la base
Los signos de interrogacion del insert se los reemplaza por un valor
que se obtiene del objeto tipo grupo, se define una variable tipo entero
en la cual se le asigna el valor del resultado de ejecutar el insert
Se cierra la conexion a la base y se retorna un boolean con el
resultado de la operacion
public boolean guardar (Grupo unGrupo) throws SQLException,
ClassNotFoundException{
boolean valorDevolver = false;
String sql = "Insert into grupo (gid, nombre, descripcion) values
(?,?,?);";
PreparedStatement unPS= unCon.prepareStatement(sql);
unPS.setString(1,unGrupo.getGID());
unPS.setString(2,unGrupo.getNombre());
unPS.setString(3, unGrupo.getDescripcion());
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
35
return valorDevolver;
}
La funcion actualizar recibe como parametro un objeto tipo grupo se
define un boolean que se lo usara como una bandera para indicar el
resultado de la sentencia sql, se define un string el cual se va a
asignar la sentencia sql update que se va a ejecutar en la base.
Los signos de interrogacion del update se los reemplaza por un valor
que se obtiene del objeto tipo grupo, se define una variable tipo entero
en la cual se le asigna el valor del resultado de ejecutar el update.
Se cierra la conexion a la base y se retorna un boolean con el
resultado de la operación.
public boolean actualizar (Grupo unGrupo) throws SQLException,
ClassNotFoundException{
boolean valorDevolver = false;
String sql = "Update grupo set descripcion=? where nombre
=?;";
PreparedStatement unPS= unCon.prepareStatement(sql);
unPS.setString(1, unGrupo.getDescripcion());
unPS.setString(2, unGrupo.getNombre());
36
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
return valorDevolver;
}
La funcion Eliminar recibe como parametro un string que contiene
el nombre del grupo a eliminar, se define un boolean que se lo usara
como una bandera para indicar el resultado de la sentencia sql, se
define un string el cual se va a asignar la sentencia sql delete que se
va a ejecutar en la base.
Los signos de interrogacion del insert se los reemplaza por un valor
que se obtiene del objeto tipo grupo, se define una variable tipo entero
en la cual se le asigna el valor del resultado de ejecutar el delete
Se cierra la conexion a la base y se retorna un boolean con el
resultado de la operación.
public boolean eliminar (String nombre) throws SQLException,
ClassNotFoundException {
boolean valorDevolver = false;
String sql = "Delete from grupo where nombre=?";
37
PreparedStatement unPS = unCon.prepareStatement(sql);
unPS.setString(1, nombre);
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
return valorDevolver;
}
La funcion eliminar recibe como parametro un objeto tipo grupo se
define un boolean que se lo usara como una bandera para indicar el
resultado de la sentencia sql, se define un string el cual se va a
asignar la sentencia sql delete que se va a ejecutar en la base.
Los signos de interrogacion del insert se los reemplaza por un valor
que se obtiene del objeto tipo grupo, se define una variable tipo entero
en la cual se le asigna el valor del resultado de ejecutar el delete.
Se cierra la conexion a la base y se retorna un boolean con el
resultado de la operacion.
38
public boolean eliminar (Grupo unGrupo) throws SQLException,
ClassNotFoundException {
boolean valorDevolver = false;
String sql = "Delete from grupo where nombre=?";
PreparedStatement unPS = unCon.prepareStatement(sql);
unPS.setString(1,unGrupo.getNombre());
int i = unPS.executeUpdate();
unPS.close();
if (i == 0){
valorDevolver = true;
}
return valorDevolver;
}
La funcion guardar recibe no recibe parámetros se define un objeto
tipo vector en el cual se guardara todos los resultados que genere la
consulta, se define un string el cual se va a asignar la sentencia sql
select que se va a ejecutar en la base.
Se define un objeto tipo grupo el cual se va a usar en un ciclo de
repetición while el cual va a recorrer el objeto y asignandolo al vector.
Se cierra la conexion a la base y se retorna el vector con los
resultados de la operacion
39
public Vector buscarTodos() throws Throwable{
Vector valorDevolver = new Vector();
String sql = "Select * from grupo order by nombre;";
PreparedStatement unPS = unCon.prepareStatement(sql);
ResultSet unRS = unPS.executeQuery();
Grupo unGrupo = null;
while (unRS.next()){
unGrupo= new Grupo();
unGrupo.setNombre(unRS.getString("nombre"));
unGrupo.setDescripcion(unRS.getString("descripcion"));
valorDevolver.addElement(unGrupo);
}
unRS.close();
unPS.close();
return valorDevolver;
}
La funcion Buscar recibe como parametro un string que contiene el
nombre del grupo a buscar, se define un string el cual se va a asignar
la sentencia sql delete que se va a ejecutar en la base.
40
El signo de interrogacion del select se los reemplaza por un valor que
se obtiene del objeto tipo grupo,en un ciclo de repetición while el cual
va a recorrer el objeto y asignandolo al objeto tipo grupo.
Se cierra la conexion a la base y se retorna un boolean con el
resultado de la operación.
public Grupo buscarGrupo(String nombreGrupo) throws Throwable{
Grupo unGrupo = new Grupo();
String sql = "Select nombre, descripcion, gid from grupo where
nombre= ?;";
PreparedStatement unPS= unCon.prepareStatement(sql);
unPS.setString(1,nombreGrupo);
ResultSet unRS= unPS.executeQuery();
while (unRS.next()){
unGrupo.setNombre(unRS.getString("nombre"));
unGrupo.setDescripcion(unRS.getString("descripcion"));
unGrupo.setGID(unRS.getString("gid"));
}
unRS.close();
unPS.close();
return unGrupo;
} }
41
2..- Clases BO
Los objetos BO son aquellos que contienen las reglas de negocio. Son los
encargados de mantener las entidades del sistema, que, en nuestro caso,
son las tablas de la base de datos.
Los objetos BO hacen uso de los objetos DAO para obtener los datos que
necesiten. En nuestra aplicación, tenemos una clase BO por cada clase
DAO.
Los objetos BO que usamos son las siguientes
UsuarioBO
GrupoBO
GrupoUsuarioBO
InformacionDeContactoBO
ParametrosDominioBO
ComplejidadPasswordBO
42
2.1.- Principales Clases de los Objetos BO
2.1.1.- UsuarioBO
/* Librerias que utliza el Objeto UsuarioBO
package com.project12.classes;
import java.sql.*;
import java.util.Vector;
/* Inicio de la Clase Usuario BO
public class UsuarioBO {
La función Guardar recibe un parámetro de tipo llama a la clase Base
para realizar la conexión a la base.
Define un objeto tipo UsuarioDAO para realizar el procedimiento de
guardar retorna un boolean en que se indica el resultado del proceso .
/*Inicio de la función Guardar
public boolean guardar (Usuario unUsuario) throws
SQLException, ClassNotFoundException {
Connection unCon = Base.getConexion();
UsuarioDAO unUsuarioDAO = new UsuarioDAO(unCon);
boolean valorDevolver = unUsuarioDAO.guardar(unUsuario);
unCon.commit();
43
return valorDevolver;
}
/*Fin de la función Guardar
La función actualizar recibe un parámetro de tipo Usuario llama a la
clase Base para realizar la conexión a la base Define un objeto tipo
UsuarioDAO para realizar el procedimiento de actualizar retorna un
boolean en que se indica el resultado del proceso.
/*Inicio de la función Actualizar
public boolean actualizar (Usuario unUsuario) throws
SQLException, ClassNotFoundException {
Connection unCon = Base.getConexion();
UsuarioDAO unUsuarioDAO = new UsuarioDAO(unCon);
boolean valorDevolver = unUsuarioDAO.actualizar(unUsuario);
unCon.commit();
return valorDevolver;
}
/*Fin de la función Actualizar
La función Eliminar recibe un parámetro de tipo Usuario llama a la
clase Base para realizar la conexión a la base Define un objeto tipo
44
UsuarioDAO para realizar el procedimiento de eliminar retorna un
boolean en que se indica el resultado del proceso.
/*Inicio de la función Eliminar
public boolean eliminar (Usuario unUsuario) throws
SQLException, ClassNotFoundException {
Connection unCon= Base.getConexion();
UsuarioDAO unUsuarioDAO=new UsuarioDAO(unCon);
BoleanvalorDevolver=unUsuarioDAO.eliminar(unUsuario.getNombre())
unCon.commit();
return valorDevolver;
}
/*Fin de la función Guardar
La función buscarUsuario recibe un parámetro de tipo string que
contiene el nombre del usuario a buscar llama a la clase Base para
realizar la conexión a la base se define un objeto tipo Usuario se
realiza un try el cual si existe un error en la búsqueda del nombre del
grupo manda ese error al catch y lo muestra por pantalla.
Define un objeto tipo UsuarioDAO para realizar el procedimiento de
buscar un Grupo al objeto tipo grupo se le asigna el resultado de la
búsqueda retorna un objeto tipo usuario con resultado del proceso.
45
/*Inicio de la función buscarUsuario
public Usuario buscarUsuario(String nombre) throws
SQLException, ClassNotFoundException {
Connection unCon= Base.getConexion();
Usuario unUsuario = new Usuario();
try{
UsuarioDAO unUsuarioDAO=new UsuarioDAO(unCon);
unUsuario = unUsuarioDAO.buscarUsuario(nombre);
}catch (Throwable e){
System.out.println(e);
}
return unUsuario;
}
/*Fin de la función buscarUsuario
El Vector buscartodos no recibe parámetros define un objeto tipo
vector en el cual se almacenara los resultados de la búsqueda llama a
la clase Base para realizar la conexión a la base se realiza un try el
cual si existe un error en la búsqueda manda ese error al catch y lo
muestra por pantalla Define un objeto tipo UsuarioDAO para realizar el
procedimiento de buscar todos los Usuarios al objeto tipo vector se le
46
asigna todos los resultados de la búsqueda return retorna un objeto
tipo vector con los resultados del proceso.
/*Inicio Vector buscarTodos
public Vector buscarTodos() throws Throwable {
Vector valorDevolver=null;
Connection unCon= Base.getConexion();
try{
UsuarioDAO unUsuarioDAO=new UsuarioDAO(unCon);
valorDevolver = unUsuarioDAO.buscarTodos();
}catch (Throwable e){
}
return valorDevolver;
}
}
/*Fin Vector buscarTodos
47
2.1.2.-GrupoBO
/* Librerías que utiliza el Objeto GrupoBO
package com.project12.classes;
import java.sql.*;
import java.util.Vector;
/* Inicio de la Clase GrupoBO
public class GrupoBO {
La función Guardar recibe un parámetro de tipo Grupo llama a la clase
Base para realizar la conexión a la base.
Define un objeto tipo GrupoDAO para realizar el procedimiento de
guardar retorna un boolean en que se indica el resultado del proceso
/*Inicio de la función Guardar
public boolean guardar (Grupo unGrupo) throws SQLException,
ClassNotFoundException {
Connection unCon = Base.getConexion();
GrupoDAO unGrupoDAO = new GrupoDAO(unCon);
boolean valorDevolver = unGrupoDAO.guardar(unGrupo);
unCon.commit();
return valorDevolver;
}
48
/*Fin Función Guardar
La función actualizar recibe un parámetro de tipo Grupo llama a la
clase Base para realizar la conexión a la base.
Define un objeto tipo GrupoDAO para realizar el procedimiento de
actualizar retorna un boolean en que se indica el resultado del
proceso.
/*Inicio Función Actualizar
public boolean actualizar (Grupo unGrupo) throws SQLException,
ClassNotFoundException {
Connection unCon = Base.getConexion();
GrupoDAO unGrupoDAO = new GrupoDAO(unCon);
boolean valorDevolver = unGrupoDAO.actualizar(unGrupo);
unCon.commit();
return valorDevolver;
}
/* Fin Función Actualizar
La función Eliminar recibe un parámetro de tipo Grupo llama a la clase
Base para realizar la conexión a la base.
49
Define un objeto tipo GrupoDAO para realizar el procedimiento de
eliminar retorna un boolean en que se indica el resultado del proceso
/*Inicio Función Eliminar
public boolean eliminar (Grupo unGrupo) throws SQLException,
ClassNotFoundException {
Connection unCon= Base.getConexion();
GrupoDAO unGrupoDAO=new GrupoDAO(unCon);
Bolean valorDevolver = unGrupoDAO.eliminar(unGrupo.getNombre();
unCon.commit();
return valorDevolver;
}
/* Fin Función Eliminar
La función buscarGrupo recibe un parámetro de tipo string que
contiene el nombre del grupo a buscar llama a la clase Base para
realizar la conexión a la base. Se define un objeto tipo grupo se realiza
un try el cual si existe un error en la búsqueda del nombre del grupo
manda ese error al catch y lo muestra por pantalla.
Define un objeto tipo GrupoDAO para realizar el procedimiento de
buscar un Grupo al objeto tipo grupo se le asigna el resultado de la
búsqueda retorna un objeto tipo grupo con resultado del proceso.
50
/* Inicio Función buscarGrupo
public Grupo buscarGrupo(String nombre) throws SQLException,
ClassNotFoundException {
Connection unCon= Base.getConexion();
Grupo unGrupo = new Grupo();
try{
GrupoDAO unGrupoDAO=new GrupoDAO(unCon);
unGrupo = unGrupoDAO.buscarGrupo(nombre);
}catch (Throwable e){
System.out.println(e);
}
return unGrupo;
}
/* Fin Función buscarGrupo
El Vector buscarTodos no recibe parámetros define un objeto tipo
vector en el cual se almacenara los resultados de la búsqueda llama
a la clase Base para realizar la conexión a la base se realiza un try el
cual si existe un error en la búsqueda manda ese error al catch y lo
muestra por pantalla.
Define un objeto tipo GrupoDAO para realizar el procedimiento de
buscar todos los Grupo al objeto tipo vector se le asigna todos los
51
resultados de la búsqueda return retorna un objeto tipo vector con los
resultados del proceso
/* Inicio Vector buscarTodos
public Vector buscarTodos() throws Throwable {
Vector valorDevolver=null;
Connection unCon= Base.getConexion();
try{
GrupoDAO unGrupoDAO=new GrupoDAO(unCon);
valorDevolver = unGrupoDAO.buscarTodos();
}catch (Throwable e){
System.out.println(e);
}
return valorDevolver;
}
}
/* Fin Vector buscarTodos
/*Fin de la Clase UsuarioBO
52
2.1.3.- GrupoUsuarioBO
/* Librerias que utliza el Objeto GrupoUsuarioBO
package com.project12.classes;
import java.sql.*;
import java.util.Vector;
/*Inicio de la Clase GrupoUsuario
public class GrupoUsuarioBO {
La función Guardar recibe un parámetro de tipo GrupoUsuario llama a
la clase Base para realizar la conexión a la base. Define un objeto tipo
GrupoUsuarioDAO para realizar el procedimiento de guardar retorna
un boolean en que se indica el resultado del proceso
/* Inicio Función guardar
public boolean guardar (GrupoUsuario unGrupoUsuario) throws
SQLException, ClassNotFoundException {
Connection unCon = Base.getConexion();
GrupoUsuarioDAO unGrupoUsuarioDAO = new
GrupoUsuarioDAO(unCon);
boolean valorDevolver = unGrupoUsuarioDAO.guardar
(unGrupoUsuario);
53
unCon.commit();
return valorDevolver;
}
/* Fin Función guardar
La función Eliminar recibe un parámetro de tipo GrupoUsuario llama a
la clase Base para realizar la conexión a la base. Define un objeto tipo
GrupoUsuarioDAO para realizar el procedimiento de eliminar retorna
un boolean en que se indica el resultado del proceso.
/* Inicio Función eliminar
public boolean eliminar (GrupoUsuario unGrupoUsuario) throws
SQLException, ClassNotFoundException {
Connection unCon= Base.getConexion();
GrupoUsuarioDAOunGrupoUsuarioDAO=new
GrupoUsuarioDAO(unCon);
boolean valorDevolver = unGrupoUsuarioDAO.eliminar
(unGrupoUsuario);
unCon.commit();
return valorDevolver;
}
/* Fin Función eliminar
54
La función BuscarGrupoUsuario recibe dos parámetro de tipo string
que contiene el nombreGrupo y nombreUsuario a buscar llama a la
clase Base para realizar la conexión a la base Se define un objeto tipo
GrupoUsuario Se realiza un try el cual si existe un error en la
búsqueda del nombre del GrupoUsuario manda ese error al catch y lo
muestra por pantalla Define un objeto tipo GrupoUsuarioDAO para
realizar el procedimiento de buscar un GrupoUsuario Al objeto tipo
GrupoUsuario se le asigna el resultado de la búsqueda retorna un
objeto tipo GrupoUsuario con resultado del proceso.
/* Inicio Función buscarGrupoUsuario
public GrupoUsuario buscarGrupoUsuario(String nombreGrupo,
String nombreUsuario) throws SQLException,
ClassNotFoundException {
Connection unCon= Base.getConexion();
GrupoUsuario unGrupoUsuario = new GrupoUsuario();
try{
GrupoUsuarioDAO unGrupoUsuarioDAO=new
GrupoUsuarioDAO(unCon);
unGrupoUsuario = unGrupoUsuarioDAO.buscarGrupoUsuario
(nombreGrupo, nombreUsuario);
}catch (Throwable e){
55
System.out.println(e);
}
return unGrupoUsuario;
}
/* Fin Función buscarGrupoUsuario
El Vector buscarUsuariosGrupo recibe un parámetro de tipo String que
contiene el nombre del Grupo a buscar define un objeto tipo vector en
el cual se almacenara los resultados de la búsqueda llama a la clase
Base para realizar la conexión a la base Se realiza un try el cual si
existe un error en la búsqueda manda ese error al catch y lo muestra
por pantalla Define un objeto tipo GrupoUsuarioDAO para realizar el
procedimiento de buscar todos los UsuariosGrupo Al objeto tipo vector
se le asigna todos los resultados de la búsqueda retorna un objeto tipo
vector con los resultados del proceso
/* Inicio Vector buscarUsuariosGrupos
public Vector buscarUsuariosGrupo(String nombreGrupo) throws
Throwable {
Vector valorDevolver=null;
Connection unCon= Base.getConexion();
try{
56
GrupoUsuarioDAO unGrupoUsuarioDAO=
new GrupoUsuarioDAO(unCon);
valorDevolver = unGrupoUsuarioDAO.buscarUsuariosGrupo
(nombreGrupo);
}catch (Throwable e){
System.out.println(e);
}
return valorDevolver;
}
/* Fin Vector buscarUsuariosGrupos
El Vector buscarGruposUsuario recibe un parámetro de tipo String que
contiene el nombre del Usuario a buscar define un objeto tipo vector
en el cual se almacenara los resultados de la búsqueda llama a la
clase Base para realizar la conexión a la base Se realiza un try el cual
si existe un error en la búsqueda manda ese error al catch y lo
muestra por pantalla Define un objeto tipo GrupoUsuarioDAO para
realizar el procedimiento de buscar todos los GruposUsuarios Al
objeto tipo vector se le asigna todos los resultados de la búsqueda
retorna un objeto tipo vector con los resultados del proceso.
57
/* Inicio Clase buscarGruposUsuario
public Vector buscarGruposUsuario(String nombreUsuario)
throws Throwable {
Vector valorDevolver=null;
Connection unCon= Base.getConexion();
try{
GrupoUsuarioDAO unGrupoUsuarioDAO=
new GrupoUsuarioDAO(unCon);
valorDevolver= unGrupoUsuarioDAO.buscarGruposUsuario
(nombreUsuario);
}catch (Throwable e){
System.out.println(e);
}
return valorDevolver;
}/*Fin Clase buscarGruposUsuario
58
/* Inicio Funcion getCadenaGID
public String getCadenaGID (String nombreUsuario) throws
Throwable {
Connection unCon= Base.getConexion();
String valorDevolver="";
try{
GrupoUsuarioDAO unGrupoUsuarioDAO =
new GrupoUsuarioDAO(unCon);
valorDevolver = unGrupoUsuarioDAO.getCadenaGID
(nombreUsuario);
}catch (Throwable e) {
System.out.println(e);
}
return valorDevolver;
}
}
/* Fin Funcion getCadenaGID
59
3.- Varias Clases de Java
Las usamos para operar una serie de funciones propias de las clases que
hemos definido.
3.1.1.- Clase DHCP
Define objetos que contendrán información relacionada a la
configuración del archivo dhcpd.conf Nota: Para el funcionamiento
correcto de esta clase, el archivo dhcpd.conf debe tener la estructura
especificada por el grupo de desarrollo.
package com.project12.archivo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
public class DHCP {
private String subNet="";
private String rango="";
private String tiempoLease="";
60
private String tiempoLeaseMax="";
private String mascaraSubred="";
private String puertaEnlace="";
private String nombreDominio="";
private String ipDNS="";
Vector vectorReservacionDeIP = new Vector();
/*Inicio del Constructor
Constructor que no recibe parámetros Finalidad: Capturar información
del archivo dhcpd.conf.
Proceso: llama a funciones que asignan valores a los atributos
Uso: un objeto creado con este constructor será llenado
automáticamente y permite la presentación de la configuración del
servicio DHCP
public DHCP(){
try{
//infile contendra el archivo abierto para lectura
BufferedReader infile= new BufferedReader(new
FileReader("/etc/dhcpd.conf"));
leerConfiguracionDHCP(infile);
61
//Se leen los parámetros generales
infile.close(); //cierre del BufferedReader
//infile contendrá el archivo abierto nuevamente para lectura
infile= new BufferedReader(new FileReader("/etc/dhcpd.conf"));
leerReservacionesDeIP(infile);
//Se leen las reservaciones de IP existentes
infile.close(); //cierre del BufferedReader
}catch(Throwable e){
System.out.println("Excepción constructor: " + e.getMessage());
}
}
/*Fin del Constructor
Constructor que no recibe parámetro entero
Finalidad: Simplemente crea un objeto de tipo DHCP
Uso: un objeto creado con este constructor será llenado de acuerdo a
las necesidades del programador (generalmente para cambiar las
configuraciones). Nota: el valor int recibido es indiferente, ya que es
usado simplemente para diferenciar del constructor anterior
Recibe un BufferedReader obtenido del archivo dhcpd.conf
Función para lectura de parámetros generales del archivo dhcpd.conf
62
Realiza una lectura línea a línea del BufferedReader
public void leerConfiguracionDHCP(BufferedReader infile){
try
{
String linea; //contendrá el contenido de una línea leída
while ((linea = infile.readLine()) != null) //mientras hayan líneas por leer
{
if (linea.contains ("subnet") && linea.contains("netmask")) //si es la
línea que define la subnet y netmask
{
subNet = linea;
}
Cada if que sigue a continuación verifican el contenido de la línea leída
si contiene alguno de los identificadores buscados, borrarán estos
indicadores y el símbolo (;) presente en cada línea para obtener así el
valor de cada parámetro del archivo y asignarlo al atributo
correspondiente del objeto DHCP
if (linea.contains ("range"))
{
63
linea = linea.replace("range ", "");
linea = linea.replace(";", "");
rango = linea;
}
if (linea.contains ("default-lease-time"))
{
linea = linea.replace("default-lease-time ", "");
linea = linea.replace(";", "");
tiempoLease=linea;
}
if (linea.contains ("max-lease-time"))
{
linea = linea.replace("max-lease-time ", "");
linea = linea.replace(";", "");
tiempoLeaseMax=linea;
}
if (linea.contains ("option subnet-mask"))
{
linea = linea.replace("option subnet-mask ", "");
linea = linea.replace(";", "");
mascaraSubred = linea;
}
64
if (linea.contains ("option routers"))
{
linea = linea.replace("option routers ", "");
linea = linea.replace(";", "");
puertaEnlace = linea;
}
if (linea.contains ("option domain-name \""))
{
linea = linea.replace("option domain-name ", "");
linea = linea.replace(";", "");
nombreDominio= linea;
}
if (linea.contains ("option domain-name-servers"))
{
linea = linea.replace("option domain-name-servers ", "");
linea = linea.replace(";", "");
ipDNS= linea;
}
}
}catch(Throwable e){
}
}
65
Recibe un parámetro de tipo BufferedReader para la lectura del
archivo dhcpd.conf
Proceso: leer las reservaciones existentes en el archivo dhcpd.conf
Finalidad: asignar valores de configuración del archivo a los atributos
del objeto DHCP.
public void leerReservacionesDeIP(BufferedReader infile){
ReservacionDeIP unaReservacionDeIP= null; //Contendrá los valores
de cada reservación El objeto será recreado (new) cada vez que se
encuentre una reservación
try
{
String linea;
while ((linea = infile.readLine()) != null) //mientras queden líneas por
leer
{
if (linea.contains ("reservacion"))
Al encontrar esta palabra en la línea, se habrá identificado que a
continuación empieza una definición para reservación de IP
{
66
unaReservacionDeIP= new ReservacionDeIP();
Se recrea el objeto para que contenga los valores de la reservación de
IP identificada
Los siguientes bloques de código permiten el avance de línea
controlado para efectuar una eliminación del contenido no deseado de
cada línea y así obtener el valor de cada parámetro del archivo para
luego ser asignado a los atributos del objeto DHCP
linea = infile.readLine();
linea = linea.replace("host ", "");
linea = linea.replace(";", "");
unaReservacionDeIP.setMaquina(linea);
linea = infile.readLine();
//leer el presente en el archivo (según la estructura especificada)
linea = infile.readLine();
linea = linea.replace("ddns-hostname \"", "");
linea = linea.replace("\";", "");
unaReservacionDeIP.setFQDN(linea);
linea = infile.readLine();
linea = linea.replace("hardware ethernet ", "");
linea = linea.replace(";", "");
67
unaReservacionDeIP.setMAC(linea);
linea = infile.readLine();
linea = linea.replace("fixed-address ", "");
linea = linea.replace(";", "");
unaReservacionDeIP.setIP(linea);
vectorReservacionDeIP.addElement(unaReservacionDeIP);
}
}
}
catch (IOException e)
{ System.out.println("Excepción getReservacion: " + e);
}
}
Los siguientes métodos, permiten obtención de valores contenidos en
los atributos del objeto DHCP
public Vector getVectorReservacionDeIP() {
return vectorReservacionDeIP;
}
public String getSubNet() {
68
return subNet;
}
public String getRango() {
return rango;
}
public String getTiempoLease() {
return tiempoLease;
}
public String getTiempoLeaseMax(){
return tiempoLeaseMax;
}
public String getMascaraSubred(){
return mascaraSubred;
}
public String getPuertaEnlace(){
return puertaEnlace;
}
public String getNombreDominio(){
return nombreDominio;
}
public String getIpDNS(){
69
return ipDNS;
}
Los siguientes métodos, permiten la asignación de valores a los
atributos del objeto DHCP
public void setSubNet(String nuevaSubNet){
subNet = nuevaSubNet;
}
public void setRango(String nuevoRango){
rango = nuevoRango;
}
public void setTiempoLease(String nuevoTiempoLease){
tiempoLease = nuevoTiempoLease;
}
public void setTiempoLeaseMax(String nuevoTiempoLeaseMax){
tiempoLeaseMax = nuevoTiempoLeaseMax;
}
public void setMascaraSubred(String nuevaMascaraSubred){
mascaraSubred = nuevaMascaraSubred;
}
public void setPuertaEnlace(String nuevaPuertaEnlace){
70
puertaEnlace = nuevaPuertaEnlace;
}
public void setNombreDominio(String nuevoNombreDominio){
nombreDominio = nuevoNombreDominio;
}
public void setIpDNS(String nuevaIpDNS){
ipDNS = nuevaIpDNS;
}
}
71
Clase que define objetos que realizan operaciones con el archivo dhcpd.conf
package com.project12.archivo;
3.1.2.- Clase OperacionDHCP
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class OperacionDHCP {
Método para crear un archivo intermedio que agrega las líneas
necesarias para agregar una reservación de IP. A partir del archivo
dhcpd.conf
Nota: Este método solo crea el archivo intermedio, no reemplaza el
archivo dhcpd.conf
Public void guardarReservacionDeIP(ReservacionDeIP
unaReservacionDeIP){
try
72
{
Se crean los objetos requeridos para lectura del archivo dhcpd.conf
y la escritura del archivo intermedio dhcpdNuevo.conf
BufferedWriter outfile = new BufferedWriter(new
FileWriter("/respaldoConfig/dhcpdNuevo.conf"));
BufferedReader infile = new BufferedReader(new
FileReader("/etc/dhcpd.conf"));
String str; //contendrá cada línea leída del archivo dhcpd.conf
while ((str = infile.readLine()) != null) //mientras queden líneas por leer
{
Si encuentra el indicador para agregar reservaciones "nueva_reserva"
empezara la escritura de la información adicional
if (str.contains("nueva_reserva")){
outfile.write("#reservacion " + unaReservacionDeIP.getIP() + "\n");
outfile.write("host " + unaReservacionDeIP.getMaquina() + "\n");
outfile.write("{\n");
outfile.write("ddns-hostname \"" + unaReservacionDeIP.getFQDN() +
"\";\n");
outfile.write("hardware ethernet " + unaReservacionDeIP.getMAC() +
";\n");
73
outfile.write("fixed-address " + unaReservacionDeIP.getIP() + ";\n");
outfile.write("}\n");
//agrega el nuevo indicador para ingreso de la próxima reservación
outfile.write("#nueva_reserva \n");
}else //agrega las líneas leídas de dhcpd.conf en el archivo intermedio
{
outfile.write(str + "\n");
}
}
infile.close();
outfile.close();
}
catch (IOException e)
{
System.out.println("Excepción: " + e.getMessage());
}
}
Método para buscar una reservación de IP especifica
Parámetros que recibe: una String que contiene una dirección IP
Devuelve: un booleano true si encuentra
74
public boolean buscarReservacionDeIP(String ip){
boolean reservacionEncontrada= false;
try{
BufferedReader infile = new BufferedReader(new
FileReader("/etc/dhcpd.conf"));
String str;
while ((str = infile.readLine()) != null)
{
//System.out.println(str);
Si es encontrada la etiqueta requerida, se asigna true a la variable que
retornara
if (str.contains("#reservacion " + ip)){
reservacionEncontrada = true;
}
}
infile.close();
}catch(Throwable e){
}
return reservacionEncontrada;
}
75
Parámetros: objeto del tipo ReservacionDeIP, que contiene la
información de la reservación a eliminar
Devuelve: un valor boolean true si fue eliminado
Nota: Este método no modifica el archivo dhcpd.conf, lo que hace es
crear un archivo intermedio /respaldoConfig/dhcpdNuevo.conf
public boolean eliminarReservacionDeIP(ReservacionDeIP
unaReservacionDeIP){
boolean flag = false;
try
{
//Se crean los objetos necesarios de lectura y escritura de archivo
BufferedWriter outfile = new BufferedWriter(new
FileWriter("/respaldoConfig/dhcpdNuevo.conf"));
BufferedReader infile = new BufferedReader(new
FileReader("/etc/dhcpd.conf"));
String str; //contendrá cada lÃnea leÃda del archivo dhcpd.conf
String labelIP = "#reservacion " + unaReservacionDeIP.getIP();
{
76
Si encuentra la etiqueta, se asigna un valor true al boolean que se
devolverá y no toma en cuenta las lineas que serán eliminadas
if (str.contains(labelIP)){
flag = true;
infile.readLine();
infile.readLine();
infile.readLine();
infile.readLine();
infile.readLine();
infile.readLine();
}
Si la línea no contiene la etiqueta, es escrita en el archivo intermedio
else
{
outfile.write(str + "\n");
}
}
infile.close();
outfile.close();
}
catch (IOException e)
77
{
System.out.println("Excepción: " + e.getMessage());
}
return flag;
}
Parámetros: objeto de tipo DHCP que contiene los datos a modificar
Resultado: un boolean true si pudo actualizar
Crea un archivo intermedio que servirá para actualizar los parámetros
generales del archivo dhcpd.conf
public boolean actualizarConfiguracion(DHCP unDHCP){
boolean actualizacion = false;
try
{
//Se crean los objetos para lectura y escritura de archivos
BufferedWriter outfile = new BufferedWriter(new
FileWriter("/respaldoConfig/dhcpdNuevo.conf"));
BufferedReader infile = new BufferedReader(new
FileReader("/etc/dhcpd.conf"));
String linea; //contendrá la línea leída del archivo dhcpd.conf
while ((linea = infile.readLine()) != null)
78
//mientras queden líneas por leer
{
Si encuentra la línea requerida, será reemplazada por los valores
del objeto DHCP
if (linea.contains("subnet") && linea.contains("netmask"))
outfile.write(unDHCP.getSubNet() + "\n");
else if (linea.contains("range"))
outfile.write("range " + unDHCP.getRango() + ";\n");
else if (linea.contains("default-lease-time"))
outfile.write("default-lease-time " + unDHCP.getTiempoLease() + ";\n");
else if (linea.contains("max-lease-time"))
outfile.write("max-lease-time " + unDHCP.getTiempoLeaseMax() +
";\n");
else if (linea.contains("option subnet-mask"))
outfile.write("option subnet-mask " + unDHCP.getMascaraSubred() +
";\n");
else if (linea.contains("option routers"))
outfile.write("option routers " + unDHCP.getPuertaEnlace() + ";\n");
else if (linea.contains("option domain-name") && !linea.contains("option
domain-name-servers"))
79
outfile.write("option domain-name \"" + unDHCP.getNombreDominio()
+ "\";\n");
else if (linea.contains("option domain-name-servers"))
outfile.write("option domain-name-servers " + unDHCP.getIpDNS() +
";\n");
else
outfile.write(linea + "\n");
}
actualizacion = true;
infile.close();
outfile.close();
}
catch (IOException e)
{
System.out.println("Excepción: " + e.getMessage());
}
return actualizacion;
}
}
80
2.1.3.- Operación Ldif
Clase que define objetos para realizar operaciones con el archivo
crontab para manejar horarios de los usuarios
package com.project12.archivo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
/*Inicio de la Clase Operación Horario de Trabajo
public class OperacionHorarioDeTrabajo {
Parámetros: una String que contiene el nombre de usuario para buscar
si tiene signado horario
public Vector buscarHorariosTrabajo (String nombreUsuario){
Vector vectorHorarioDeTrabajo = new Vector();
contendrá los objetos de tipo HorarioDeTrabajo encontrados
(correspondientes al nombreUsuario)
BufferedReader infile = null;
81
Contiene el número de horarios q tiene el usuario
try{
se define objeto para lectura del archivo /crontab
infile = new BufferedReader(new FileReader("/crontab"));
HorarioDeTrabajo unHorarioDeTrabajo = null;
String linea=""; //contendrá las líneas leídas del archivo
String parametro = ""; //contendrá cada parámetro del archivo
int nParametro = 0; //controlará el número de parámetros
obtenidos de la línea requerida
char caracter; //contendrá cada caracter de la línea requerida
while ((linea = infile.readLine()) != null) //mientras queden líneas
por leer
{
//si la línea contiene el nombre buscado
if (linea.contains (nombreUsuario))
{
//si la línea contiene la etiqueta que indica un horario en el
archivo crontab
if (linea.contains("horario_")){
unHorarioDeTrabajo = new HorarioDeTrabajo();
unHorarioDeTrabajo.setUsuario(nombreUsuario);
82
linea = linea.replace("#", "");
unHorarioDeTrabajo.setIndice(linea);
linea = infile.readLine();
for (int i=0; i<linea.length(); i++){
caracter = linea.charAt(i);
if (caracter != ' ' ){
parametro= parametro + caracter;
}else{
//si contiene la etiqueta que indica la habilitación de la cuenta
if (linea.contains("inicio")){
if (nParametro==0)
unHorarioDeTrabajo.setInicioMinuto(parametro);
if (nParametro==1)
unHorarioDeTrabajo.setInicioHora(parametro);
if (nParametro==4){
if(parametro.contains("sun")) unHorarioDeTrabajo.setDom("sun");
if(parametro.contains("mon")) unHorarioDeTrabajo.setLun("mon");
if(parametro.contains("tue")) unHorarioDeTrabajo.setMar("tue");
if(parametro.contains("wed")) unHorarioDeTrabajo.setMie("wed");
if(parametro.contains("thu")) unHorarioDeTrabajo.setJue("thu");
if(parametro.contains("fri")) unHorarioDeTrabajo.setVie("fri");
if(parametro.contains("sat")) unHorarioDeTrabajo.setSab("sat");
83
parametro = "";
nParametro=0;
break;
//sale del for, pues termió de procesar la línea
}
parametro = "";
}else{
//caso contrario, contiene la etiqueta que indica la deshabilitación de la
cuenta
if (nParametro==0) unHorarioDeTrabajo.setFinMinuto(parametro);
if (nParametro==1){
unHorarioDeTrabajo.setFinHora(parametro);
vectorHorarioDeTrabajo.addElement(unHorarioDeTrabajo);
parametro = "";
nParametro=0;
break; //sale del for, pues termió de procesar la línea
}
parametro = "";
}
nParametro++;
}
}
84
}
}
infile.close();
}catch (Throwable e){
System.out.println ("Excepción Operacion Horario Trabajo: " +
e.getMessage());
}
return vectorHorarioDeTrabajo;
}
Parámetros: objeto HorarioDeTrabajo que contiene los datos para
agregar el nuevo horario.
Resultado: un booleano true si se realizó correctamente el proceso
Método que crea un archivo intermedio en el que se escriben las
líneas necesarias para asignación de horario (habilitación y
deshabilitación de cuenta)
public boolean guardarHorarioDeTrabajo (HorarioDeTrabajo
unHorarioDeTrabajo){
boolean valorDevolver = false;
try
{
85
BufferedWriter outfile = new BufferedWriter
(new FileWriter("/root/Escritorio/crontab"));
BufferedReader infile = new BufferedReader
(new FileReader("/crontab"));
String str;
String lineaInicio;
String lineaFin;
String dias="";
while ((str = infile.readLine()) != null) {
System.out.println(str);
Si contiene la etiqueta donde se agregarán las 2 líneas
if (str.contains("nuevo_horario")){
Se escribe la etiqueta que identificará el horario
Nota: unHorarioDeTrabajo.getIndice() contiene un
indicador secuencial que servirá para hacer búsquedas o eliminación
del horario en lo posterior
outfile.write("#horario_" + unHorarioDeTrabajo.getIndice() + "_" +
unHorarioDeTrabajo.getUsuario() + "\n");
Se generan las líneas que serán escritas
lineaInicio = unHorarioDeTrabajo.getInicioMinuto() + " " +
unHorarioDeTrabajo.getInicioHora() + " * * ";
86
lineaFin = unHorarioDeTrabajo.getFinMinuto() + " " +
unHorarioDeTrabajo.getFinHora() + " * * ";
if (unHorarioDeTrabajo.getDom().compareTo("sun") == 0){
dias = dias + "sun";
}
if (unHorarioDeTrabajo.getLun().compareTo("mon") == 0){
if (dias.compareTo("")!=0) dias = dias + ",";
dias = dias + "mon";
}
if (unHorarioDeTrabajo.getMar().compareTo("tue") == 0){
if (dias.compareTo("")!=0) dias = dias + ",";
dias = dias + "tue";
}
if (unHorarioDeTrabajo.getMie().compareTo("wed") == 0){
if (dias.compareTo("")!=0) dias = dias + ",";
dias = dias + "wed";
}
if (unHorarioDeTrabajo.getJue().compareTo("thu") == 0){
if (dias.compareTo("")!=0) dias = dias + ",";
dias = dias + "thu";
}
if (unHorarioDeTrabajo.getVie().compareTo("fri") == 0){
87
if (dias.compareTo("")!=0) dias = dias + ",";
dias = dias + "fri";
}
if (unHorarioDeTrabajo.getSab().compareTo("sat") == 0){
if (dias.compareTo("")!=0) dias = dias + ",";
dias = dias + "sat";
}
lineaInicio = lineaInicio + dias;
lineaFin = lineaFin + dias;
lineaInicio = lineaInicio + " root smbldap-usermod -I " +
unHorarioDeTrabajo.getUsuario() + " #inicio\n";
lineaFin = lineaFin + " root smbldap-usermod -J " +
unHorarioDeTrabajo.getUsuario() + " #fin\n";
Se escriben las líneas en el archivo intermedio
outfile.write(lineaInicio);
outfile.write(lineaFin);
/*outfile.write("{\n");
outfile.write("ddnshostname\"+unaReservacionDeIP.getFQDN()+"\";\n")
outfile.write("hardwareethernet"+unaReservacionDeIP.getMAC() +"\n")
outfile.write("fixed-address " + unaReservacionDeIP.getIP() + ";\n");
outfile.write("}\n");*/
88
outfile.write("#nuevo_horario \n");
}else {
outfile.write(str + "\n");
}
}
infile.close();
outfile.close();
}
catch (IOException e) {
System.out.println("Excepción: " + e.getMessage());
}
Resultado: un boolean true si se realizó la operación
return valorDevolver;
}
Parámetros: un String que contiene la etiqueta que indica el inicio del
horario a eliminar
Método para crear un archivo intermedio que servirá para eliminar las
referencias a un horario asignado en el archivo crontab
public boolean eliminar(String indice){
boolean valorDevolver = false;
System.out.println("eliminar" + indice);
89
try {
Se crean los objetos para lectura y escritura de los archivos
BufferedWriter outfile =
new BufferedWriter(new FileWriter("/root/Escritorio/crontab"));
BufferedReader infile =
new BufferedReader(new FileReader("/crontab"));
String str;
Mientras queden líneas por leer
while ((str = infile.readLine()) != null) {
if (str.contains(indice)){
Si se encuentra la etiqueta se omiten las 2 líneas siguientes
infile.readLine();
infile.readLine();
}else{
caso contrario, se copia el contenido en el archivo intermedio
outfile.write(str + "\n");
}
}
infile.close();
outfile.close();
}catch (IOException e)
{
90
System.out.println("Excepción: " + e.getMessage());
}
return valorDevolver;
}
}
91
4.- Servlets
Un servlet es un objeto Java que implementa la interfaz javax.servlet.Servlet
o hereda alguna de las clases más convenientes para un protocolo específico
Al implementar esta interfaz el servlet es capaz de interpretar los objetos de
tipo HttpServletRequest y HttpServletResponse quienes contienen la
información de la interfaz que invocó al servlet.
Los nombres Servlet que utilizamos son:
Actualizar Configuración DHCP
Actualizar Grupo
Actualizar Información de Contacto
Actualizar Usuario
Agregar Grupo Usuario
Buscar Configuración DHCP
Buscar Grupo
Buscar Horario Usuario
Buscar Información de Contacto
Buscar Maquina
Buscar Todas Maquinas
Buscar todos Grupos
Buscar Todos Usuarios
Configuración DHCP
Eliminar grupo
Eliminar Maquina
Eliminar Reservación de Ip
Eliminar Usuario
Guardar Grupo
Guardar Horario de Trabajo
Guardar Horario
Guardar Reservación Ip
Guardar Usuario
Quitar Grupo Usuario
Reserva de Ip
Usuario Miembro de
92
4.1.- Código de los principales servlets
4.1.1.- ActualizarUsuarioServlet
package com.project12.servlet;
//librerias que necesita el servlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.project12.classes.Usuario;
import com.project12.classes.UsuarioBO;
Servlet implementation class for Servlet: ActualizarUsuarioServlet
Servlet que se utiliza para actualizar los datos del usuario
/*Inicio de la clase Actualizar Usuario Servlet
public class ActualizarUsuarioServlet extends HttpServlet{
static final long serialVersionUID = 1L;
public void service (HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException{
93
try{
Inicializacion de objetos para recoger los datos que envia el jsp
UsuarioBO unUsuarioBO = new UsuarioBO();
Usuario unUsuario = new Usuario();
unUsuario.setNombre(req.getParameter("nombre"));
unUsuario.setNombreCompleto
(req.getParameter("nombreCompleto"));
unUsuario.setDescripcion(req.getParameter("descripcion"));
Recoleccion de datos de los checkbox del jsp
try{
Variable tipo string que le se asigna el estado del Checkbox
String uno=req.getParameter("cambiaPass");
If para identifcar los datos de los checkbox Cambiar Password
if (uno.compareTo("on")==0){
unUsuario.setCambiaPass("checked");
}else{
unUsuario.setCambiaPass("");
}
}catch(java.lang.NullPointerException e){
unUsuario.setCambiaPass("");
94
}
try{
Variable tipo string que le se asigna el estado del Checkbox
String uno=req.getParameter("estadoCuenta");
If para identifcar los datos de los checkbox Estado Cuenta
if (uno.compareTo("on")==0){
unUsuario.setEstadoCuenta("checked");
}else{
unUsuario.setEstadoCuenta("");
}
}catch(java.lang.NullPointerException e){
unUsuario.setEstadoCuenta("");
}
Boolean que recibe como parametro el resultado de la clase actualizar
boolean resultado = unUsuarioBO.actualizar(unUsuario);
if (resultado == false){
Bloque que llama al servlet BuscarUsuarioServlet y que se le envía un
parámetro
ServletContext unSC = getServletContext();
RequestDispatcher unRD = unSC.getRequestDispatcher
("/BuscarUsuarioServlet?nombre="+unUsuario.getNombre());
95
unRD.forward(req, res);
}
}catch (Throwable e){
Bloque que se ejecuta al haber alguna excepción en el proceso de
actualizar y lo muestra
PrintWriter out=res.getWriter();
out.println ("<html><head><title> Guardar Usuario </title></head>");
out.println("<tr><td>" + e.getMessage() + "</td><td>" + "</td></tr>");
out.println("</table></body></html>");
out.flush();
out.close();
}
}
}
/* Fin de la Clase Actualizar Servlet
96
4.1.2.- Buscar Grupo Servlet
package com.project12.servlet;
Clases que necesita el servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.project12.classes.Grupo;
import com.project12.classes.GrupoBO;
Servlet que se utiliza para buscar un grupo
/*Inicio de la Clase Buscar Grupo Servlet
public class BuscarGrupoServlet extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
97
public void service (HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException{
try{
En este bloque se definen objetos tipo Grupo y GrupoBO manejar los
parámetros que se recibe del jsp
GrupoBO unGrupoBO = new GrupoBO();
Grupo unGrupo = unGrupoBO.buscarGrupo
(req.getParameter("nombre"));
Bloque que se utiliza para llamar a un jsp
req.setAttribute("unGrupo", unGrupo);
ServletContext unSC = getServletContext();
RequestDispatcher unRD = unSC.
getRequestDispatcher("/grupo.jsp");
unRD.forward(req, res);
}catch (Throwable e){
Bloque que se ejecuta al haber alguna excepción en el proceso de
actualizar y lo muestra
PrintWriter out=res.getWriter();
out.println ("<html><head><title> Buscar Todos </title></head>");
out.println ("<body><table><tr><td>Nombre</td><td>Mail</td></tr>");
out.println("<tr><td> Error:" + e.getMessage() + "</td><td></td></tr>");
out.println("</table></body></html>");
98
out.flush();
out.close();
}
}
}
/*Fin del Servlet Buscar Grupo
99
4.1.3.- Buscar Usuario Servlet
package com.project12.servlet;
Librerías que utiliza el servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.project12.classes.Usuario;
import com.project12.classes.UsuarioBO;
/*Inicio de la clase BuscarUsuarioServlet
public class BuscarUsuarioServlet extends
javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public void service (HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException{
try{
100
En este bloque se definen objetos tipo Usuario y UsuarioBO manejar
los parámetros que se recibe del jsp
UsuarioBO unUsuarioBO = new UsuarioBO();
Usuario unUsuario = unUsuarioBO.buscarUsuario
(req.getParameter("nombre"));
Bloque que se utiliza para llamar a un jsp
req.setAttribute("unUsuario", unUsuario);
ServletContext unSC = getServletContext();
RequestDispatcher unRD =
unSC.getRequestDispatcher("/usuario.jsp");
unRD.forward(req, res);
}catch (Throwable e){
Bloque que se ejecuta al haber alguna excepción en el proceso de
actualizar y lo muestra
PrintWriter out=res.getWriter();
out.println ("<html><head><title> Buscar Todos </title></head>");
out.println ("<body><table><tr><td>Nombre</td><td>Mail</td></tr>");
out.println("<tr><td>" + e.getMessage() + "</td><td></td></tr>");
out.println("</table></body></html>");
out.flush();
out.close(); } } }
/*Fin del Servlet Buscar Usuario
101
4.1.4.- Servlet Guardar Usuario
package com.project12.servlet;
Librerias que utiliza el servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.project12.archivo.OperacionLDIF;
import com.project12.classes.InformacionDeContacto;
import com.project12.classes.InformacionDeContactoBO;
import com.project12.classes.Usuario;
import com.project12.classes.UsuarioBO;
import com.project12.javaetc.Comando;
/*Inicio de la Clase Guardar Usuario
public class GuardarUsuarioServlet extends
javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
102
static final long serialVersionUID = 1L;
public void service (HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException{
try{
En este bloque se definen objetos tipo Usuario y UsuarioBO manejar
los parámetros que se recibe del jsp
UsuarioBO unUsuarioBO = new UsuarioBO();
Usuario unUsuario = new Usuario();
unUsuario.setNombre(req.getParameter("nombre"));
unUsuario.setNombreCompleto(req.getParameter
("nombreCompleto"));
unUsuario.setDescripcion(req.getParameter("descripcion"));
String password = req.getParameter("textfield232");
try{
Recolección de datos de los checkbox del jsp
Variable Tipo String que se le asigna el contenido del Checkbox
cambiar password
String uno=req.getParameter("cambiaPass");
if (uno.compareTo("on")==0){
unUsuario.setCambiaPass("checked");
}else{
103
unUsuario.setCambiaPass("");
}
}catch(java.lang.NullPointerException e){
unUsuario.setCambiaPass("");
}
try{
Variable Tipo String que se le asigna el contenido del Checkbox
cambiar password
String uno=req.getParameter("estadoCuenta");
if (uno.compareTo("on")==0){
unUsuario.setEstadoCuenta("checked");
}else{
unUsuario.setEstadoCuenta("");
}
}catch(java.lang.NullPointerException e){
unUsuario.setEstadoCuenta("");
}
En este bloque se definen varios objetos que se necesitan inicializar al
crear un nuevo usuario
boolean resultado = unUsuarioBO.guardar(unUsuario);
InformacionDeContactoBO unaInformacionDeContactoBO =
104
new InformacionDeContactoBO();
InformacionDeContacto unaInformacionDeContacto =
new InformacionDeContacto();
unaInformacionDeContacto.setUsuario(unUsuario.getNombre());
boolean resultado1 = unaInformacionDeContactoBO.guardar
(unaInformacionDeContacto);
OperacionLDIF unaOperacionLDIF = new OperacionLDIF();
unaOperacionLDIF.crear(unaInformacionDeContacto);
Se llama a la clase Comando para mandar a ejecutar un script en linux
Comando unComando = new Comando ();
unComando.ejecutar("creaUsuario "+
unUsuario.getNombre()+" "+password);
unComando.ejecutar("usuarioLdif");
Bloque que se utiliza para llamar a un jsp
ServletContext unSC = getServletContext();
RequestDispatcher unRD = unSC.getRequestDispatcher
("/BuscarTodosUsuariosServlet");
unRD.forward(req, res);
}catch (Throwable e){
105
Bloque que se ejecuta al haber alguna excepción en el proceso de
actualizar y lo muestra
PrintWriter out=res.getWriter();
out.println ("<html><head><title> Guardar Usuario </title></head>");
out.println("<tr> <td>Excepción:" + e.getMessage() + "</td>" + "</tr>");
out.println("</table></body></html>");
out.flush();
out.close();
}
}
}
/* Fin de la Clase Guardar Usuario
106
Manual de Usuario ................................................................................................. 2
1.- Mapa de Sitio ................................................................................................ 2
2.- Interfaz del Sistema Project12.com ............................................................ 3
2.1.- Interfaz Principal .................................................................................... 3
2.2.- Ingreso de Usuario y Clave .................................................................. 4
2.3.- Interfaz Principal de Usuario ................................................................ 5
2.4.- Interfaz de Creación de Usuario .......................................................... 6
Barra de hipervínculos ....................................................................................... 7
2.5.- Interfaz General de Usuario ..................................................................... 8
2.6.- Interfaz de Información de Usuario .................................................... 10
2.7.- Interfaz de Usuario Miembro de ......................................................... 11
2.9.- Interfaz Principal de Grupo ................................................................. 13
2.10.- Interfaz de Modificación de Grupo ................................................... 14
2.11.- Interfaz de Creación de Grupo ......................................................... 15
2.12.- Interfaz Principal de Maquina ........................................................... 16
2.13.- Interfaz de Eliminar Maquina ............................................................ 17
2.14.- Interfaz Principal de Servicios .......................................................... 18
2.15.- Interfaz de Configuración de DHCP ................................................ 20
2.16.- Interfaz de Reservación de IP .......................................................... 21
2.17.- Interfaz de Configuración de DNS ................................................... 22
Manual Tecnico .................................................................................................... 24
1.- Clases DAO ................................................................................................. 24
1.1.- Contenido de las Principales Clases DAO ........................................ 24
1.1.1.- UsuarioDAO .................................................................................. 24
1.1.2.- GRUPODAO ................................................................................. 33
2..- Clases BO .................................................................................................. 41
2.1.- Principales Clases de los Objetos BO ............................................... 42
2.1.1.- UsuarioBO ..................................................................................... 42
2.1.2.-GrupoBO......................................................................................... 47
2.1.3.- GrupoUsuarioBO .......................................................................... 52
3.- Varias Clases de Java................................................................................ 59
3.1.1.- Clase DHCP .................................................................................. 59
4.- Servlets ........................................................................................................ 91
4.1.- Código de los principales servlets ..................................................... 92
4.1.2.- Buscar Grupo Servlet ................................................................... 96
4.1.4.- Servlet Guardar Usuario .............................................................101