我正在考虑像我这样
验证我的RMI服务的用户interface RemoteService extends Remote { ... }
interface RemoteServiceProvider extends Remote { ... }
class RemoteServiceProviderImpl implements RemoteServiceProvider {
RemoteService getService(String authCode) throws RemoteException {
if (check(authCode)) return (RemoteService) UnicastRemoteObject.export(theRemoteService, 0);
else throw ...;
}
}
但是,这可能不太安全。我怀疑当真实服务被export
时,任何猜测正确端口的人都可以获得它。
我怎样才能以正确的方式做到这一点?
答案 0 :(得分:0)
看起来当真实服务导出时,任何人都是 猜测正确的端口可以获取它。
没有。他们还必须猜测一个远程对象ID,并且有一个系统属性可以通过安全的RNG生成它们。他们还必须拥有远程接口类,并且他们还必须能够使用正确的IP:端口,远程接口和远程UID构建对象的远程存根。不容易。但是,如果您有严重的安全问题,那么您当然应该通过相互身份验证来查看SSL,如果您对安全RMI完全认真,那么可能需要完整的Jini / Secure JERI。另请参阅this white paper。