动态下载.class时AccessControl异常

时间:2015-09-27 14:29:03

标签: java rmi

我想动态下载课程;在下面我写了相同的代码。

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 个答案:

答案 0 :(得分:1)

如果您要安装java.security.policy,则需要定义SecurityManager.文件。否则您将无法执行任何操作。请参阅Oracle RMI教程。