Class JNLPSecurityManager
java.lang.Object
java.lang.SecurityManager
net.sourceforge.jnlp.runtime.JNLPSecurityManager
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 Summary
FieldsModifier and TypeFieldDescriptionprivate SecurityExceptionthis exception prevents exiting the JVMprivate booleanSets whether or not exit is allowed (in the context of the plugin, this is always false)private Objectonly class that can exit the JVM, if setprivate static final Loggerprivate sun.awt.AppContextThe AppContext of the main application (netx).private WeakList<ApplicationInstance> weak list of applications corresponding to window listweak list of windows created -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddPermission(Permission perm) Adds a permission to the JNLPClassLoader.private booleanaskPermission(Permission perm) Asks the user whether or not to grant permission.voidTests if a client can get access to the AWT event queue.voidcheckExit(int status) Checks whether the caller can exit the system.voidcheckPermission(Permission perm) Throws a SecurityException if the permission is denied, otherwise return normally.booleancheckTopLevelWindow(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.protected voidprotected ApplicationInstanceReturn the current Application, or null if none can be determined.protected ApplicationInstancegetApplication(Window window) Return the application the opened the specified window (only call from event dispatch thread).protected ApplicationInstancegetApplication(Thread thread, Class<?>[] stack, int maxDepth) Return the current Application, or null.private JNLPClassLoaderReturns the JNLPClassLoader associated with the given ClassLoader, or null.Returns the application's thread group if the application can be determined; otherwise returns super.getThreadGroup()booleanReturns whether the exit class is present on the stack, or true if no exit class is set.private booleanisExitClass(Class[] stack) Returns whether the exit class is present on the stack, or true if no exit class is set.voidsetExitClass(Class<?> exitClass) Set the exit class, which is the only class that can exit the JVM; if not set then any class can exit the JVM.Methods inherited from class SecurityManager
checkAccept, checkAccess, checkAccess, checkConnect, checkConnect, checkCreateClassLoader, checkDelete, checkExec, checkLink, checkListen, checkMulticast, checkMulticast, checkPackageAccess, checkPackageDefinition, checkPermission, checkPrintJobAccess, checkPropertiesAccess, checkPropertyAccess, checkRead, checkRead, checkRead, checkSecurityAccess, checkSetFactory, checkWrite, checkWrite, getClassContext, getSecurityContext
-
Field Details
-
LOG
-
exitClass
only class that can exit the JVM, if set -
closeAppEx
this exception prevents exiting the JVM -
weakWindows
-
weakApplications
weak list of applications corresponding to window list -
exitAllowed
private boolean exitAllowedSets whether or not exit is allowed (in the context of the plugin, this is always false) -
mainAppContext
private sun.awt.AppContext mainAppContextThe 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
Returns whether the exit class is present on the stack, or true if no exit class is set. -
setExitClass
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
Return the current Application, or null if none can be determined. -
getApplication
Return the application the opened the specified window (only call from event dispatch thread). -
getApplication
Return the current Application, or null. -
getJnlpClassLoader
Returns the JNLPClassLoader associated with the given ClassLoader, or null.- Parameters:
cl- a ClassLoader- Returns:
- JNLPClassLoader or null
-
getThreadGroup
Returns the application's thread group if the application can be determined; otherwise returns super.getThreadGroup()- Overrides:
getThreadGroupin classSecurityManager
-
checkPermission
Throws a SecurityException if the permission is denied, otherwise return normally. This method always denies permission to change the security manager or policy.- Overrides:
checkPermissionin classSecurityManager
-
askPermission
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
Adds a permission to the JNLPClassLoader.- Parameters:
perm- the permission to add to the JNLPClassLoader
-
checkTopLevelWindow
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:
checkExitin classSecurityManager
-
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.
-