java.lang
public class SecurityManager extends Object
SecurityException
if the
action is forbidden.
A typical check is as follows, just before the dangerous operation:
SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkABC(argument, ...);Note that this is thread-safe, by caching the security manager in a local variable rather than risking a NullPointerException if the mangager is changed between the check for null and before the permission check.
The special method checkPermission
is a catchall, and
the default implementation calls
AccessController.checkPermission
. In fact, all the other
methods default to calling checkPermission.
Sometimes, the security check needs to happen from a different context,
such as when called from a worker thread. In such cases, use
getSecurityContext
to take a snapshot that can be passed
to the worker thread:
Object context = null; SecurityManager sm = System.getSecurityManager(); if (sm != null) context = sm.getSecurityContext(); // defaults to an AccessControlContext // now, in worker thread if (sm != null) sm.checkPermission(permission, context);
Permissions fall into these categories: File, Socket, Net, Security,
Runtime, Property, AWT, Reflect, and Serializable. Each of these
permissions have a property naming convention, that follows a hierarchical
naming convention, to make it easy to grant or deny several permissions
at once. Some permissions also take a list of permitted actions, such
as "read" or "write", to fine-tune control even more. The permission
java.security.AllPermission
grants all permissions.
The default methods in this class deny all things to all people. You must explicitly grant permission for anything you want to be legal when subclassing this class.
Since: 1.0
See Also: ClassLoader SecurityException checkTopLevelWindow getSecurityManager setSecurityManager AccessController AccessControlContext AccessControlException Permission BasicPermission FilePermission SocketPermission PropertyPermission RuntimePermission AWTPermission Policy SecurityPermission ProtectionDomain
UNKNOWN: still missing 1.4 functionality
Field Summary | |
---|---|
protected boolean | inCheck
Tells whether or not the SecurityManager is currently performing a
security check. |
Constructor Summary | |
---|---|
SecurityManager()
Construct a new security manager. |
Method Summary | |
---|---|
void | checkAccept(String host, int port)
Check if the current thread is allowed to accept a connection from a
particular host on a particular port. |
void | checkAccess(Thread thread)
Check if the current thread is allowed to modify another Thread. |
void | checkAccess(ThreadGroup g)
Check if the current thread is allowed to modify a ThreadGroup. |
void | checkAwtEventQueueAccess()
Check if the current thread is allowed to use the AWT event queue. |
void | checkConnect(String host, int port)
Check if the current thread is allowed to connect to a given host on a
given port. |
void | checkConnect(String host, int port, Object context)
Check if the current thread is allowed to connect to a given host on a
given port, using the given security context. |
void | checkCreateClassLoader()
Check if the current thread is allowed to create a ClassLoader. |
void | checkDelete(String filename)
Check if the current thread is allowed to delete the given file. |
void | checkExec(String program)
Check if the current thread is allowed to execute the given program. |
void | checkExit(int status)
Check if the current thread is allowed to exit the JVM with the given
status. |
void | checkLink(String filename)
Check if the current thread is allowed to link in the given native
library. |
void | checkListen(int port)
Check if the current thread is allowed to listen to a specific port for
data. |
void | checkMemberAccess(Class<?> c, int memberType)
Check if the current thread is allowed to get certain types of Methods,
Fields and Constructors from a Class object. |
void | checkMulticast(InetAddress addr)
Check if the current thread is allowed to read and write multicast to
a particular address. |
void | checkMulticast(InetAddress addr, byte ttl)
Check if the current thread is allowed to read and write multicast to
a particular address with a particular ttl (time-to-live) value. |
void | checkPackageAccess(String packageName)
Check if the current thread is allowed to access the specified package
at all. |
void | checkPackageDefinition(String packageName)
Check if the current thread is allowed to define a class into the
specified package. |
void | checkPermission(Permission perm)
Check if the current thread is allowed to perform an operation that
requires the specified Permission . |
void | checkPermission(Permission perm, Object context)
Check if the current thread is allowed to perform an operation that
requires the specified Permission . |
void | checkPrintJobAccess()
Check if the current thread is allowed to create a print job. |
void | checkPropertiesAccess()
Check if the current thread is allowed to read or write all the system
properties at once. |
void | checkPropertyAccess(String key)
Check if the current thread is allowed to read a particular system
property (writes are checked directly via checkPermission). |
void | checkRead(FileDescriptor desc)
Check if the current thread is allowed to read the given file using the
FileDescriptor. |
void | checkRead(String filename)
Check if the current thread is allowed to read the given file. |
void | checkRead(String filename, Object context)
Check if the current thread is allowed to read the given file. using the
given security context. |
void | checkSecurityAccess(String action)
Test whether a particular security action may be taken. |
void | checkSetFactory()
Check if the current thread is allowed to set the current socket factory.
|
void | checkSystemClipboardAccess()
Check if the current thread is allowed to use the system clipboard. |
boolean | checkTopLevelWindow(Object window)
Check if the current thread is allowed to create a top-level window. |
void | checkWrite(FileDescriptor desc)
Check if the current thread is allowed to write the given file using the
FileDescriptor. |
void | checkWrite(String filename)
Check if the current thread is allowed to write the given file. |
protected int | classDepth(String className)
Get the depth of a particular class on the execution stack.
|
protected int | classLoaderDepth()
Get the depth on the execution stack of the most recent non-system class.
|
protected ClassLoader | currentClassLoader()
Find the ClassLoader of the first non-system class on the execution
stack. |
protected Class<?> | currentLoadedClass()
Find the first non-system class on the execution stack. |
protected Class[] | getClassContext()
Get a list of all the classes currently executing methods on the Java
stack. getClassContext()[0] is the currently executing method (ie. the
class that CALLED getClassContext, not SecurityManager).
|
boolean | getInCheck()
Tells whether or not the SecurityManager is currently performing a
security check.
|
Object | getSecurityContext()
Get an implementation-dependent Object that contains enough information
about the current environment to be able to perform standard security
checks later. |
ThreadGroup | getThreadGroup()
Get the ThreadGroup that a new Thread should belong to by default. |
protected boolean | inClass(String className)
Tell whether the specified class is on the execution stack.
|
protected boolean | inClassLoader()
Tell whether there is a class loaded with an explicit ClassLoader on
the stack.
|
Deprecated: Use {@link #checkPermission(Permission)} instead.
Tells whether or not the SecurityManager is currently performing a security check.RuntimePermission("createSecurityManager")
.
Throws: SecurityException if permission is denied
SocketPermission(host + ":" + port, "accept")
. If you
override this, call super.checkAccept
rather than throwing
an exception.
Parameters: host the host which wishes to connect port the port the connection will be on
Throws: SecurityException if permission is denied NullPointerException if host is null
See Also: accept
RuntimePermission("modifyThread")
on system threads
(ie. threads in ThreadGroup with a null parent), and returns silently on
other threads.
If you override this, you must do two things. First, call
super.checkAccess(t)
, to make sure you are not relaxing
requirements. Second, if the calling thread has
RuntimePermission("modifyThread")
, return silently, so that
core classes (the Classpath library!) can modify any thread.
Parameters: thread the other Thread to check
Throws: SecurityException if permission is denied NullPointerException if thread is null
RuntimePermission("modifyThread")
on the system group
(ie. the one with a null parent), and returns silently on other groups.
If you override this, you must do two things. First, call
super.checkAccess(t)
, to make sure you are not relaxing
requirements. Second, if the calling thread has
RuntimePermission("modifyThreadGroup")
, return silently,
so that core classes (the Classpath library!) can modify any thread.
Parameters: g the ThreadGroup to check
Throws: SecurityException if permission is denied NullPointerException if g is null
See Also: Thread ThreadGroup stop suspend resume interrupt ThreadGroup ThreadGroup
AWTPermission("accessEventQueue")
.
you override this, call super.checkAwtEventQueueAccess
rather than throwing an exception.
Throws: SecurityException if permission is denied
Since: 1.1
See Also: getSystemEventQueue
SocketPermission(host, "resolve")
. Otherwise, the default
implementation checks
SocketPermission(host + ":" + port, "connect")
. If you
override this, call super.checkConnect
rather than throwing
an exception.
Parameters: host the host to connect to port the port to connect on
Throws: SecurityException if permission is denied NullPointerException if host is null
See Also: Socket
getSecurityContext
. A port
number of -1 indicates the caller is attempting to determine an IP
address, so the default implementation checks
AccessControlContext.checkPermission(new SocketPermission(host,
"resolve"))
. Otherwise, the default implementation checks
AccessControlContext.checkPermission(new SocketPermission(host
+ ":" + port, "connect"))
. If you override this, call
super.checkConnect
rather than throwing an exception.
Parameters: host the host to connect to port the port to connect on context the context to determine access for
Throws: SecurityException if permission is denied, or if context is not an AccessControlContext NullPointerException if host is null
See Also: getSecurityContext checkPermission
RuntimePermission("createClassLoader")
. If you override
this, you should call super.checkCreateClassLoader()
rather
than throwing an exception.
Throws: SecurityException if permission is denied
See Also: ClassLoader
FilePermission(filename, "delete")
. If you override this,
call super.checkDelete
rather than throwing an exception.
Parameters: filename the full name of the file to delete
Throws: SecurityException if permission is denied NullPointerException if filename is null
See Also: delete
FilePermission(program, "execute")
, otherwise it checks
FilePermission("<<ALL FILES>>", "execute")
. If
you override this, call super.checkExec
rather than
throwing an exception.
Parameters: program the name of the program to exec
Throws: SecurityException if permission is denied NullPointerException if program is null
See Also: (String[], String[], File)
RuntimePermission("exitVM")
. If you override this, call
super.checkExit
rather than throwing an exception.
Parameters: status the status to exit with
Throws: SecurityException if permission is denied
RuntimePermission("loadLibrary." + filename)
. If you
override this, call super.checkLink
rather than throwing
an exception.
Parameters: filename the full name of the library to load
Throws: SecurityException if permission is denied NullPointerException if filename is null
See Also: load
SocketPermission("localhost:" + (port == 0 ? "1024-" : "" + port),
"listen")
. If you override this, call
super.checkListen
rather than throwing an exception.
Parameters: port the port to listen on
Throws: SecurityException if permission is denied
See Also: ServerSocket
RuntimePermission("accessDeclaredMembers")
. If you override
this, do not call super.checkMemberAccess
, as this would
mess up the stack depth check that determines the ClassLoader requesting
the access.
Parameters: c the Class to check memberType either DECLARED or PUBLIC
Throws: SecurityException if permission is denied, including when memberType is not DECLARED or PUBLIC NullPointerException if c is null
Since: 1.1
SocketPermission(addr.getHostAddress(), "accept,connect")
.
If you override this, call super.checkMulticast
rather than
throwing an exception.
Parameters: addr the address to multicast to
Throws: SecurityException if permission is denied NullPointerException if host is null
Since: 1.1
Deprecated: use {@link #checkPermission(Permission)} instead
Check if the current thread is allowed to read and write multicast to a particular address with a particular ttl (time-to-live) value. The default implementation ignores ttl, and checksSocketPermission(addr.getHostAddress(), "accept,connect")
.
If you override this, call super.checkMulticast
rather than
throwing an exception.
Parameters: addr the address to multicast to ttl value in use for multicast send
Throws: SecurityException if permission is denied NullPointerException if host is null
Since: 1.1
Security.getProperty("package.access")
. Then,
if packageName starts with or equals any restricted package, it checks
RuntimePermission("accessClassInPackage." + packageName)
.
If you override this, you should call
super.checkPackageAccess
before doing anything else.
Parameters: packageName the package name to check access to
Throws: SecurityException if permission is denied NullPointerException if packageName is null
See Also: ClassLoader getProperty
Security.getProperty("package.definition")
. Then, if
packageName starts with or equals any restricted package, it checks
RuntimePermission("defineClassInPackage." + packageName)
.
If you override this, you should call
super.checkPackageDefinition
before doing anything else.
Parameters: packageName the package name to check access to
Throws: SecurityException if permission is denied NullPointerException if packageName is null
See Also: ClassLoader getProperty
Permission
. This defaults to
AccessController.checkPermission
.
Parameters: perm the Permission
required
Throws: SecurityException if permission is denied NullPointerException if perm is null
Since: 1.2
Permission
. This is done in a
context previously returned by getSecurityContext()
. The
default implementation expects context to be an AccessControlContext,
and it calls AccessControlContext.checkPermission(perm)
.
Parameters: perm the Permission
required context a security context
Throws: SecurityException if permission is denied, or if context is not an AccessControlContext NullPointerException if perm is null
Since: 1.2
See Also: getSecurityContext checkPermission
RuntimePermission("queuePrintJob")
. If you override
this, call super.checkPrintJobAccess
rather than throwing
an exception.
Throws: SecurityException if permission is denied
Since: 1.1
See Also: Toolkit
PropertyPermission("*", "read,write")
. If you override
this, call super.checkPropertiesAccess
rather than
throwing an exception.
Throws: SecurityException if permission is denied
See Also: getProperties setProperties
PropertyPermission(key, "read")
. If
you override this, call super.checkPropertyAccess
rather
than throwing an exception.
Parameters: key the key of the property to check
Throws: SecurityException if permission is denied NullPointerException if key is null IllegalArgumentException if key is ""
See Also: getProperty
RuntimePermission("readFileDescriptor")
. If you override
this, call super.checkRead
rather than throwing an
exception.
Parameters: desc the FileDescriptor representing the file to access
Throws: SecurityException if permission is denied NullPointerException if desc is null
See Also: FileInputStream
FilePermission(filename, "read")
. If
you override this, call super.checkRead
rather than
throwing an exception.
Parameters: filename the full name of the file to access
Throws: SecurityException if permission is denied NullPointerException if filename is null
See Also: File FileInputStream RandomAccessFile
getSecurityContext()
. The default implementation checks
AccessControlContext.checkPermission(new FilePermission(filename,
"read"))
. If you override this, call super.checkRead
rather than throwing an exception.
Parameters: filename the full name of the file to access context the context to determine access for
Throws: SecurityException if permission is denied, or if context is not an AccessControlContext NullPointerException if filename is null
See Also: getSecurityContext checkPermission
SecurityPermission(action)
. If you
override this, call super.checkSecurityAccess
rather than
throwing an exception.
Parameters: action the desired action to take
Throws: SecurityException if permission is denied NullPointerException if action is null IllegalArgumentException if action is ""
Since: 1.1
RuntimePermission("setFactory")
. If you override this, call
super.checkSetFactory
rather than throwing an exception.
Throws: SecurityException if permission is denied
See Also: setSocketImplFactory setSocketFactory setURLStreamHandlerFactory
AWTPermission("accessClipboard")
. If
you override this, call super.checkSystemClipboardAccess
rather than throwing an exception.
Throws: SecurityException if permission is denied
Since: 1.1
See Also: getSystemClipboard
AWTPermission("showWindowWithoutWarningBanner")
, and returns
true if no exception was thrown. If you override this, use
return super.checkTopLevelWindow
rather than returning
false.
Parameters: window the window to create
Returns: true if there is permission to show the window without warning
Throws: NullPointerException if window is null
See Also: Window
RuntimePermission("writeFileDescriptor")
. If you override
this, call super.checkWrite
rather than throwing an
exception.
Parameters: desc the FileDescriptor representing the file to access
Throws: SecurityException if permission is denied NullPointerException if desc is null
See Also: FileOutputStream
FilePermission(filename, "write")
. If you override this,
call super.checkWrite
rather than throwing an exception.
Parameters: filename the full name of the file to access
Throws: SecurityException if permission is denied NullPointerException if filename is null
See Also: File canWrite mkdir renameTo FileOutputStream RandomAccessFile
Deprecated: use {@link #checkPermission(Permission)} instead
Get the depth of a particular class on the execution stack.Parameters: className the fully-qualified name to search for
Returns: the index of the class on the stack, or -1
Deprecated: use {@link #checkPermission(Permission)} instead
Get the depth on the execution stack of the most recent non-system class. A non-system class is one whose ClassLoader is not equal to {@link ClassLoader#getSystemClassLoader()} or its ancestors. This will return -1 in three cases:java.security.AllPermission
succeeds.Returns: the index of the most recent non-system Class on the stack
Deprecated: use {@link #checkPermission(Permission)} instead
Find the ClassLoader of the first non-system class on the execution stack. A non-system class is one whose ClassLoader is not equal to {@link ClassLoader#getSystemClassLoader()} or its ancestors. This will return null in three cases:java.security.AllPermission
succeeds.Returns: the most recent non-system ClassLoader on the execution stack
Deprecated: use {@link #checkPermission(Permission)} instead
Find the first non-system class on the execution stack. A non-system class is one whose ClassLoader is not equal to {@link ClassLoader#getSystemClassLoader()} or its ancestors. This will return null in three cases:java.security.AllPermission
succeeds.Returns: the most recent non-system Class on the execution stack
Returns: an array of classes on the Java execution stack
Deprecated: use {@link #checkPermission(Permission)} instead
Tells whether or not the SecurityManager is currently performing a security check.Returns: true if the SecurityManager is in a security check
See Also: inCheck
Currently the only methods that use this are checkRead() and
checkConnect(). The default implementation returns an
AccessControlContext
.
Returns: a security context
See Also: SecurityManager SecurityManager AccessControlContext getContext
Returns: the ThreadGroup to put the new Thread into
Since: 1.1
Deprecated: use {@link #checkPermission(Permission)} instead
Tell whether the specified class is on the execution stack.Parameters: className the fully-qualified name of the class to find
Returns: whether the specified class is on the execution stack
Deprecated: use {@link #checkPermission(Permission)} instead
Tell whether there is a class loaded with an explicit ClassLoader on the stack.Returns: whether a class with an explicit ClassLoader is on the stack