2010-03-07 48 views
2

全部,Java 1.5命令行密碼屏蔽

我們的服務器正在運行Java 1.5,並且我很難試圖屏蔽來自命令行的用戶輸入。我正在執行一個jar文件(java -jar my.jar),並通過printlns的命令行提示工作。我無法使用Java控制檯。

感謝

回答

1

在Unix系統上?在讀取程序之前,您可以嘗試運行帶有參數-echo的系統程序stty,然後再運行程序stty echo

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

請注意,我沒有試過這個!有些stty計劃是滿意的,有些則不是(那些沒有需要他們標準輸入來自/dev/tty工作權......)

1

這裏有一個有趣的文章:http://java.sun.com/developer/technicalArticles/Security/pwordmask/

編輯現在,我重新閱讀,我認爲他們的命令行「解決方案」是非常愚蠢的。我們的應用程序中有一個輔助程序,它可以根據操作系統(Linux,Windows等)理解如何屏蔽輸入。 Java代碼偵聽套接字上的命令,並且前端密碼閱讀器獲取密碼和其他所需的任何內容,然後將命令發送到Java代碼。

+0

是啊,我讀到了那篇文章,並沒有留下深刻的印象吧。如果沒有合適的解決方案,我將切換到通過shell腳本提示。 – XanderLynn 2010-03-07 23:21:56

2

最好的方法是使用Java 6的Console readPassword()方法。既然你提到你正在使用Java 5,那不是一個選項。很多Java 6實用程序已被移植到Java 5.我還沒有找到任何人爲此類做過。

本網站有一篇關於如何使用Java 5的好文章。http://www.devdaily.com/java/edu/pj/pj010005/。基本上他們用InputStreamReader包裝System.in並讀取一行。

+1

您鏈接到的文章(以及您提到的方法)是如何從命令行讀取,而不是如何在問題查找時屏蔽控制檯上的輸入。基於OP,我想他已經知道如何讀取STDIN的值。 – Thor84no 2013-07-19 10:49:58