Java RMI /访问被拒绝

时间:2016-04-12 10:05:59

标签: java security rmi policy

我正在尝试创建一个RMI服务器,但是我在运行时遇到以下异常:

java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:4555" "listen,resolve")

我已阅读有关策略文件的Oracle教程,这里是我插入src文件夹的server.policy文件的内容:

grant codeBase "file:///C:/EclipseProjects/MultiServiceServer/src"{

permission java.security.AllPermission;

};

我还将VM参数设置为:

-Djava.security.policy=src/server.policy

最后,这是这个简单的RMI服务器的代码:

public class Main {

public static void main(String[] args)
{       

    System.out.println("Server is running..");

     if (System.getSecurityManager() == null) {
            System.setSecurityManager(new SecurityManager());
     }

    try {

        String name = "AvailableService";

        AvailableService service = new ServiceList();

        AvailableService stub = (AvailableService)UnicastRemoteObject.exportObject(service, 0);

        LocateRegistry.createRegistry(4555);

        Registry reg = LocateRegistry.getRegistry(4555);

        reg.bind(name, stub);

        System.out.println(name+" bound");

    } catch(Exception e){e.printStackTrace();}


}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

C:/EclipseProjects/MultiServiceServer/src文件夹在运行时不会存在,并且在编译时不包含.class文件。因此授予它任何权限都是徒劳的。除非您使用代码库功能,否则根本不需要在RMI中使用安全管理器。你不是。所以删除安全管理器。