當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。