当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java java.rmi.RMISecurityManager用法及代码示例


RMISecurityManager 通过覆盖 SecurityManager 中的所有相关 access-check 方法,对作为远程对象的存根加载的类强制执行安全策略。默认情况下,存根对象只允许执行类定义和类访问操作。

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 从远程主机下载代码之前执行,因此它很可能需要出现在应用程序的主方法中,从下面的插图中可以更好地理解这一点。

图一:

// 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
            // occurred using printStackTrace() method
            e.printStackTrace();
        }
    }
}

输出:

Service Start!

在控制台上,我们将看到一条显示消息,如上所示。



相关用法


注:本文由纯净天空筛选整理自praveen13kulkarni大神的英文原创作品 java.rmi.RMISecurityManager Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。