2015-06-20 119 views
0

我有一个签名的Java小程序,它具有以下方法:从Java调用脚本安全签名的Java Applet问题

public Boolean SaveToFile(String text) 
{ 
File file = new File("c:\\myFile.txt"); 

// if file doesnt exists, then create it 
if (! file.exists()) 
{ 
    file.createNewFile(); 
} 

file.setReadable(true); 
file.setWritable(true); 
FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
BufferedWriter bw = new BufferedWriter(fw); 
bw.write(text); 
bw.close(); 
return true; 

}

当我打电话从applet中的按钮这个方法,它创建该文件没有任何问题。

问题是,当我从Java脚本调用这个方法,我有以下异常:

access denied (java.io.FilePermission c:\myFile.txt read) 

我怎么能解决这个例外?

+1

尝试AccessController.doPrivileged来包装你的代码(新的PrivilegedAction (){...});检查出来:http://docs.oracle.com/javase/7/docs/api/java/security/AccessController.html – Krzysiek

+0

我试过使用AccessController,但我有同样的例外\ –

+0

如果你使用maven来构建这个小程序jar,你有build/plubins/plugin {maven-jar-plugin}/configuration/archive/manifestEntries:tag all-permissions? – Krzysiek

回答

0

使用AccessController固定的问题:

public Boolean SaveToFile(String text) 
    { 
    final String textEx = text; 
    return AccessController.doPrivileged(new PrivilegedAction<Boolean>() { 

      @Override 
      public Boolean run() 
      { 

    File file = new File("c:\\myFile.txt"); 

    // if file doesnt exists, then create it 
    if (! file.exists()) 
    { 
     file.createNewFile(); 
    } 

    file.setReadable(true); 
    file.setWritable(true); 
    FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(textEx); 
    bw.close(); 
    return true; 
    } } 
});