2010-09-24 5 views

Répondre

45

Le Preferences API est un bon moyen de stocker les préférences utilisateur et système. Si vous voulez stocker des mots de passe, vous devrez les chiffrer. Voici un bon article qui peut vous aider à démarrer.

Encrypted Preferences in Java

+14

Où allons-nous stocker la clé requise? –

+5

Nice introduction tutoriel ici: http://www.mkyong.com/java/java-properties-file-examples/ –

+0

Je tiens à noter que sur Windows, vous devrez peut-être changer le registre si vous utilisez les préférences. Pour un utilisateur normal de votre application, cela peut être un bloqueur (non-go!). –

25

je stocke habituellement dans le répertoire de données utilisateur, avec des sous-répertoires de nom de l'application suivie par la version de l'application.

public static String getUserDataDirectory() { 
    return System.getProperty("user.home") + File.separator + ".jstock" + File.separator + getApplicationVersionString() + File.separator; 
} 

J'avais utilisé le code suivant pendant 3 ans. Cette méthode fonctionne plutôt bien sous Windows, Linux ou Mac.

Veuillez noter que, dans Windows, ne le stockez jamais en Program Files, car l'UAC sous Windows Vista ou plus récent peut vous causer beaucoup de problèmes. N'oubliez pas de mettre un point devant le nom de votre application, afin qu'il devienne un dossier caché sous Linux.

Bonne chose en utilisant cette méthode est que, vous ne vous limitez pas à stocker la valeur primitive seulement. Au lieu de cela, vous pouvez enregistrer l'état objet entier sur le disque en utilisant xstream

Par exemple:

public static boolean toXML(Object object, File file) { 
    XStream xStream = new XStream(); 
    OutputStream outputStream = null; 
    Writer writer = null; 

    try { 
     outputStream = new FileOutputStream(file); 
     writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8")); 
     xStream.toXML(object, writer); 
    } 
    catch (Exception exp) { 
     log.error(null, exp); 
     return false; 
    } 
    finally { 
     close(writer); 
     close(outputStream); 
    } 

    return true; 
} 
+0

Mais est-ce sécurisé? Conservez-vous des mots de passe en texte clair? – djna

+1

Il y a une raison pour stocker les mots de passe en texte clair, par opposition à simplement les obscurcir - l'obfuscation donne un faux sentiment de sécurité. Voir par exemple http://developer.pidgin.im/wiki/PlainTextPasswords – gustafc

+0

Avant de stocker un mot de passe, j'utiliserai http://www.jasypt.org/ pour effectuer le cryptage. Actuellement, je code dur ma clé de chiffrement dans mon application. J'ai une fois pensé à laisser l'utilisateur spécifique à la clé. Toutefois, cela peut empêcher l'utilisateur moyen d'utiliser mon application, car il est difficile d'expliquer la clé. Par conséquent, j'abandonne l'idée. Jusqu'à présent, je ne reçois aucune plainte pour des raisons de sécurité. –

13

Enregistrement d'un seul mot de passe en toute sécurité est assez difficile. Supposons que vous cryptiez le mot de passe en utilisant une clé secrète. Puis, quand votre application recommence, elle a besoin de cette clé secrète, d'où vient-elle?

S'il demande à l'utilisateur, il peut aussi bien entrer le mot de passe ftp que vous avez stocké en premier lieu. S'il lit la clé secrète quelque part alors vous devez sécuriser la clé secrète, et nous sommes de retour là où nous avons commencé. Si vous conservez plusieurs mots de passe, demander à l'utilisateur un mot de passe unique pour un "coffre-fort" peut être beaucoup plus convivial, mais vous devrez alors gérer tous les mots de passe expirés.

Il existe des produits disponibles pour traiter ce genre de choses, si vous avez un besoin sérieux, alors vous avez probablement besoin de les étudier.

Questions connexes