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

输出:[“授权”,“电子邮件”,“身份证”]

  • 没有进行输入清理。这是有风险的。任何人都可以在用户名/密码中输入一些内容,并将在服务器中执行。

我不知道该怎么做。我想尝试的一种选择是使用 fork() 或 Process API 来启动“java”并传递参数。然而想不通。还有其他想法吗?

4

1 回答 1

2

除了您提到的问题之外,这在性能方面听起来非常痛苦(毕竟,您正在等待 JVM 启动每个请求)。

两个解决方案突然出现在我身上:

  • 看看这个库做了什么,看看你是否真的需要为此调用 Java;特别是,如果只是使用一组固定参数在 LDAP 目录中进行查找的问题,那么有很多宝石可以做到这一点

  • 如果你必须使用 Ruby 中的 Java 类,强烈考虑使用JRuby,它可以让你直接调用有问题的 Java 类,既没有每次调用时重新启动 JVM 的开销,也没有尝试正确逃避的风险您的参数从 Ruby 到 shell 到 JVM,然后返回。

于 2013-01-23T16:13:10.880 回答