java - 动态下载 .class 时出现 AccessControl 异常

标签 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")

我尝试了多次尝试来解决这个问题,但没有成功。

最佳答案

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

关于java - 动态下载 .class 时出现 AccessControl 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808987/

相关文章:

java - FragmentManager 的 FragmentStatePageAdapter 错误(处理 ViewPager)

java - 为什么在从 applet 使用 RMI 时会出现 AccessControlException?

rmi - RMI 和 Corba 有什么区别?

Java RMI 连接被拒绝

java - 字符串不能包含两个 '%'

java - RMI 中命名和注册表的区别

java - 在构建聊天应用程序时,Web Service 是否比 JMS、RMI 或 Socket 编程更好用?

rmi - 如果 Hessian 已死,应该用什么代替?

java - PHP 为 Java 应用程序提供下载服务

java - 如何使用 ServerSocket 通过 TCP 找出连接到服务器的客户端数量及其 IP(详细信息)?