2009-06-08 26 views
1

以下小程序被編譯並打包到jar中,然後使用自簽名的cert簽名。從已簽名的小程序中列出本地目錄

import java.applet.Applet; 
import java.io.File; 
import java.security.AccessController; 
import java.security.PrivilegedAction; 
import java.security.PrivilegedActionException; 

public class Test extends Applet { 
     private static final long serialVersionUID = -3127185193501384816L; 

     private final class DirectoryLister implements PrivilegedAction<File[]> { 
       private final String attachmentsFolder; 

       private DirectoryLister(String attachmentsFolder) { 
         this.attachmentsFolder = attachmentsFolder; 
       } 

       public File[] run() { 
         return new File(attachmentsFolder).listFiles(); 
       } 
     } 

     public File[] getFiles() throws PrivilegedActionException { 
       String attachmentsFolder = getParameter("attachmentsFolder"); 

       if (attachmentsFolder != null) { 
         return AccessController.doPrivileged(new DirectoryLister(
             attachmentsFolder)); 
       } 

       return null; 
     } 
} 

小程序被實例如下:

<applet id="applet" 
    code="Test" 
    archive="applet.jar"> 
    <param name="attachmentsFolder" 
     value="c:/test" /> 
</applet> 

小程序的使用如下:

var files = applet.getFiles(); 

for (var file in files) { 
    // Do something to file. 
} 

的FF。遇到錯誤:

java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException 
     at java.security.AccessController.doPrivileged(Native Method) 
     at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source) 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at sun.plugin.javascript.JSInvoke.invoke(Unknown Source) 
     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source) 
     at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(Unknown Source) 
     ... 4 more 
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission c:\test read) 
     at java.security.AccessControlContext.checkPermission(Unknown Source) 
     at java.security.AccessController.checkPermission(Unknown Source) 
     at java.lang.SecurityManager.checkPermission(Unknown Source) 
     at java.lang.SecurityManager.checkRead(Unknown Source) 
     at java.io.File.list(Unknown Source) 
     at java.io.File.listFiles(Unknown Source) 
     at Test$DirectoryLister.run(Test.java:20) 
     at Test$DirectoryLister.run(Test.java:1) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at Test.getFiles(Test.java:28) 
     ... 14 more 

這使我問我是否還需要明確授予燙髮在配置文件中的一個在Java主目錄下讀取C:/測試?如果是這樣,任何人都可以指導我如何做到這一點的指導?

回答

0

緩存問題顯然。清除所有緩存並重新構建/重新部署解決了這個問題。即,不需要額外的燙髮設置。