Pour conserver un token de session utilisateur de fenêtre en fenêtre dans une application Java utilisant WindowBuilder et Swing, on peut utiliser l'approche suivante :
Vous pouvez créer une classe singleton qui stocke le token de session utilisateur.
<aside> 💡 Un singleton caractérise une classe où nous restreignons l'instanciation à un seul objet.
</aside>
Ici on a une classe qui ne représentera qu'un seul objet, qu'un seul token. Cette classe garantit qu'il n'existe qu'une seule instance de l'objet contenant le token dans toute l'application, sur toutes les fenêtres.
Dans chaque fenêtre où vous avez besoin d'accéder au token de session utilisateur, vous pouvez simplement obtenir l'instance de SessionManager
et utiliser la méthode getUserToken()
récupérer le token. Dans le code ci-dessous, la possibilité de modifier le token via setUserToken()
a été restreinte à une unique tentative pour éviter toute modification malicieuse ou maladroite de token en cours d'exécution.
Le code est composé de trois fenêtres :
frameA.java
frameB.java
SessionManager.java
Je vous invite à comprendre ces scripts et à tester leur fonctionnement.
frameA.java
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
public class frameA{
private JFrame frame;
private JLabel lblInformation;
private JTextField txtFieldSaisieToken;
private SessionManager sm = SessionManager.getInstance(); //<ESSENTIEL>
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frameA window = new frameA();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public frameA() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
//Début paramétrage de la fênetre
frame = new JFrame();
frame.setVisible(true);
frame.setTitle("Gestion de sessions");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
//Fin paramétrage de la fenêtre
//Début création du panel
JPanel panel = new JPanel();
panel.setBounds(0, 0, 436, 263);
frame.getContentPane().add(panel);
panel.setLayout(null);
//Fin création du panel
//Début affichage du token
JLabel lblTokenLabel = new JLabel("token : ");
lblTokenLabel.setBounds(10, 17, 45, 13);
panel.add(lblTokenLabel);
JLabel lblTokenValue = new JLabel(sm.getUserToken()); //<ESSENTIEL>
lblTokenValue.setBounds(53, 17, 100, 13);
panel.add(lblTokenValue);
//Fin affichage du token
//Début saisie du token
txtFieldSaisieToken = new JTextField();
txtFieldSaisieToken.setBounds(108, 65, 234, 19);
panel.add(txtFieldSaisieToken);
txtFieldSaisieToken.setColumns(10);
JButton btnValiderToken = new JButton("Valider");
btnValiderToken.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String inputUser = txtFieldSaisieToken.getText();
if(sm.setUserToken(inputUser) == 1) { //<ESSENTIEL>
lblInformation.setVisible(true);
lblInformation.setText("Création du token réussie");
}else {
lblInformation.setVisible(true);
lblInformation.setText("Modification de token interdite");
}
lblTokenValue.setText(sm.getUserToken()); //<ESSENTIEL>
}
});
btnValiderToken.setBounds(178, 94, 85, 21);
panel.add(btnValiderToken);
lblInformation = new JLabel("");
lblInformation.setHorizontalAlignment(SwingConstants.CENTER);
lblInformation.setBounds(96, 137, 253, 13);
lblInformation.setVisible(false);
panel.add(lblInformation);
//Fin saisie du token
//Début changement de fenêtre
JButton btnNewButton = new JButton("Aller à la frameB");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frameB window = new frameB();
frame.dispose();
}
});
btnNewButton.setBounds(140, 160, 162, 21);
panel.add(btnNewButton);
//Fin changement de fenêtre
}
}