【问题标题】:java RMI grant class download from remote machine从远程机器下载java RMI授权类
【发布时间】:2015-08-10 20:56:03
【问题描述】:

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

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 时,如果 SimpleTask 仅位于客户端的计算机上,则由于权限被拒绝,我有一个 classNotFound 异常。


【问题讨论】:

  • 发布堆栈跟踪,并明确哪个主机得到了异常。服务器是否可以访问file:///home/pc/public/-
  • 客户端显示异常,但它来自服务器。如何验证服务器可以访问路径?

标签: java classloader rmi classnotfoundexception


【解决方案1】:

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

【讨论】:

  • 即使我的客户端没有安装 ftp 或 http 服务器?
猜你喜欢
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多