2010-03-07 3 views
2

Tous,Java 1.5 ligne de commande Mot de passe Masking

Notre serveur est en cours d'exécution Java 1.5 et j'ai du mal à essayer de masquer l'entrée d'utilisateur à partir de la ligne de commande. J'exécute un fichier jar (java -jar my.jar) et je travaille via les invites de ligne de commande via printlns. Je ne peux pas utiliser Java Console.

Merci

Répondre

1

Sur un système Unix? Vous pouvez essayer d'exécuter le programme système stty avec l'argument -echo avant de lire le programme et le programme stty echo par la suite.

ProcessBuilder pb = new ProcessBuilder("stty", "-echo"); 
pb.start().waitFor(); 
// Read the password here 
pb = new ProcessBuilder("stty", "echo"); 
pb.start().waitFor(); 

Notez que je n'ai pas essayé ceci! Certains stty programmes sont heureux avec elle et certains ne sont pas (ceux qui ne sont pas besoin de leur stdin venir de /dev/tty travailler à droite ...)

1

Voici un article intéressant: http://java.sun.com/developer/technicalArticles/Security/pwordmask/

modifier maintenant que je relis, je pense que leur ligne de commande « solution » est vraiment stupide. Ce que nous avons dans notre application est un programme auxiliaire pour cela, qui comprend comment masquer les entrées en fonction de l'OS (Linux, Windows, etc.). Le code Java écoute les commandes sur un socket, et le lecteur de mot de passe frontal obtient le mot de passe et tout ce qui est nécessaire, puis envoie des commandes au code Java.

+0

Oui je lis cet article et n'a pas été impressionné. Je vais passer à l'invite via un script shell s'il n'y a pas une solution décente. – XanderLynn

2

La meilleure approche serait d'utiliser la méthode Console readPassword() de Java 6. Puisque vous avez mentionné que vous utilisez Java 5, ce n'est pas une option. Un grand nombre d'utilitaires Java 6 ont été rétroportés sur Java 5. Je n'ai cependant trouvé personne qui l'ait fait pour cette classe.

Ce site a un bon article sur la façon de le faire en utilisant Java 5. http://www.devdaily.com/java/edu/pj/pj010005/. Fondamentalement, ils enveloppent System.in avec un InputStreamReader et lire une ligne.

+1

L'article que vous liez (et l'approche que vous mentionnez) est comment lire à partir d'une ligne de commande, pas comment masquer l'entrée sur la console comme la question le cherche. Basé sur l'OP, j'imagine qu'il sait déjà lire les valeurs de STDIN. – Thor84no

Questions connexes