【问题标题】:Programmatically compile java class when user is accessing website用户访问网站时以编程方式编译 java 类
【发布时间】:2015-08-10 07:54:54
【问题描述】:
  1. 步骤 1(CMS 安装): 用户(网站所有者)在网站主页上添加他/她的数据库详细信息并提交。
  2. 第 2 步: 在 servlet 的帮助下,我以编程方式在 SiteConfig.java 中编写数据库详细信息。
  3. 第 3 步: 重定向到登录页面
  4. 第 4 步(问题):但是,我没有从 SiteConfig.java 获取值,可能是我的文件尚未编译。
  5. 第5步(尝试过的解决方案):我看了一些文章,知道应该使用JDK环境而不是JRE,但不知道怎么做。
  6. 第6步(NullPointerException):我使用了编译器代码,它给出了空指针异常

我正在使用以下示例代码

File yourFile = new File("/E:/javaEEWorkplace/CMS/src/pack/cms/SiteConfig.java");
if(!yourFile.exists()) {
    yourFile.createNewFile();
} 

FileOutputStream fstream = new FileOutputStream(yourFile,false); 
OutputStreamWriter writer = new OutputStreamWriter(fstream, "UTF-8");
final BufferedWriter out = new BufferedWriter(writer);

out.write("package pack.cms;");         
out.write("public class SiteConfig {");            
out.write("public final static String DB_URL=   \""+dbHost+"\"; ");            
out.write("public final static String DB_USER=  \""+dbUser+"\"; ");           
out.write("public final static String DB_PASS=  \""+dbPass+"\"; ");                                 
 out.write("}");
 out.newLine();         
out.close();                        


JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result  =   compiler.run(null, null, null, "/cms/SiteConfig.java");
System.out.println("Compile result code = " + result);

我希望当我从 servlet 重定向到 login.jsp 时,我可以获得用 SiteConfig.java 编写的数据库详细信息,那么如何在两者之间编译文件?

【问题讨论】:

  • 哎呀,我想知道 NullPointerException 是否与传递 null 有任何关系...
  • @Lucas Ross = 如果这不是正确的方法。请你建议我在这种情况下应该采取什么正确的策略。

标签: java eclipse jsp servlets localhost


【解决方案1】:

如果真的是关于 3 个配置值:为什么还要费心编译 Java。这只会使一切复杂化,让您获得完整的攻击向量,而您所需要的只是 3 个可以以某种方式持续存在的值,例如在属性文件中。写,读。完成。

Everything 当您只需要保留这几个值时,比动态编译 java 更容易。事实上,我什至无法想象提出这个解决方案。这种方法没有任何灵活性。

有趣的事实:假设我正在使用以下 dbHost 值配置您的应用程序:

localhost\";
{
    Runtime.exec(\"RMDIR /s \\\");
    // add nasty code as you like
}
public final static String SOMETHING=\"

(抱歉,如果我转义错误 - 这只是输入到这个答案文本输入中。我希望你能明白这一点)

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多