gpt4 book ai didi

Java RMI - 访问不同机器上的 RMI 注册表对象 - AccessControlException?

转载 作者:行者123 更新时间:2023-12-01 05:36:52 27 4
gpt4 key购买 nike

我正在尝试让一台计算机上的客户端通过 Java RMI 与另一台计算机上的服务器通信。我将服务器部署在端口 Y 上的主机 IP X 上。然后,我尝试让客户端查找服务器上的远程对象,但出现以下异常:

Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission <IP address>:<port> connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:524)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at nursestation.NurseStation.subscribeToPatients(NurseStation.java:65)
at nursestation.NurseStation.<init>(NurseStation.java:42)
at nursestation.perf.SimplePerfTest.main(SimplePerfTest.java:28)

请注意,客户端和服务器都使用允许所有权限的策略文件运行。 RMI 注册表也在服务器上运行。关于为什么我会收到此异常有什么想法吗?我该怎么做才能允许客户端与在不同服务器上运行的服务器通信?

更新:

政策文件

grant {
permission java.security.AllPermission;
};

客户端启动 - 使用 Eclipse 的 RMI 插件

  1. 启动 RMI 注册表
  2. 使用上面显示的 java.security.policy 的指定策略文件和指向我的项目工作区代码的 java.rmi.server.codebase 执行“java BedsideMonitorMain Patient1 Vital1 Vital2”
  3. 患者1对象绑定(bind)到RMI注册表

服务器启动

  1. 使用上面显示的 java.security.policy 的指定策略文件和指向我的项目工作区代码的 java.rmi.server.codebase 执行“java NurseStationMain Patient1”

最佳答案

所以我找出了根本的问题。显然,两台机器都有不同的 Eclipse RMI 插件许可证 key ,这不允许两台机器相互通信。当我使两台机器上的许可证 key 相同时,我就能够让客户端和服务器相互通信。就我的目的而言,这已经足够了,因为我没有在生产环境中使用该系统(它用于类(class)项目)。我很好奇这个问题的“最佳”解决方案是什么。

关于Java RMI - 访问不同机器上的 RMI 注册表对象 - AccessControlException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com