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

时间:2012-04-13 13:09:04

标签: java rmi rmiregistry

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

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

2 个答案:

答案 0 :(得分:1)

只有在客户端与注册表运行在同一主机中时,才会发生这种情况。如果您的客户遇到安全问题,那么您遇到的问题要比RMI为您解决的问题大得多。

答案 1 :(得分:0)

来自Javadoc for Registry:

  

注册管理机构实施可以选择限制对部分或全部的访问   其方法(例如,改变注册表的方法)   绑定可能仅限于源自本地主机的呼叫。   如果Registry方法选择拒绝给定调用的访问,   它的实现可能会抛出AccessException(因为它   扩展RemoteException)将被包装在ServerException中   被远程客户抓住。

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