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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。