Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

java.rmi.RMISecurityManager Class in Java

  • Last Updated : 16 Sep, 2021

The RMISecurityManager enforces the security policy for classes that are loaded as stubs for remote objects, by overriding all of the relevant access-check methods from the SecurityManager. By default, stub objects are only allowed to perform class definition and class access operations. 

Note: 

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

  • 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

Syntax:

public class RMISecurityManager 
extends SecurityManager

Note: A subclass of SecurityManager used by RMI applications that use downloaded code. 



RMI’s class loader will not download any classes from remote locations if no security manager has been set. RMISecurityManager does not apply to applets, which run under the protection of their browser’s security manager. RMISecurityManager implements a policy that is no different than the policy implemented by SecurityManager. Therefore an RMI application should use the SecurityManager class or another application-specific SecurityManager implementation instead of this class.

How to incorporate the Security Manager class? 

To use a SecurityManager in your application, add the following statement to your code (it needs to be executed before RMI can download code from remote hosts, so it most likely needs to appear in the main method of your application)

Syntax:

System.setSecurityManager(new SecurityManager());

RMISecurityManager implements a policy identical to the policy implemented by SecurityManager. RMI applications should use the SecurityManager class or another appropriate SecurityManager implementation instead of this class. RMI’s class loader will download classes from remote locations only if a security manager has been set.

Now let us move forward with the constructor of this class as follows:

  • RMISecurityManager(): Constructs a new RMISecurityManager

Implementation:

if (System.getSecurityManager() == null) 
{
    // Setting the RMISecurityManager on System
    System.setSecurityManager(new SecurityManager());
} 

Applets typically run in a container that already has a security manager, so there is generally no need for applets to set a security manager. If you have a standalone application, you might need to set a SecurityManager in order to enable class downloading. This can be done by adding the following to your code. (It needs to be executed before RMI can download code from remote hosts, so it most likely needs to appear in the main method of your application as can better be perceived from the below illustrations.



Illustration 1:

// Protected synchronized method
protected static synchronized void setSecurityManager() 
{
    if (System.getSecurityManager() == null) 
    {
        // Setting the RMISecurityManager on System
        System.setSecurityManager(new RMISecurityManager());
    }
}

Illustration 2:

// Synchronized method
synchronized static void ensureSecurityManager() 
{
    if (System.getSecurityManager() == null) 
    {
        // Setting the RMISecurityManager on System
        System.setSecurityManager(new RMISecurityManager());
    }
}

Illustration 3:  

// Protected synchronized method
protected static synchronized void setSecurityManager() 
{
    if (System.getSecurityManager() == null) 
    {
        // Setting the RMISecurityManager on System
        System.setSecurityManager(new RMISecurityManager());
    }
}

Example

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();
        }
    }
}

Output: 

Service Start!

On console, we will land up to a display message as shown above.




My Personal Notes arrow_drop_up
Recommended Articles
Page :