Ich benutze JRuby 9.0.5.0, um Ruby-Skripte von Java aufrufen zu können. Ich würde gerne ein Char-Array mit einem Passwort an ein Ruby-Skript übergeben, aber anscheinend mache ich etwas falsch, da mein Skript nur funktioniert, wenn ich eine normale Zeichenfolge verwende.Wie kann ich ein Java-Char-Array als Parameter an ein Ruby-Skript über JRuby übergeben?
script.rb
enthält die folgende Funktion:
def action(user, password)
Von Java, ich kann in der Regel diese Funktion aufrufen, aber ich habe nur das das erwartete Ergebnis (dh keine Ausnahme), wenn password
ist ein String
:
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine jruby = m.getEngineByName("jruby");
...
jruby.put("user", "TestUser");
jruby.put("password", "xyz!"); // I'd like to pass "xyz!" as a char array.
// Call the script. Works as expected because password is a String.
String result = (String)jruby.eval("action($user, $password)");
Mein erster Versuch war zu versuchen, das Passwort wie folgt weitergeben müssen:
char[] password = { 'x', 'y', 'z', '!' };
jruby.put("password", password);
...
aber dies führte zur Ausnahme
NoMethodError: undefined method `encoding' for char[x, y, z, !]@30abf79c:# encode_utf16le at .../jruby-9.0.5.0/lib/ruby/gems/shared/gems/rubyntlm-0.6.0/lib/net/ntlm/encode_util.rb:42
ich den gleichen Fehler, wenn ich versuche, das Passwort zu setzen explizit in den script.rb
selbst wie diese, nur zum Testen:
pwd = ['x', 'y', 'z', '!'].to_s
# use pwd inside the script ...
Als nächstes I versucht UTF-8-Kodierung so zu erzwingen:
pwd = ['x', 'y', 'z', '!'].to_s
pwd = pwd.force_encoding("UTF-8")
# use pwd inside the script ...
, die aus dem Edelstein im Inneren der scri verwendet Ursprung in einem anderen Fehler resultierte pt, d.h. ein Autorisierungsfehler. Das Gleiche passiert, wenn ich "UTF-16" verwende.
Könnte es sein, dass das Ruby-Juwel, das vom Skript selbst verwendet wird, d. H. Der interne Funktionsaufruf unter Verwendung des Passworts, nur mit Strings einer bestimmten Kodierung funktioniert? Oder mache ich etwas anderes falsch? Ich weiß kaum etwas über Ruby und versuche es einfach zusammen zu kleben.
Danke, aber ich versuche, das Gegenteil zu erreichen, das heißt konvertieren Java char [] in einen Ruby-String. – w128
... und was ist falsch mit der Standard Java String API dafür? – kares
Wenn Sie sich auf den String-Typ von Java beziehen, liegt es daran, dass es wegen seiner Unveränderbarkeit und anderen Gründen schlecht ist, ihn für Passwörter und ähnliche sensible Daten zu verwenden. Siehe http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords-in-java – w128