【问题标题】:JRuby to use Java system.consoleJRuby 使用 Java system.console
【发布时间】:2011-11-10 10:24:33
【问题描述】:

我是 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

请帮忙。谢谢

【问题讨论】:

    标签: console passwords jruby


    【解决方案1】:

    它需要从char[] 转换回字符串对象,如下所示:

    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 )
    

    【讨论】:

      【解决方案2】:

      您需要将密码读入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[] 的内容,从而防止密码长时间留在内存中。

      【讨论】:

        【解决方案3】:

        试试这个,

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

        【讨论】:

          猜你喜欢
          • 2023-01-29
          • 2015-09-07
          • 2011-08-16
          • 1970-01-01
          • 1970-01-01
          • 2015-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多