当前位置: 首页 > 知识库问答 >
问题:

rmi服务器引发AccessControlException

杨骁
2023-03-14
package client;

/**
 * Created by rozerin on 08.03.2016.
 */
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.math.BigDecimal;
import compute.Compute;

public class ComputePi {
 public static void main(String args[]) {
    if (System.getSecurityManager() == null) {
        System.setSecurityManager(new SecurityManager());
    }
    try {
        String name = "Compute";
        Registry registry = LocateRegistry.getRegistry(args[0]);
        Compute comp = (Compute) registry.lookup(name);
        Pi task = new Pi(Integer.parseInt(args[1]));
        BigDecimal pi = comp.executeTask(task);
        System.out.println(pi);
    } catch (Exception e) {
        System.err.println("ComputePi exception:");
        e.printStackTrace();
    }
  }
}
package engine;

/**
 * Created by rozerin on 08.03.2016.
 */
 import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import compute.Compute;
import compute.Task;

public class ComputeEngine implements Compute {

    public ComputeEngine() {
    super();
    }

    public <T> T executeTask(Task<T> t) {
    return t.execute();
    }

    public static void main(String[] args) {
    if (System.getSecurityManager() == null) {
        System.setSecurityManager(new SecurityManager());
    }
      try {
        String name = "Compute";
        Compute engine = new ComputeEngine();
        Compute stub =
                (Compute) UnicastRemoteObject.exportObject(engine, 0);
        Registry registry = LocateRegistry.getRegistry();
        registry.rebind(name, stub);
        System.out.println("ComputeEngine bound");
    } catch (Exception e) {
        System.err.println("ComputeEngine exception:");
        e.printStackTrace();
    }
 }
}

授予codeBase“file:/home/rozerin/ideaprojects/computetest/src/main/java/”{permission java.security.allpermission;};

堆栈跟踪是;

ComputeEngine异常:java.security.AccessControllException:在java.security.AccessController.CheckPermission(AccessController.java:474)在java.security.AccessController.CheckPermission(AccessController.java:685)在java.lang.SecurityManager.CheckPermission(SecurityManager.java:549)在java.lang.SecurityManager.CheckConnect(socket.java:425)在java.net.socket.(socket.java:208)在sun.rmi.transport.proxy.rmiDirectsocketfactory.createsocket(rmiDirectsocketfactory.java:40)在sun.rmi.transport.proxy.rmimastersocketfactory.java:147)在sun.rmi.transport.tcp.tcpendpoint.newsocket(tcpendpoint.java:613)在TCPChannel.NewConnection(TCPChannel.java:202)在sun.rmi.server.unicastref.newcall(unicastref.java:341)在sun.rmi.registry.registryimpl_stub.rebind(来源未知)在engine.computeengine.main(computeengine.java:33)

“at engine.computeengine.main(computeengine.java:33)”是它使用服务器类的rebind方法的地方。

界面在我分享的网站里,我不想让这个地方太拥挤。任何帮助都将不胜感激。谢了!

共有1个答案

艾令雪
2023-03-14

对于服务器端和客户端,都应该使用以下内容:

System.setProperty("java.security.policy", "path_to_your_Security_policy_file_located_in_file_system");
System.setSecurityManager(new RMISecurityManager());

安全策略文件应包含

 grant {
    permission java.security.AllPermission;
    };

我想这也许能帮到你。

 类似资料:
  • 我在客户端wnat纯java RMI,因为我需要能够重新启动服务器端。

  • 问题内容: 我正在尝试运行将类绑定到命名服务器的Java应用程序,但是我不断收到ClassNotFoundException 首先,我启动注册表: 然后从Eclipse我尝试执行服务器,但出现此错误 我已经阅读了RMI Java教程,但仍然无法正常工作… 作为虚拟机参数,我已经设置了: -Djava.rmi.server.codebase = file:$ {workspace_loc} / pr

  • 我们目前有一个服务器,它为他获得的每个请求创建一个新线程,因此基本上服务器获得他以后需要保存的数据。 现在,我们得到了实现RMI的请求,在这里我们可以观察当前保存的数据类型。 我怎样才能以最好的方式处理这个问题?我应该为每个线程创建一个RMI服务器吗?我可以在同一地址上拥有同一服务的多个实例,并让我的观察者注册到所有实例吗? 我正在使用RMI访问的谷歌示例:https://sites.google

  • 问题内容: 我正在学习Java RMI,并且创建了一个非常简单的服务器来计算斐波那契数。服务器(FibonacciServer)创建一个负责计算序列的对象(Fibonacci),并且该对象实现接口(IFibonacci): FibonacciServer.java: 斐波那契 IFibonacci: 如您所见,这是一个非常基本的示例。我正在使用命令在Linux上启动RMI注册表,它启动没有问题。

  • 我正在构建一个RMI应用程序,我有以下服务器类。然而,当我在eclipse中运行它时,我得到了以下异常。出了什么问题,我该如何解决?我花了两天时间在网上阅读类似的问题,但我找不到解决方法。我怀疑这与策略文件有关,但我不知道如何使用。另外,如果问题出在我的运行方式上,你能告诉我在eclipse中如何操作吗。 --

  • [dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的servlet.service()引发异常[请求处理失败;] 对此有什么意见吗?