Java - Autenticación en aplicación de escritorio (Modelo vista controlador))

 
Vista:

Autenticación en aplicación de escritorio (Modelo vista controlador))

Publicado por Julián (2 intervenciones) el 01/07/2012 03:49:48
Tengo que hacer una autenticación de usuarios en el programa, por ahora mediante un .txt que solo contiene la clave, y debo usar la arquitectura modelo vista controlador para ello, además de una vista principal, pero no entiendo como manejar la validación entre las clases. Muchas gracias por la ayuda. Aquí mi código:

GUI (clase principal)

public class GUI extends JFrame
{
private static GUI app = null;

private GUI()
{
super("VideoManager");
setLocation(60,60);
JPanel p = new JPanel(new GridLayout(5,1,5,5));
TitledBorder title;
title = BorderFactory.createTitledBorder("Panel de control");
p.setBorder(title);

JButton inventario, venta, alquiler, clientes, reportes, usuarios;
inventario = new JButton("Inventario");
venta = new JButton("Ventas");
alquiler = new JButton("Alquiler");
clientes = new JButton("Admin. clientes");
reportes = new JButton("Reportes");
usuarios = new JButton("Perfiles de usuario");

p.add(inventario);
p.add(venta);
p.add(alquiler);
p.add(clientes);
p.add(reportes);
p.add(usuarios);
add(p);
setSize(300,480);
setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static GUI getGUI()
{
if (app == null)
app = new GUI();
return app;
}

public static void main(String a[])
{
GUI app = GUI.getGUI();
ControladorAutenticacion controlador = new ControladorAutenticacion(app);

if (controlador.authenticate())
{
JOptionPane.showMessageDialog(null, "Sesión iniciada");
app.setVisible(true);
}
}
}


Vista de autenticación

public class VistaAutenticacion extends JDialog
{
private JPanel p = new JPanel();
private JLabel password;
private JPasswordField pass;
private JButton aceptar, cancelar;
private TitledBorder title;

public VistaAutenticacion(JFrame owner)
{
super(owner, "Autenticación de usuario", true);
setLocation(60,60);
p.setLayout(new GridLayout(3,2,5,5));
title = BorderFactory.createTitledBorder("Iniciar sesión");
p.setBorder(title);
password = new JLabel("Contraseña");
pass = new JPasswordField();
aceptar = new JButton("Aceptar");
cancelar = new JButton("Cancelar");


p.add(usuario);
p.add(perfil);
p.add(password);
p.add(pass);
p.add(aceptar);
p.add(cancelar);

add(p);
pack();
setVisible(true);
addWindowListener (new WindowAdapter ()
{
public void windowClosing (WindowEvent ev)
{
System.exit(0);
}
});
}

public JPasswordField getPass()
{
return pass;
}

public JButton getAceptar()
{
return aceptar;
}

public JButton getCancelar()
{
return cancelar;
}
}

Modelo de autenticación

public class ModeloAutenticacion
{
private boolean validar;

public ModeloAutenticacion()
{
validar = false;
}

public void autenticar(String contr)
{
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
try
{
// Apertura del fichero y creacion de BufferedReader para poder
// hacer una lectura comoda (disponer del metodo readLine()).
archivo = new File ("password.txt");
fr = new FileReader (archivo);
br = new BufferedReader(fr);

// Lectura del fichero
String linea;
while((linea=br.readLine())!=null)
{
if(contr.equals(linea))
{
validar = true;
}
else
{
JOptionPane.showMessageDialog(null, "La clave no es correcta");
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if( null != fr )
{
fr.close();
}
}
catch (Exception e2)
{
e2.printStackTrace();
}
}
}

public boolean getValidation()
{
return validar;
}
}

Controlador de autenticación

public class ControladorAutenticacion
{
private VistaAutenticacion vAut;
private ModeloAutenticacion mAut;

public ControladorAutenticacion(JFrame owner)
{
this.vAut = new VistaAutenticacion(owner);
this.mAut = new ModeloAutenticacion();

vAut.getAceptar().addActionListener(new Autenticar());
vAut.getCancelar().addActionListener(new Cerrar());
}

public boolean authenticate()
{
char passArray[] = vAut.getPass().getPassword();
for (int i = 0; i < passArray.length; i++)
{
char c = passArray[i];
if (!Character.isLetterOrDigit(c)) return false;
}
String password = new String(passArray);
mAut.autenticar(password);
if (mAut.getValidation())
{
return true;
}
else
{
return false;
}
}

class Autenticar implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
if (authenticate())
{
JOptionPane.showMessageDialog(null, "Sesión iniciada");
vAut.dispose();
}
}
}

class Cerrar implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
System.exit(0);
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder