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!
在控製台上,我們將看到一條顯示消息,如上所示。
相關用法
- Java java.rmi.MarshalledObject用法及代碼示例
- Java java.rmi.Naming用法及代碼示例
- Java java.io.BufferedInputStream.mark()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotation()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getDeclaredAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.isAccessible()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.setAccessible()用法及代碼示例
- Java java.lang.reflect.Array.get()用法及代碼示例
- Java java.lang.reflect.Array.getBoolean()用法及代碼示例
- Java java.lang.reflect.Array.getByte()用法及代碼示例
- Java java.lang.reflect.Array.getChar()用法及代碼示例
- Java java.lang.reflect.Array.getDouble()用法及代碼示例
- Java java.lang.reflect.Array.getFloat()用法及代碼示例
- Java java.lang.reflect.Array.getInt()用法及代碼示例
- Java java.lang.reflect.Array.getLength()用法及代碼示例
- Java java.lang.reflect.Array.getLong()用法及代碼示例
- Java java.lang.reflect.Array.getShort()用法及代碼示例
- Java java.lang.reflect.Array.newInstance()用法及代碼示例
- Java java.lang.reflect.Array.set()用法及代碼示例
- Java java.lang.reflect.Array.setBoolean()用法及代碼示例
- Java java.lang.reflect.Array.setByte()用法及代碼示例
- Java java.lang.reflect.Array.setChar()用法及代碼示例
- Java java.lang.reflect.Array.setDouble()用法及代碼示例
- Java java.lang.reflect.Array.setFloat()用法及代碼示例
注:本文由純淨天空篩選整理自praveen13kulkarni大神的英文原創作品 java.rmi.RMISecurityManager Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。