Bonjour à tous,
Alors voilà, afin de réaliser une application de manière la plus propre possible, je souhaiterai récolter vos avis sur la manière de procéder.
Je développe actuellement une application permettant une gestion de données. Pour accéder à l'application, je souhaite que l'utilisateur commence par s'authentifier.
Je souhaite qu'une fenêtre permettant la saisie du username et du password apparaisse avant la fenêtre d'application proprement dites.
Voici donc le code contenant le main de mon application côté client :
Et le code de ma Frame pour le login
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package agmdclient; import Communications.cComAuthentification; import GUI.jfLogin; import javax.swing.JFrame; /** * @version 0.0.1 * @author raphael threis */ public class AgmdClient { /** * @param args the command line arguments */ public static void main(String[] args) { cComAuthentification oComAuth = new cComAuthentification(); jfLogin jfl = new jfLogin(oComAuth); jfl.setTitle("Connexion à AGMD"); jfl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jfl.setVisible(true); System.out.println("Username: "+oComAuth.getUsername()+" Mot de passe: "+oComAuth.getPassword()); } }
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 package GUI; import Communications.cComAuthentification; /** * @version 0.0.1 * @author raphael threis */ public class jfLogin extends javax.swing.JFrame { cComAuthentification oComAuth; /** * Creates new form jfLogin */ public jfLogin(cComAuthentification _value) { oComAuth = _value; initComponents(); } public jfLogin() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { // tout le code d'initialisation de la fenêtre }// </editor-fold> private void jbAnnulerActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); // je souhaite terminer l'application (autre solution préconisée ?) } private void jbConnecterActionPerformed(java.awt.event.ActionEvent evt) { oComAuth.setUsername(this.jtfUsername.getText()); oComAuth.setPassword(this.jpfPassword.getPassword().toString()); System.out.println("Username: "+oComAuth.getUsername()+" Mot de passe: "+oComAuth.getPassword()); //this.dispose(); } /** * @param args the command line arguments */ public static void main(String args[]) { /* * Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* * If Nimbus (introduced in Java SE 6) is not available, stay with the * default look and feel. For details see * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(jfLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(jfLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(jfLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(jfLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* * Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new jfLogin().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jbAnnuler; private javax.swing.JButton jbConnecter; private javax.swing.JLabel jlPassword; private javax.swing.JLabel jlUsername; private javax.swing.JLabel jlWelcome; private javax.swing.JPasswordField jpfPassword; private javax.swing.JTextField jtfUsername; // End of variables declaration }
Alors, ce que je souhaite savoir, c'est comment mettre en place l'authentification auprès du serveur ?
J'ai pensé à plusieurs solution, mais je ne sais pas si une des solutions trouvées est la meilleure, ou alors si elles sont toutes pourries.
1. Dans ma jFrame jfLogin, j'intègre tout le code de connexion au serveur, demande d'authentification, de vérification de réponse, ... [mon avis -> pas bon, car il faut garder le moins possible de traitement données dans l'interface afin de ne pas avoir d'effet de freeze]
2. La fenêtre de connexion lance un thread, qui établit la connexion avec le serveur, demande l'authentification, analyse la réponse, et retourne une valeur à la frame. [mon avis -> semble plus logique, et permettrait de réaliser une "animation" de tâche en cours sur la frame]
3. Retourner les informations d'authentification vers le "main" de l'application, fermer la boite de dialogue. Etablir la connexion avec le serveur dans le main, demander l'authentification, analyser la réponse, si OK, on affiche la fenêtre principale de l'application, dans le cas contraire, on réaffiche la frame de login. [mon avis -> solution tirée par les cheveux, fermer une frame pour potentiellement la rouvrir 5 secondes plus tard, est un non sens].
Pour les solutions 1 et 2, je ne sais pas contre pas comment faire, pour dire à mon main d'attendre la réponse de la frame de login. J'ai vu sur certains sites / forums qu'il fallait utiliser les events, mais je ne comprend pas comment les mettre en place. Est ce que je dois créer un event propre à mes besoins (par exemple un eventLogged ?) ou alors utiliser une event existant ?
En vous remerciant pour toutes les pistes, informations, remarques et avis qu'il vous sera possible de me donnner, je vous souhaite à tous une bonne journée.









Répondre avec citation
Partager