从远程机器下载Java RMI授权类

时间:2015-05-28 11:16:58

标签: java classloader rmi classnotfoundexception

我试图运行一个应用程序,其中服务器可以执行从客户端加载的任务。

interface TaskExecuter extends Remote
    <T> T executeTask(Task<T> t);

interface Task<T> 
    T execute();

从客户端和服务器都知道这个接口。在服务器端,我也有类

class TaskExecuterImpl implements TaskExecuter

位于Tomcat的webapps目录中,服务器代码库引用此位置。

在客户端,我有班级

class SimpleTask implements Task<Integer>, Serializable

位于/ home / pc / public /

客户端代码库是:-Djava.rmi.server.codebase = file:/// home / pc / public / - client.policy是:

grant {
    permission java.net.SocketPermission
        "*:0-65535","read,accept,connect,resolve";
    permission java.io.FilePermission 
        "/home/pc/public/","read";
    permission java.security.AllPermission;     
};

客户端和服务器位于不同的计算机上。如果我在服务器上复制SimpleTask,一切都能正常工作,但是当ClassLoader尝试下载SimpleTask时,由于拒绝权限,我有一个classNotFound异常,如果它应该,SimpleTask只位于客户机上。

1 个答案:

答案 0 :(得分:0)

您的file:///...代码库网址几乎肯定只对客户有意义。服务器(在这种情况下)必须使用代码库,因此必须将代码库设置为服务器将理解的内容。 file:网址不符合条件,除非它们引用共享驱动器,除非它们引用服务器的共享驱动器视图。使用FTP:http: