2015-06-20 122 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; 
    } } 
});