JRuby для использования Java system.console - PullRequest
1 голос
/ 05 сентября 2011

Я новичок в Jruby, и мне нужна помощь с этим кодом.Я знаю, что я делаю это неправильно.Мне действительно нужна помощь, чтобы понять, как это правильно.

Что я делаю?Маска ввода пароля пользователя в 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

Пожалуйста, помогитеСпасибо

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

необходимо преобразовать из 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 голос
/ 14 ноября 2011

Вам нужно прочитать пароль в 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[] и, таким образом, не дать паролю долго оставаться в памяти.

0 голосов
/ 05 сентября 2011

Попробуйте,

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

puts password
...