我必须制作一个符合以下要求的程序:
基于RMI构建客户端/服务器应用程序,具有以下特征: 该应用程序由3个不同的项目构成:服务器,客户端,共享,其中共享包含服务器和客户端通用的接口和类。服务器和客户端是程序,每个程序都有自己的主程序,也可以在不同的机器上运行。
- 服务器导出注册的远程对象。
- 客户端使用服务器的适当方法在服务器上注册,该方法将客户端的参数名称和IP作为参数,并返回唯一标识符。
- 服务器保留所有已注册客户端的更新列表,并提供注册和每次访问列表的方法。
醇>制作一个分布式程序,用于模拟随机数量的客户端的注册。 客户端是连接到服务器的Java程序,注册然后允许可视化系统的全局状态。
使用RMI回调来证明新注册的每个注册客户端。
我的问题从第2点开始。到目前为止,我见过的所有教程中,Client都创建了一个导出的对象客户端,并将其传递给Server导出的远程对象的注册方法。在这里它要求我只传递名称和IP但是为了进行回调,我需要对客户端对象的引用,所以我想在注册表中查找注册的每个客户端,但我认为这个想法只是一个解决方法,因为我可以直接将客户端对象作为参数传递给方法...
注册后我认为客户端应该使用其标识符来访问已注册客户端的列表,但如果另一个未注册的客户端使用与注册客户端的标识符匹配的自制标识符会怎么样?在这种情况下,它可以访问该帐户。有没有办法安全地识别客户并可能让他们登录而不要求他们为每个请求识别自己?
可选问题:如何在这种程序中使用注册表?我们怎么知道每个客户端都要将名称绑定到其对象而不覆盖其他名称?例如,如果注册表中有一个名为“client1”的对象,则可能有另一个客户端将其对象“client1”命名为覆盖第一个对象;在这种情况下,第一个对象的名称会发生什么,再次如何使用注册表知道这可能会发生?...
我为我的英语道歉,但这不是我的主要语言
答案 0 :(得分:0)
服务器应为客户端创建令牌。客户端应该在所有后续调用中传递它。服务器应使用它进行身份验证。
GUID很难欺骗。
您无法阻止客户这样做,但鉴于标识符足够复杂,将会很困难。
您还可以让用户提供凭据(例如用户名和密码)。