Class JNLPSecurityManager

java.lang.Object
java.lang.SecurityManager
net.sourceforge.jnlp.runtime.JNLPSecurityManager

class JNLPSecurityManager extends SecurityManager
Security manager for JNLP environment. This security manager cannot be replaced as it always denies attempts to replace the security manager or policy.

The JNLP security manager tracks windows created by an application, allowing those windows to be disposed when the application exits but the JVM does not. If security is not enabled then the first application to call System.exit will halt the JVM.

Version:
$Revision: 1.17 $
  • Field Details

    • LOG

      private static final Logger LOG
    • exitClass

      private Object exitClass
      only class that can exit the JVM, if set
    • closeAppEx

      private SecurityException closeAppEx
      this exception prevents exiting the JVM
    • weakWindows

      private WeakList<Window> weakWindows
      weak list of windows created
    • weakApplications

      private WeakList<ApplicationInstance> weakApplications
      weak list of applications corresponding to window list
    • exitAllowed

      private boolean exitAllowed
      Sets whether or not exit is allowed (in the context of the plugin, this is always false)
    • mainAppContext

      private sun.awt.AppContext mainAppContext
      The AppContext of the main application (netx). We need to store this here so we can return this when no code from an external application is running on the thread
  • Constructor Details

    • JNLPSecurityManager

      JNLPSecurityManager()
      Creates a JNLP SecurityManager.
  • Method Details

    • isExitClass

      public boolean isExitClass()
      Returns whether the exit class is present on the stack, or true if no exit class is set.
    • isExitClass

      private boolean isExitClass(Class[] stack)
      Returns whether the exit class is present on the stack, or true if no exit class is set.
    • setExitClass

      public void setExitClass(Class<?> exitClass) throws IllegalStateException
      Set the exit class, which is the only class that can exit the JVM; if not set then any class can exit the JVM.
      Parameters:
      exitClass - the exit class
      Throws:
      IllegalStateException - if the exit class is already set
    • getApplication

      protected ApplicationInstance getApplication()
      Return the current Application, or null if none can be determined.
    • getApplication

      protected ApplicationInstance getApplication(Window window)
      Return the application the opened the specified window (only call from event dispatch thread).
    • getApplication

      protected ApplicationInstance getApplication(Thread thread, Class<?>[] stack, int maxDepth)
      Return the current Application, or null.
    • getJnlpClassLoader

      private JNLPClassLoader getJnlpClassLoader(ClassLoader cl)
      Returns the JNLPClassLoader associated with the given ClassLoader, or null.
      Parameters:
      cl - a ClassLoader
      Returns:
      JNLPClassLoader or null
    • getThreadGroup

      public ThreadGroup getThreadGroup()
      Returns the application's thread group if the application can be determined; otherwise returns super.getThreadGroup()
      Overrides:
      getThreadGroup in class SecurityManager
    • checkPermission

      public void checkPermission(Permission perm)
      Throws a SecurityException if the permission is denied, otherwise return normally. This method always denies permission to change the security manager or policy.
      Overrides:
      checkPermission in class SecurityManager
    • askPermission

      private boolean askPermission(Permission perm)
      Asks the user whether or not to grant permission.
      Parameters:
      perm - the permission to be granted
      Returns:
      true if the permission was granted, false otherwise.
    • addPermission

      private void addPermission(Permission perm)
      Adds a permission to the JNLPClassLoader.
      Parameters:
      perm - the permission to add to the JNLPClassLoader
    • checkTopLevelWindow

      public boolean checkTopLevelWindow(Object window)
      Checks whether the window can be displayed without an applet warning banner, and adds the window to the list of windows to be disposed when the calling application exits.
    • checkExit

      public void checkExit(int status)
      Checks whether the caller can exit the system. This method identifies whether the caller is a real call to Runtime.exec and has special behavior when returning from this method would exit the JVM and an exit class is set: if the caller is not the exit class then the calling application will be stopped and its resources destroyed (when possible), and an exception will be thrown to prevent the JVM from shutting down.

      Calls not from Runtime.exit or with no exit class set will behave normally, and the exit class can always exit the JVM.

      Overrides:
      checkExit in class SecurityManager
    • disableExit

      protected void disableExit()
    • checkAwtEventQueueAccess

      public void checkAwtEventQueueAccess()
      Tests if a client can get access to the AWT event queue. This version allows complete access to the EventQueue for its own AppContext-specific EventQueue. FIXME there are probably huge security implications for this. Eg: http://hg.openjdk.java.net/jdk7/awt/jdk/rev/8022709a306d
      Throws:
      SecurityException - if the caller does not have permission to access the AWT event queue.