1

皆さん、私はRoR内でjarファイルを実行しようとしています。SOのおかげで、IO::popen呼び出しを使用してjarファイルを実行することができました。

要件:-サイトにログインするには:当社の従業員にログインさせるため。そのJavaライブラリは、ユーザー名/パスワードが有効である場合にいくつかの魔法と数字を実行します。私が使ったのは、

result = IO::popen("java -cp auth.jar com.name.auth.LDAPLookup " + params[:username] + " " + params[:password]).read
p result

出力:["Authorized"、 "email"、 "id"]

  • 入力サニタイズは行われません。これは危険です。誰でもユーザー名/パスワードに何かを入力することができ、それはサーバーで実行されます。

これを行う方法がわかりません。私が試したいオプションの1つは、fork()またはProcess APIを使用して「java」を起動し、引数を渡すことです。しかし、理解できませんでした。他に何か考えはありますか?

4

1 に答える 1

2

あなたが言及した問題は別として、これはパフォーマンスの点でかなり苦痛に聞こえます(結局のところ、すべての要求でJVMが起動するのを待っています)。

2つの解決策が私に飛び出します:

  • ライブラリが何をしているのかを見て、本当にこれをJavaに呼び出す必要があるかどうかを確認してください。特に、固定されたパラメータのセットを使用してLDAPディレクトリを検索するだけの問題である場合は、そのための宝石がたくさんあります。

  • RubyのJavaクラスを使用する必要がある場合は、 JRubyの使用を強く検討してください。これにより、呼び出しごとにJVMを再起動するオーバーヘッドも、正しくエスケープしようとするリスクもなしに、問題のJavaクラスを直接呼び出すことができます。 Rubyからシェル、JVM、そしてその逆への引数。

于 2013-01-23T16:13:10.880 に答える