Professional Documents
Culture Documents
Postcondicin
Frecuencia
Importancia
Urgencia
Estabilidad
Comentarios
Autenticacin de usuarios
1.0 (Abril/2005)
David Ruiz (Universidad de Sevilla)
El sistema deber comportarse tal como se describe en el siguiente caso
de uso cuando un usuario se autentique.
Ninguna
Paso Accin
1
El sistema solicita al usuario que introduzca su nombre de usuario y su
clave.
2
El actor usuario introduce su nombre de usuario y contrasea y pulsa
el botn Login!.
3
Si la autenticacin es correcta, el sistema permitir el acceso a la aplicacin principal
4
Si la autenticacin no es correcta, el sistema no permitir el acceso a
aplicacin
5
El sistema registra el evento de la autenticacin del usuario.
Ninguna
100 veces/da
Vital
Inmediatamente
Alta
Una vez que el usuario se ha autenticado, la aplicacin se presentar de forma
personalizada para el mismo.
Para simplificar la codificacin entenderemos que una autenticacin es correcta
siempre que la clave sea pepe. Cuando se introduzca esta clave sin nombre de
usuario se tomar Anonymous como nombre de usuario.
NFR001
Versin
Autores
Descripcin
Archivo de registro
1.0 (Abril/2005)
Existe un nico objeto que almacena la informacin del usuario que trabaja con la aplicacin (nombre de usuario y password ). Dicho objeto se
isw2.lab3.application
ApplicationFrm
Test
+testAuth()
+testNoAuth()
uses
isw2.lab3.loginv0
LoginFrm
<<Interface>>
IResource
-doLogin()
-doExit()
+run()
<<singleton>>
Login
+Login getInstance()
+getUserName(): string
+setUserName(string)
+setPassword(string)
+getResource(): IResource
+setResource(IResource)
+authenticate()
uses
isw2.lab3.tracerv0
<<singleton>>
Tracer
+Tracer getInstance()
+addLine(string)
+getContent():BufferedReader
uses
try{
result = new BufferedReader(new FileReader(filename));
}
catch(Exception e){
e.printStackTrace();
}
return result;
}
Fjese que el mtodo addLine es synchronized, por lo que garantiza que
slo un hilo del sistema puede estar ejecutando su cdigo simultneamente.
Asimismo, el mtodo getContent() no es synchronized, por lo que se podr
leer el archivo mientras se aade una lnea.
El siguiente paso es crear un paquete isw2.lab3.loginv0 y aadir la interface
IResource, la clase Login y la clase visual LoginFrm que extender a Jframe.
El primer interfaz contendr un nico mtodo run(), ese mtodo ser el que se
ejecute cuando la autenticacin tenga xito.
Para la clase Login, las variables privadas y el constructor son los siguientes:
private String username;
private String password;
private static Login instance;
private static IResource resource;
private static final String masterPassword = "pepe";
private Login(){
username="";
password="";
}
Fjese que la nica forma de obtener la referencia al nico objeto que puede
existir de Tracer es invocando a su mtodo esttico getInstance().
Los mtodos get y set los utilizaremos para leer y escribir, respectivamente,
las distintas propiedades. A modo de ejemplo el cdigo que se encarga de leer
y escribir la propiedad Username es el siguiente:
public String getUsername(){
String result;
if (username.equals("")){
username = "Anonymous";
}
result = username;
return result;
}
8
System.exit(0);
}
1.4. Ejercicios
}
La siguientes clases son Test y Main, la primera contendr un mtodo testAuth() para ejecutar la aplicacin con autenticacin y un mtodo testNoAuth()
para ejecutarla sin autenticacin. Main es el punto de entrada a la aplicacin,
cuyo objetivo es crear un objeto de tipo Test y llamar a sus mtodos, por ejemplo:
public class Main {
public static void main(String args) {
Test t = new Test();
t.testAuth();
//t.testNoAuth();
}
}
...
public class Test {
Test(){ }
void testAuth()
{
Login.getInstance().setResource(new ApplicationFrm());
Login.getInstance().authenticate();
}
void testNoAuth()
{
(new ApplicationFrm()).show();
}
}
Fjese que para ejecutar la aplicacin sin autenticacin basta con llamar el
mtodo show() del JFrame (tambin valdra llamar al mtodo run() de IResource) que contiene a la aplicacin. Por el contrario, si queremos autenticacin tenemos que obtener la referencia al objeto de Login, darle valor a su
propiedad Resource con el objeto que implementa el mtodo run() y llamar a
su mtodo authenticate().
1.4 Ejercicios
CUESTIN 1.1:
10
CUESTIN 1.2:
CUESTIN 1.3:
Qu efectos tiene en el rendimiento de un mtodo hacerlo synchronized? Haga un test que mida el tiempo que tardan hilos en
ejecutar invocaciones de un mtodo sncrono frente a uno que no lo es.
1.5 Solucin
Los fuentes completos de esta prctica estarn disponibles en la pgina
Web de la asignatura cuando se imparta en el laboratorio.