我想知道是否有可能將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