Java的.rmi.RMISecurityManager类在Java中
RMISecurityManager通过覆盖来自SecurityManager 的所有相关访问检查方法,为作为远程对象存根加载的类实施安全策略。默认情况下,仅允许存根对象执行类定义和类访问操作。
Note:
- If the local security manager is not an RMISecurityManager using the System.setSecurityManager() method
- Then stub classes will only be loadable from the local file system.
java.lang.Object
java.lang.SecurityManager
java.rmi.RMISecurityManager
句法:
public class RMISecurityManager
extends SecurityManager
Note: A subclass of SecurityManager used by RMI applications that use downloaded code.
如果没有设置安全管理器,RMI 的类加载器将不会从远程位置下载任何类。 RMISecurityManager 不适用于在浏览器安全管理器保护下运行的小程序。 RMISecurityManager 实现的策略与 SecurityManager 实现的策略没有什么不同。因此,RMI 应用程序应该使用 SecurityManager 类或其他特定于应用程序的 SecurityManager 实现而不是此类。
如何合并安全管理器类?
要在您的应用程序中使用 SecurityManager,请将以下语句添加到您的代码中(它需要在 RMI 可以从远程主机下载代码之前执行,因此它很可能需要出现在您的应用程序的 main 方法中)
句法:
System.setSecurityManager(new SecurityManager());
RMISecurityManager 实现的策略与 SecurityManager 实现的策略相同。 RMI 应用程序应使用 SecurityManager 类或其他适当的 SecurityManager 实现而不是此类。仅当设置了安全管理器时,RMI 的类加载器才会从远程位置下载类。
现在让我们继续这个类的构造函数如下:
- RMISecurityManager() :构造一个新的 RMISecurityManager
执行:
if (System.getSecurityManager() == null)
{
// Setting the RMISecurityManager on System
System.setSecurityManager(new SecurityManager());
}
小程序通常运行在已经有安全管理器的容器中,所以小程序一般不需要设置安全管理器。如果您有一个独立的应用程序,您可能需要设置一个 SecurityManager 以启用类下载。这可以通过将以下内容添加到您的代码中来完成。 (它需要在 RMI 可以从远程主机下载代码之前执行,因此它很可能需要出现在您的应用程序的 main 方法中,从下图可以更好地理解。
图 1:
// Protected synchronized method
protected static synchronized void setSecurityManager()
{
if (System.getSecurityManager() == null)
{
// Setting the RMISecurityManager on System
System.setSecurityManager(new RMISecurityManager());
}
}
图 2:
// Synchronized method
synchronized static void ensureSecurityManager()
{
if (System.getSecurityManager() == null)
{
// Setting the RMISecurityManager on System
System.setSecurityManager(new RMISecurityManager());
}
}
图 3:
// Protected synchronized method
protected static synchronized void setSecurityManager()
{
if (System.getSecurityManager() == null)
{
// Setting the RMISecurityManager on System
System.setSecurityManager(new RMISecurityManager());
}
}
例子
Java
// Java Program to Illustrate RMISecurityManager Class
// Via creating Registry and Rebinding Service
// Importing required classes
import java.lang.Object;
import java.lang.SecurityManager;
import java.rmi.RMISecurityManager;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Try block to check for exceptions
try {
// Setting the RMISecurityManager on System
System.setSecurityManager(
new RMISecurityManager());
RmiService service = new RmiServiceImpl();
// First we will be creating registry
// using createRegistry() method
LocateRegistry.createRegistry(6600);
// Now rebinding the service
// using rebind method
Naming.rebind(
"rmi://127.0.0.1:6600/PersonService",
service);
// Display message on the console for
// successful execution of the program
System.out.println("Service Start!");
}
// Catch block to handle exceptions
catch (Exception e) {
// Printing the line number where exception
// occured using printStackTrace() method
e.printStackTrace();
}
}
}
输出:
Service Start!
在控制台上,我们将显示如上所示的显示消息。