JRuby使用Java system.console

时间:2011-09-05 07:44:02

标签: console passwords jruby

我是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 个答案:

答案 0 :(得分: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 :(得分: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[]的内容,从而防止密码在内存中长时间停留。

答案 2 :(得分:0)

试试这个,

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

puts password