Système Authentification en Java à l'aide d'un fichier texte

Fermé
Knowz - 25 juin 2022 à 11:53
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 26 juin 2022 à 12:31
Bonjour,

Je débute en Java et j'aimerais faire un système d'authentification en java (avec mot de passe, nom d'utilisateur) mais avec un fichier texte ou un tableur. J'ai déjà fait cela avec une base de donnée mais je veux changer. J'ai appris comment créer un fichier, le lire et écrire mais je ne sais pas comment organiser ça pour que java lise bien l'information qu'il faut dans le fichier et distingue l'authenticité du nom d'utilisateur et du mot de passe.

Merci d'avance !



Configuration: Windows / Firefox 101.0
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
25 juin 2022 à 12:12
Bonjour,

Le plus simple c'est d'utiliser un fichier .properties c'est un format standard en Java.
https://fr.m.wikipedia.org/wiki/.properties

Exemple :

credentials.properties
user=Hello
password=World

Credentials.java
Properties credentials = new Properties();
credentials.load(new FileInputStream("credentials.properties"));
String user = credentials.getProperty("user");
String password = credentials.getProperty("password");
1
Mais si je veux qu'il y ai plusieurs users, et plusieurs password, je fais comment ?
1
J'ai réussi à utiliser ce processus, mais à chaque fois que je re-créé un compte, les dernières properties s'effacent. Et je n'arrive également pas à vérifier si ce que l'user met dans la textBox est juste.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
26 juin 2022 à 12:31
Bonjour,
"Mais si je veux qu'il y ai plusieurs users, et plusieurs password, je fais comment ?
"à chaque fois que je re-créé un compte, les dernières properties s'effacent"
Un fichier de properties c'est comme une Map<String,String> donc tu mets ce que tu veux en clé et valeurs, par exemple tu peux mettre les user en clé et les password en valeur, plutôt que d'utiliser toujours la même clé pour tous les utilisateurs.

"je n'arrive également pas à vérifier si ce que l'user met dans la textBox est juste"
Il faut juste récupérer la valeur de ta TextBox et la comparer avec la valeur enregistrée dans les properties.

Exemple :
import java.io.*;
import java.util.Properties;

public class UserCredentials {
    private final File credentialsFile;
    private final Properties properties;

    public UserCredentials(File credentialsFile) {
        this.credentialsFile = credentialsFile;
        properties = new Properties();
        if (credentialsFile.exists()) {
            readCredentialsFile();
        } else {
            writeCredentialsFile();
        }
    }

    private void readCredentialsFile(){
        try {
            properties.load(new FileInputStream(credentialsFile));
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    private void writeCredentialsFile(){
        try {
            properties.store(new FileOutputStream(credentialsFile), null);
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    public boolean userExists(String user) {
        return properties.containsKey(user);
    }

    public void setUserPassword(String user, String password) {
        properties.setProperty(user, hashPassword(user, password));
        writeCredentialsFile();
    }

    public boolean isUserPassword(String user, String password) {
        return hashPassword(user, password).equals(properties.getProperty(user));
    }

    public void deleteUser(String user) {
        properties.remove(user);
        writeCredentialsFile();
    }

    /**
     * TODO Ajouter une fonction de hachage pour ne pas enregistrer le password en clair dans le fichier
     * TODO Utiliser le user pour ajouter du salage au mot de passe
     */
    private String hashPassword(String user, String password) {
        return password;
    }
}
public static void main(String[] args) {
    UserCredentials userCredentials = new UserCredentials(new File("C:/userCredentials.properties"));

    System.out.println(userCredentials.userExists("KX"));  // false
    userCredentials.setUserPassword("KX", "helloWorld");
    System.out.println(userCredentials.userExists("KX")); // true
    System.out.println(userCredentials.isUserPassword("KX", "bonjour")); // false
    System.out.println(userCredentials.isUserPassword("KX", "helloWorld")); // true
    userCredentials.deleteUser("KX");
    System.out.println(userCredentials.userExists("KX"));  // false

    userCredentials.setUserPassword("toto", "passwordToto");
    userCredentials.setUserPassword("tata", "passwordTata");
    userCredentials.setUserPassword("titi", "passwordTiti");
}
0