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

如何拒绝客户端解除RMI注册表的绑定?

萧奇
2023-03-14

我写了一个简单的RMI应用程序。我发现客户端在获得RMI-Registry后可以成功执行Registry.unbind()方法。在我看来,这是一种安全风险。为什么允许客户端在远程注册表中取消绑定名称?一个邪恶的人可以通过修改代码来做到这一点,而我的所有其他客户端都无法连接到我的服务器,因为绑定已被删除。

是否有可能在Java策略中否认这一点?

共有2个答案

阎彬炳
2023-03-14

来自 Javadoc for Registry:

注册表实现可以选择限制对其某些或所有方法的访问(例如,改变注册表绑定的方法可能被限制为来自本地主机的调用)。如果注册表方法选择拒绝对给定调用的访问,其实现可能会抛出AccessException,这(因为它扩展了RemoteException)将在远程客户端捕获时封装在ServerException中。

如果您愿意,可以选择阻止此行为(它实际上是大多数注册表实现的默认行为)。

羊舌琛
2023-03-14

仅当客户端在与注册表相同的主机中运行时,才会发生这种情况。如果您在自己的客户端遇到安全问题,那么您遇到的问题比RMI可以为您解决的任何问题都要大得多。

 类似资料:
  • 我正在编写一个小型Java RMI服务器和客户端程序。我花了一些时间试图找出错误消息,但没有成功。 客户端生成以下错误: 尝试连接到:127.0.0.1:3232错误!!!:StockClient:Main:无法连接到服务器:java.rmi.UnMarshalException:解封返回头时出错;嵌套异常为:java.rmi.UnmarshalException:反封送返回头时出错;嵌套异常为:

  • 如果我从命令行创建RMI注册表,则客户端将对象绑定到注册表没有问题。 但是,如果我使用启动RMI注册表,它会出错。 这是我使用创建的代码 当我尝试绑定到我自己的RMI注册表时,我因使用而遇到的错误 是一个接口 有什么想法吗?

  • 我正在做一个正在改造/现代化的项目,其中有一个小的RMI部分,不幸的是,我以前从未与RMI合作过。 我不明白的一件事是,为什么在我最初创建RMI客户端之后,它一直调用其自定义SocketFactory构造函数。似乎每5分钟我就会看到一次调用构造函数的输出,即使客户端和服务器之间没有通信。 连接完成后,我应该做什么来清理和停止任何线程以进行持久化? 我在检查UnicastRemoteObject,也

  • 我有一个要求,RMI客户端需要在远程RMI注册表中注册所有远程对象。 第一个问题,我知道有一个registry.list()方法可以返回对象的所有名称。但是,假设还有其他类型的对象也注册了,我如何获得我想要的类型的对象(实现我想要的接口)。我是否应该遍历名称并使用try/catch语句,尝试实例化每个远程对象? 第二个问题是,如果注册了新对象,客户机如何被注意到?在我的要求中,服务器将动态地将新对

  • 在开始协议前,客户端在授权服务器注册。客户端在授权服务器上注册所通过的方式超出了本规范,但典型的涉及到最终用户与HTML注册表单的交互。 客户端注册不要求客户端与授权服务器之间的直接交互。在授权服务器支持时,注册可以依靠其他方式来建立信任关系并获取客户端的属性(如重定向URI、客户端类型)。例如,注册可以使用自发行或第三方发行声明或通过授权服务器使用信任通道执行客户端发现完成。 当注册客户端时,客

  • 我的项目是客户端/服务器,客户端发送一个对象到服务器,服务器响应,所有这些都是通过RMI 客户项目 //接口 //我需要把它发给的班级 //客户端 //服务器项目 //接口公共接口RMI_接口扩展了远程{ //类,我将发送和接收它公共类Employee实现可序列化的{int ID; //类来保存所有接收到的对象公共类Maneger{ //服务器公共类RMI_server扩展了UnicastRemo