2011-09-05 80 views
1

Im新的Jruby和我需要一些幫助這個代碼。我知道我做錯了。我真的需要幫助如何得到這個權利。JRuby使用Java系統.console

我在做什麼?在JRuby中屏蔽用戶密碼輸入。 計劃:使用java的System.console來完成它。

代碼:

require "rubygems" 
require "java" 

include_class 'java.io.PrintStream' 
include_class 'java.io.ByteArrayOutputStream' 
include_class 'java.lang.System' 
include_class 'java.io.Console' 



Console console = System.console(); 
String password = console.readPassword("Enter password: "); 

puts password 

請幫助。謝謝

回答

0

試試這個,

console = System.console(); 
String password = console.readPassword("Enter password: "); 

puts password 
1

它需要從char[]轉換回一個String對象,這樣的事情:

require "java" 

include_class 'java.lang.System' 
include_class 'java.io.Console' 

console = System.console(); 
password = console.readPassword("Enter password: "); 

passwordString = java.lang.String.new(password) 

printf("%s\n", passwordString) 
1

您需要閱讀密碼爲char[],將其轉換爲java.lang.String,然後將其轉換爲Ruby String

require 'java' 
include_class 'java.lang.System' 
include_class 'java.io.Console' 

# Read the password into a char[] 
java_char_array = System.console.readPassword("password:") 

# Turn that into a java.lang.String 
java_string = java.lang.String.new(java_char_array) 

# Turn this into a Ruby string and strip off the newline. 
password = java_string.to_s.strip 

read_password給你帶回char[]的原因有點複雜,但它歸結爲一首關於安全的大歌和舞曲。您可以使用Array.fill來加密char[]的內容,從而避免密碼長時間在內存中駐留。