如何创建java RMI程序没有SecurityManager,因为它的弃用?

umuewwlo  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(239)

参考Oracle的“创建和安装安全管理器”教程:https://docs.oracle.com/javase/tutorial/rmi/implementing.html
它提到每当我们需要在RMI程序中从远程计算机下载代码时,就需要安全管理器。
既然从java18开始SecurityManager就被弃用了,那么有没有新的策略来取代RMI程序中SecurityManager的功能呢?如何实现呢?

j91ykkif

j91ykkif1#

既然SecurityManager从java 18开始就被弃用了,
实际上,Java 17中已弃用此功能。在Java 18中,默认情况下禁用此功能。
[Is是否引入了任何新策略来替换所述RMI程序中SecurityManager的功能?
阿法克,不。
对于RMI,当RMI需要加载和使用从远程和(潜在)不可信源获取的类时,建议使用安全管理器。然后,不可信的类将在安全管理器沙箱中运行。
现在这是一个问题。基本上,Java安全管理器机制是脆弱的,很难正确使用。此外,没有真实的的前景来改进该机制,使其安全(足够)。这就是为什么他们已经在Java 17中弃用它,并在Java 18中默认禁用它。请参阅JEP 411了解完整的细节。
因此,我认为对您来说,最好的解决办法是重新架构您的应用程序,这样您就不需要从不可信的源或通过不安全的通道下载RMI类,这意味着您可以安全地免除安全管理器。
另一种选择是不支持/使用Java 17及更高版本。从长远来看,这将越来越困难。
请注意,他们还没有完全删除安全管理器支持。JEP链接讨论了一些可能性,但AFAIK尚未决定。

相关问题