Enregistrer telle quelle la valeur d'un JPasswordField dans la BD

Enregistrer telle quelle la valeur d'un JPasswordField dans la BD - Java - Programmation

Marsh Posté le 09-11-2013 à 03:36:56    

Bonsoir à tous, j'ai un souci avec le JPasswordField. Dans mon application je permets à l'utilisateur de modifier son mot de passe, le problème est que le mot de passe enregistré dans la BD n'est pas celle que l'utilisateur à saisi, du coup impossible de le modifier puisque mon application vérifie l'ancien mot de passe.
 
voici comment je récupère mon mot de passe:
 
dans mon model :
 

Code :
  1. public class Utilisateur {
  2. private String mdp;
  3. public String getMdp(){
  4. return this.mdp.toString().trim();
  5. }
  6. }


dans mon service:
 

Code :
  1. public class ServicesUtilisateur {
  2. public boolean ajouterUtilisateur(Utilisateur user) {
  3. Connection connection = DataBaseConnector.getConnection();
  4. if (connection == null) {
  5. return false;
  6. }
  7. while((user.getNom().length()!=0)&& (user.getMdp().length()!=0))
  8. {
  9. try {
  10. PreparedStatement preparedStatement = connection.prepareStatement("insert into user(NomUser,Pass,) values(?,?)" );
  11. preparedStatement.setString(1, user.getNom());
  12. preparedStatement.setString(2, user.getMdp());
  13. preparedStatement.executeUpdate();
  14. .
  15. .
  16. .
  17. }


 
quand je tape par exemple comme mot de passe <gras>ok </gras>il s'enregistre par exemple en :<gras>[C@147480e</gras><ital></ital> et pourtant j'aimerais qu'il s'enregistre comme tel. Merci bien de m'aider.


---------------
l'on s'enrichit d'avantage en partageant ces connaissances
Reply

Marsh Posté le 09-11-2013 à 03:36:56   

Reply

Marsh Posté le 09-11-2013 à 05:45:07    

Salut

 

Le truc que t'enregistres dans ta BD ca m'a tout l'air d'etre une adresse memoire. Vu que ce que tu montres a l'air correct, je parierais une piecette sur ce que tu passes au setter: a tous les coups tu lui passes ton <JPasswordField>.getPassword().toString(), qui renvoie une addresse memoire vu que getPassword() renvoie un tableau.

 

Essaies de remplacer par new String(<JPasswordField>.getPassword()) et ca devrait aller beaucoup mieux.


Message édité par lasnoufle le 09-11-2013 à 05:45:26

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 10-11-2013 à 22:55:48    

Bonsoir lasnoufle,j'ai très bien compris ton message mais il y a un autre problème, et c'est mon gros  problème du MVC. Comment appéllé une méthode d'un formulaire du package A dans un autre du package B ?  
voici ma procédure:
Pour l'enregistrement de l'utilisateur, j'ai d'abord créé le model (classe Utilisateur qui contient les getters et setters) dans le package A. Ensuite j'ai créé dans mon contrôleur une methode (AjouterUtilisateur qui prend en parametre l'utilisateur de mon model et qui retourne un booléen) dans le package B.
Enfin dans ma vue, dans le ActionPerformed du Bouton Enregistrer j'appelle la méthode ajouterUtilisateur(Utilisateur user) du contrôleur.
Mon problème est, comment puis-je depuis le getter du mot de passe du mondel, qui je précise retourne un String, récupérer la valeur exacte du mot passe saisi par l'utilisateur dans la vue ? Faut- il créer une instance de ma vue dans le model afin de récuperer la valeur du mot de passe par la méthode getMotDePasse, ou bien est -il possible, au lieu d'appeller la vue dans mon model de l'appellé dans le contrôleur?
voici la classe Utilisateur:
 

Code :
  1. private String nom;
  2. private String mdp; /* c'est un String*/
  3. public class Utilisateur {
  4. private String mdp;
  5. public String getMdp(){
  6. return this.mdp.toString().trim(); /* retourne un string, et pourtant je voudrais pouvoir récupérer avec cette méthode la valeur du mot de passe saisi dans  la vue*/
  7. }
  8. }


 
Controleur:
 

Code :
  1. public class ServicesUtilisateur {
  2. public boolean ajouterUtilisateur(Utilisateur user) {
  3. Connection connection = DataBaseConnector.getConnection();
  4. if (connection == null) {
  5. return false;
  6. }
  7. while((user.getNom().length()!=0)&& (user.getMdp().length()!=0))
  8. {
  9. try {
  10. PreparedStatement preparedStatement = connection.prepareStatement("insert into user(NomUser,Pass,) values(?,?)" );
  11. preparedStatement.setString(1, user.getNom());
  12. preparedStatement.setString(2, user.getMdp()); /*  la valeur du mot de passe du model alors que j'aimerais pouvoir utiliser new String(mdp.getPassword)*/
  13. preparedStatement.executeUpdate();
  14. }

 
 
La vue:
 

Code :
  1. private void CmdEnregistrerActionPerformed(java.awt.event.ActionEvent evt) {
  2. try {
  3. ServicesUtilisateur servUtil =new ServicesUtilisateur();
  4.                     boolean resultat=servUtil.ajouterUtilisateur(user);
  5.                      if(resultat==true){
  6.                              JOptionPane.showMessageDialog(null, "Utilisateur Enregistré", "Succès Sauvegarde", JOptionPane.INFORMATION_MESSAGE);
  7.                      }else

Reply

Marsh Posté le 11-11-2013 à 15:45:43    

Je pense que ton probleme est encore en amont. Le probleme se trouve (probablement, si j'ai devine juste) autour du setter, pas du getter. Quand tu appelles ton user.getMdp(), c'est deja trop tard, il contient deja l'adresse au format texte, au lieu du mot de passe reel.
 
Tu peux montrer le setMdp() de ta classe Utilisateur? Mais meme lui sera correct je suppose.
 
Ce qu'il faut que tu cherches, c'est l'endroit dans ton code ou le JPasswordField de ton UI est mis en relation avec setMdp();. C'est probablement la que ca se passe. Bon si tu utilises un MVC, je suppose que cette relation est peut-etre pas dans du code Java, mais ptetre dans un fichier de config genre XML ou que sais-je, malheureusement je m'y connais tres peu en MVC.


---------------
C'était vraiment très intéressant.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed