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

RMI服务器java.security。AccessControlException:访问被拒绝

龙俭
2023-03-14

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

import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;


public class MyServer extends UnicastRemoteObject implements Interface {

    private static final int PORT = 2019;

    public MyServer() throws Exception {
        super(PORT, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
    }

    public static void main(String args[]) {


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

        try {

            Registry registry = LocateRegistry.createRegistry(PORT, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());

            MyServer obj = new MyServer();


            registry.bind("HelloServer", obj);

        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

    @Override
    public void sayHello() throws RemoteException {
        System.out.println("Hello");
    }
}

--

access denied ("java.net.SocketPermission" "localhost:2019" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:2019" "listen,resolve")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkListen(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at javax.rmi.ssl.SslRMIServerSocketFactory$1.<init>(Unknown Source)
    at javax.rmi.ssl.SslRMIServerSocketFactory.createServerSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.listen(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.exportObject(Unknown Source)
    at sun.rmi.transport.tcp.TCPEndpoint.exportObject(Unknown Source)
    at sun.rmi.transport.LiveRef.exportObject(Unknown Source)
    at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source)
    at sun.rmi.registry.RegistryImpl.setup(Unknown Source)
    at sun.rmi.registry.RegistryImpl.<init>(Unknown Source)
    at sun.rmi.registry.RegistryImpl.<init>(Unknown Source)
    at java.rmi.registry.LocateRegistry.createRegistry(Unknown Source)
    at MyServer.main(MyServer.java:27)

共有1个答案

司寇照
2023-03-14

这很简单。

access denied ("java.net.SocketPermission" "localhost:2019" "listen,resolve")

意味着策略文件必须授予权限

java.net.SocketPermission "localhost:2019", "listen,resolve"

或者任何正确的语法。使用策略工具来做对。您可能想要通配符端口号。您必须通过java.security.policy系统属性指定策略文件的位置。当您得到其他权限改造异常时,就像在测试中一样,您必须同样添加相应的权限,直到关闭。

但是我更想知道为什么要使用安全管理器。除非你要使用代码库功能,否则它是不必要的,这是相当罕见的。在服务器中也没有必要,除非你要使用代码库功能从客户端上传类,这是非常罕见的。

 类似资料:
  • 问题内容: 嘿,尝试启动正在编写的RMI应用程序时出现提示,我无法弄清楚为什么在默认端口1099或其他动态端口(当前是我的策略文件)上打开此异常时会出现此异常的原因授予所有权限(应用完成后会更改)。 我被困在哪里出了问题,任何帮助都会很有用 我的密码 } 堆栈跟踪 有效端口 65000 我的政策文件 问题答案: 基本上,我很愚蠢,我认为因为Java并不抱怨它找不到.policy文件AOK,所以事实

  • 我正在用Java RMI编写一个客户机-服务器程序,但遇到了一个错误: java.security.访问控制异常:拒绝访问(java.net.SocketPersion127.0.0.1:1099连接,解析) 我的代码如下: 怎么了?

  • 我通过互联网获得了这个源代码,用于我的学术作业目的。它只是JavaRMI的一个实用程序。在这里,我发布了我的服务器文件的代码。 我的策略文件(Policy.Policy)包括 现在我陷入了: C:/ 主要异常:java.security。AccessControlException:拒绝访问(java.net.SocketPermission 127.0.0.1:1099 connect,reso

  • 授予codeBase“file:/home/rozerin/ideaprojects/computetest/src/main/java/”{permission java.security.allpermission;}; 堆栈跟踪是; ComputeEngine异常:java.security.AccessControllException:在java.security.AccessContr

  • 我已经创建了谷歌应用程序引擎项目,使用预测Api 1.5v。当我在本地均值localhost:8888使用谷歌o2Auth身份验证与客户端ID和客户端运行时,它对我来说工作正常secret.but当我实时运行它时,它会给出一个错误 Java语言安全AccessControlException:访问被拒绝(“java.io.FilePermission”“/base/data/home/apps/s