我想知道是否有可能将Java代码发送到servlet将要执行的servlet?执行存储在字符串中的Java代码
例如,我会发送一大块代码String
,这将被添加和执行。任何人都可以想出一种方法来解决这个问题吗?
我想知道是否有可能将Java代码发送到servlet将要执行的servlet?执行存储在字符串中的Java代码
例如,我会发送一大块代码String
,这将被添加和执行。任何人都可以想出一种方法来解决这个问题吗?
这当然是可能的 - 你可以发送编译的字节码Base64编码,然后解码它在servlet和使用类加载器加载它。
或者您可以发送类似编码的jar文件,将其保存到磁盘并将其添加到自定义URLClassLoader。
但是,如果代码不可信,您可能会遇到重大安全问题。
见What are the security risks I should guard against when running user-supplied Java code?
来自JDK的tools.jar包含用于编译Java代码(由Ant等使用)的类,如果需要,还可以使用Eclipse编译器。这是可能的,但从安全的角度来看(代码注入等),这将是灾难;)
*但从安全的角度来看(代码注入等),这将是灾难*;那为什么要提到它呢? – 2012-08-22 14:45:37
因为相信自由选择;) – 2012-08-22 17:45:48
相关:http://stackoverflow.com/questions/2946338/how-do-i-programmatically-compile-and-instantiate-a-java-class/2946402#2946402 – BalusC 2012-02-21 20:51:48
你能解释一下你的用例更详细,特别是你为什么要在运行时执行'String'? (这是一个非常严重的代码味道...) – 2012-02-21 21:47:38