2015-09-27 20 views
0

我想動態下載類;下面我寫了相同的代碼。AccessControl異常動態下載.class

public class ClientProg { 
    public static void main(String[] args) throws ClassNotFoundException, MalformedURLException { 

    String serverName = "localhost"; 
    int port = Integer.parseInt("3000"); 
    SerialObj so = null; 

    SecurityManager securityManager = null; 
    securityManager = System.getSecurityManager(); 

    if(securityManager == null) { 
     System.setSecurityManager(new SecurityManager()); 
    } 

    RMIClassLoader.loadClass("http://localhost:80", "SerialObj.class"); 
      try 
      { 
      Socket client = new Socket(serverName, port); 

      ObjectInputStream ois = new ObjectInputStream(client.getInputStream()); 

      so = (SerialObj) ois.readObject(); 
      System.out.println("read object is : " + so.getId() + ", " + so.getName()); 
      client.close(); 
      } catch(IOException e) 
      { 
      e.printStackTrace(); 
      } 
     }  
} 

基本上我嘗試使用RMIClassLoader獲得類,類位於http服務器中的位置,可以訪問。

以下是安全權限我已授予:

grant { 
    permission java.security.AllPermission; 
}; 

當我運行這個程序,我得到下面的異常(不顯示完整的堆棧)。

access: access denied ("java.net.SocketPermission" "localhost:80" "connect,resolve") 

,這也堆輸出:

Caused by: java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:80" "connect,resolve") 

我想試用數量到過去,這,沒有成功。

回答

1

如果您要安裝SecurityManager.,您需要定義一個java.security.policy文件,否則您將無法執行任何操作。請參閱Oracle RMI教程。

+0

我已經定義了策略文件,不知道其中指定的權限是否足夠? – CuriousMind

+0

你已經寫了一個,但是你沒有定義它到達JVM的位置。 – EJP