JavaTM 2 Platform
Standard Ed. 5.0

java.lang
类 SecurityManager

java.lang.Object
  继承者 java.lang.SecurityManager
直接已知子类:
RMISecurityManager

public class SecurityManager
extends Object

安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行一个可能不安全或敏感的操作前确定该操作是什么,以及是否是在允许执行该操作的安全上下文中执行它。应用程序可以允许或不允许该操作。

SecurityManager 包含了很多名称以 check 开头的方法。Java 库中的各种方法在执行某些潜在的敏感操作前可以调用这些方法。对 check 方法的典型调用如下:

     SecurityManager security = System.getSecurityManager();
     if (security != null) {
         security.checkXXX(argument,  . . . );
     }
 

因此,安全管理器通过抛出异常来提供阻止操作完成的机会。如果允许执行该操作,则安全管理器例程只是简单地返回,但如果不允许执行该操作,则抛出一个 SecurityException。该约定的惟一例外是 checkTopLevelWindow,它返回 boolean 值。

当前的安全管理器由 System 类中的 setSecurityManager 方法设置。当前的安全管理器由 getSecurityManager 方法获取。

特殊方法 checkPermission(java.security.Permission) 负责确定是应该允许还是拒绝由指定权限所指示的访问请求。默认的实现调用

   AccessController.checkPermission(perm);
 

如果允许访问请求,则返回 checkPermission。如果拒绝访问请求,则抛出 SecurityException

从 Java 2 SDK v1.2 开始,SecurityManager 中其他所有 check 方法的默认实现都是调用 SecurityManager checkPermission 方法来确定调用线程是否具有执行所请求操作的权限。

注意,只带有单个权限参数的 checkPermission 方法总是在当前执行的线程上下文中执行安全检查。有时,应该在给定上下文中进行的安全检查实际上需要在不同 的上下文(例如,在一个辅助线程中)中进行。Java 为这种情况提供了包含有上下文参数的 getSecurityContext 方法和 checkPermission 方法。getSecurityContext 方法返回当前调用上下文的一个“快照”(默认的实现返回一个 AccessControlContext 对象)。下面是一个示例调用:

   Object context = null;
   SecurityManager sm = System.getSecurityManager();
   if (sm != null) context = sm.getSecurityContext(); 
 

checkPermission 方法使用一个上下文对象,以及根据该上下文而不是当前执行线程的上下文作出访问决策的权限。因此另一个上下文中的代码可以调用此方法,传递权限和以前保存的上下文对象。下面是一个示例调用,它使用了以前示例中获得的 SecurityManager sm

   if (sm != null) sm.checkPermission(permission, context);
 

权限分为以下类别:文件、套接字、网络、安全性、运行时、属性、AWT、反射和可序列化。管理各种权限类别的类是 java.io.FilePermissionjava.net.SocketPermissionjava.net.NetPermissionjava.security.SecurityPermissionjava.lang.RuntimePermissionjava.util.PropertyPermissionjava.awt.AWTPermissionjava.lang.reflect.ReflectPermissionjava.io.SerializablePermission

除前两个(FilePermission 和 SocketPermission)类以外的所有类都是 java.security.BasicPermission 的子类,而 java.security.BasicPermission 类又是顶级权限类 java.security.Permission 的抽象子类。BasicPermission 定义了所有权限所需的功能,这些功能的名称遵从分层属性命名惯例(例如“exitVM”、“setFactory”、“queuePrintJob”等等)。在名称的末尾可能出现一个星号,前面是“.”或星号,这表示通配符匹配。例如:“a.*”、“*”是有效的,而“*a”或“a*b”是无效的。

FilePermission 和 SocketPermission 是顶级权限类 (java.security.Permission) 的子类。像这些命名语法比 BasicPermission 所用的语法更为复杂的类都直接是 Permission 的子类,而不是 BasicPermission 的子类。例如,对于 java.io.FilePermission 对象而言,权限名就是文件(或目录)的路径名。

某些权限类具有一个“操作”列表,告知允许对象所执行的操作。例如,对于 java.io.FilePermission 对象,操作列表(如“读、写”)指定了允许对指定文件(或指定目录中的文件)执行哪些操作。

其他权限类是“命名”权限 - 有名称但没有操作列表的类;您也许有命名的权限,也许没有。

注:还有一个暗指所有权限的 java.security.AllPermission 权限。该权限是为了简化系统管理员的工作而存在的,因为管理员可能需要执行很多需要所有(或许多)权限的任务。

有关权限相关的信息,请参阅《Permissions in the JDK》。例如,本文档包括一个列出各种 SecurityManager 的 check 方法和每个方法的默认实现所需的权限表。它还包含了版本 1.2 方法所需权限和每个方法需要哪些权限的表。

有关 JDK 中对 SecurityManager 所作更改的更多信息和关于 1.1 风格安全管理器移植的建议,请参阅《security documentation》。

从以下版本开始:
JDK1.0
另请参见:
ClassLoader, SecurityException, checkTopLevelWindow, getSecurityManager, setSecurityManager, AccessController, AccessControlContext, AccessControlException, Permission, BasicPermission, FilePermission, SocketPermission, PropertyPermission, RuntimePermission, AWTPermission, Policy, SecurityPermission, ProtectionDomain

字段摘要
protected  boolean inCheck
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
 
构造方法摘要
SecurityManager()
          构造一个新的 SecurityManager
 
方法摘要
 void checkAccept(String host, int port)
          如果不允许调用线程从指定的主机和端口号接受套接字连接,则抛出 SecurityException
 void checkAccess(Thread t)
          如果不允许调用线程修改 thread 参数,则抛出 SecurityException
 void checkAccess(ThreadGroup g)
          如果不允许调用线程修改线程组参数,则抛出 SecurityException
 void checkAwtEventQueueAccess()
          如果不允许调用线程访问 AWT 事件队列,则抛出 SecurityException
 void checkConnect(String host, int port)
          如果不允许调用线程打开到指定主机和端口号的套接字连接,则抛出 SecurityException
 void checkConnect(String host, int port, Object context)
          如果不允许指定的安全上下文打开与指定主机和端口号的套接字连接,则抛出 SecurityException
 void checkCreateClassLoader()
          如果不允许调用线程创建新的类加载器,则抛出 SecurityException
 void checkDelete(String file)
          如果不允许调用线程删除指定的文件,则抛出 SecurityException
 void checkExec(String cmd)
          如果不允许调用线程创建一个子进程,则抛出 SecurityException
 void checkExit(int status)
          如果不允许调用线程使用特定的状态码暂停 Java 虚拟机,则抛出 SecurityException
 void checkLink(String lib)
          如果不允许调用线程动态链接由字符串参数文件指定的库代码,则抛出 SecurityException
 void checkListen(int port)
          如果不允许调用线程等待与指定本地端口号进行连接的请求,则抛出 SecurityException
 void checkMemberAccess(Class<?> clazz, int which)
          如果不允许调用线程访问程序,则抛出 SecurityException
 void checkMulticast(InetAddress maddr)
          如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播,则抛出 SecurityException
 void checkMulticast(InetAddress maddr, byte ttl)
          已过时。 由 #checkPermission(java.security.Permission) 取代
 void checkPackageAccess(String pkg)
          如果不允许调用线程访问由参数指定的包,则抛出 SecurityException
 void checkPackageDefinition(String pkg)
          如果不允许调用线程在参数指定的包中定义类,则抛出 SecurityException
 void checkPermission(Permission perm)
          如果基于当前有效的安全策略,不允许执行根据给定权限所指定的请求访问,则抛出 SecurityException
 void checkPermission(Permission perm, Object context)
          如果拒绝指定的安全上下文访问由给定权限所指定的资源,则抛出 SecurityException
 void checkPrintJobAccess()
          如果不允许调用线程发起一个打印作业请求,则抛出 SecurityException
 void checkPropertiesAccess()
          如果不允许调用线程访问或修改系统属性,则抛出 SecurityException
 void checkPropertyAccess(String key)
          如果不允许调用线程访问具有指定的 key 名的系统属性,则抛出 SecurityException
 void checkRead(FileDescriptor fd)
          如果不允许调用线程从指定的文件描述符进行读取,则抛出 SecurityException
 void checkRead(String file)
          如果不允许调用线程读取由字符串参数指定的文件,则抛出 SecurityException
 void checkRead(String file, Object context)
          如果不允许指定的安全上下文读取由字符串参数所指定的文件,则抛出 SecurityException
 void checkSecurityAccess(String target)
          确定是应该允许还是拒绝具有指定权限目标名的权限。
 void checkSetFactory()
          如果不允许调用线程设置由 ServerSocketSocket 使用的套接字工厂,或者由 URL 使用的流处理程序工厂,则抛出 SecurityException
 void checkSystemClipboardAccess()
          如果不允许调用线程访问系统剪贴板,则抛出 SecurityException
 boolean checkTopLevelWindow(Object window)
          如果不受信任的调用线程调出由 window 参数指出的顶层窗口,则返回 false
 void checkWrite(FileDescriptor fd)
          如果不允许调用线程写入指定的文件描述符,则抛出 SecurityException
 void checkWrite(String file)
          如果不允许调用线程写由字符串参数指定的文件,则抛出 SecurityException
protected  int classDepth(String name)
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
protected  int classLoaderDepth()
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
protected  ClassLoader currentClassLoader()
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
protected  Class<?> currentLoadedClass()
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
protected  Class[] getClassContext()
          以类数组的形式返回当前执行堆栈。
 boolean getInCheck()
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
 Object getSecurityContext()
          创建一个封装当前执行环境的对象。
 ThreadGroup getThreadGroup()
          调用此方法时,返回所有新创建的线程实例化后所在的线程组。
protected  boolean inClass(String name)
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
protected  boolean inClassLoader()
          已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

inCheck

@Deprecated
protected boolean inCheck
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。
如果安全检查正在进行,则该字段为 true;否则为 false

构造方法详细信息

SecurityManager

public SecurityManager()
构造一个新的 SecurityManager

如果已经安装了一个安全管理器,则此方法首先用 RuntimePermission("createSecurityManager") 权限调用此安全管理器的 checkPermission 方法,确保调用线程具有创建新安全管理器的权限。这可能导致抛出 SecurityException

抛出:
SecurityException - 如果安全管理器已存在,并且其 checkPermission 方法不允许创建新安全管理器。
另请参见:
System.getSecurityManager(), checkPermission, RuntimePermission
方法详细信息

getInCheck

@Deprecated
public boolean getInCheck()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

测试安全检查是否正在进行。

返回:
inCheck 字段的值。如果安全检查正在进行,则该字段应该为 true,否则应该为 false
另请参见:
inCheck

getClassContext

protected Class[] getClassContext()
以类数组的形式返回当前执行堆栈。

数组的长度是执行堆栈中的方法数。索引 0 指定的元素是当前执行方法的类,索引 1 指定的元素是该方法调用方的类,依此类推。

返回:
执行堆栈。

currentClassLoader

@Deprecated
protected ClassLoader currentClassLoader()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

返回最近执行的、使用非系统类加载器定义的类方法的类加载器。非系统类加载器被定义为一种不同于系统类加载器(由 ClassLoader.getSystemClassLoader() 返回)或其祖先之一的类加载器。

在以下三种情况中,此方法将返回 null

  1. 执行堆栈中的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
  2. 在执行堆栈中,直到第一个“特权”调用方(参见 AccessController.doPrivileged(java.security.PrivilegedAction))为止的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
  3. 使用 java.security.AllPermission 调用 checkPermission 不会导致 SecurityException。

返回:
最近执行的、使用非系统类加载器定义的类方法堆栈中的类加载器。
另请参见:
getSystemClassLoader, checkPermission

currentLoadedClass

@Deprecated
protected Class<?> currentLoadedClass()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

返回最近执行的、使用非系统类加载器定义的类方法的类。非系统类加载器被定义为一种不同于系统类加载器(由 ClassLoader.getSystemClassLoader() 返回)或其祖先之一的类加载器。

在以下三种情况中,此方法将返回 null

  1. 执行堆栈中的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
  2. 在执行堆栈中,直到第一个“特权”调用方(参见 AccessController.doPrivileged(java.security.PrivilegedAction))为止的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
  3. 使用 java.security.AllPermission 调用 checkPermission 不会导致 SecurityException。

返回:
最近出现的、使用非系统类加载器定义的类方法堆栈中的类。
另请参见:
getSystemClassLoader, checkPermission

classDepth

@Deprecated
protected int classDepth(String name)
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

返回指定类的堆栈深度。

参数:
name - 要查找的类的完全限定名。
返回:
在指定名称的类中第一个方法出现的堆栈帧深度;如未找到这样的帧,则返回 -1

classLoaderDepth

@Deprecated
protected int classLoaderDepth()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

返回最近执行的、使用非系统类加载器定义的类方法的堆栈深度。非系统类加载器被定义为一种不同于系统类加载器(由 ClassLoader.getSystemClassLoader() 返回)或其祖先之一的类加载器。

在以下三种情况中,此方法将返回 -1:

  1. 执行堆栈中的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
  2. 在执行堆栈中,直到第一个“特权”调用方(参见 AccessController.doPrivileged(java.security.PrivilegedAction))为止的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
  3. 使用 java.security.AllPermission 调用 checkPermission 不会导致 SecurityException。

返回:
最近出现的、使用非系统类加载器定义的类方法的堆栈帧深度。
另请参见:
getSystemClassLoader, checkPermission

inClass

@Deprecated
protected boolean inClass(String name)
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

测试具有指定名称的类方法是否处于执行堆栈中。

参数:
name - 该类的完全限定名。
返回:
如果具有指定名称的类方法处于执行堆栈中,则返回 true;否则返回 false

inClassLoader

@Deprecated
protected boolean inClassLoader()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。

主要是测试某个使用类加载器定义的类方法是否处于执行堆栈中。

返回:
如果调用 currentClassLoader 具有非 null 的返回值,则返回 true
另请参见:
currentClassLoader

getSecurityContext

public Object getSecurityContext()
创建一个封装当前执行环境的对象。例如,此方法的结果由带有三参数的 checkConnect 方法和带有两参数的 checkRead 方法使用。这些方法是必需的,因为一个受信任的方法可能代表另一方法被调用,以读取一个文件或打开一个套接字。受信任的方法需要确定是否允许另一个方法(可能不受信任)独自执行该操作。

此方法的默认实现是返回 AccessControlContext 对象。

返回:
一个取决于实现的对象,该对象封装了有关当前执行环境的足够信息,这些信息用于稍后执行某些安全检查。
另请参见:
checkConnect, checkRead, AccessControlContext

checkPermission

public void checkPermission(Permission perm)
如果基于当前有效的安全策略,不允许执行根据给定权限所指定的请求访问,则抛出 SecurityException

此方法使用给定的权限调用 AccessController.checkPermission

参数:
perm - 请求的权限。
抛出:
SecurityException - 如果根据当前的安全策略不允许进行访问。
NullPointerException - 如果 permission 参数为 null
从以下版本开始:
1.2

checkPermission

public void checkPermission(Permission perm,
                            Object context)
如果拒绝指定的安全上下文访问由给定权限所指定的资源,则抛出 SecurityException。该上下文必须是一个通过以前调用 getSecurityContext 所返回的安全上下文,并且应该根据为该安全上下文所配置的安全策略来作出访问控制决策。

如果 contextAccessControlContext 的一个实例,则用指定的权限调用 AccessControlContext.checkPermission 方法。

如果 context 不是 AccessControlContext 的一个实例,则抛出 SecurityException

参数:
perm - 指定的权限。
context - 一个取决于系统的安全上下文。
抛出:
SecurityException - 如果指定的安全上下文不是 AccessControlContext 的一个实例(如为 null),或者访问由给定权限所指定的资源时被拒绝。
NullPointerException - 如果权限参数为 null
从以下版本开始:
1.2
另请参见:
getSecurityContext(), AccessControlContext.checkPermission(java.security.Permission)

checkCreateClassLoader

public void checkCreateClassLoader()
如果不允许调用线程创建新的类加载器,则抛出 SecurityException

此方法用 RuntimePermission("createClassLoader") 权限调用 checkPermission

如果重写此方法,那么应该在已重写方法通常将要抛出异常时调用 super.checkCreateClassLoader

抛出:
SecurityException - 如果调用线程没有创建新类加载器的权限。
另请参见:
ClassLoader.ClassLoader(), checkPermission

checkAccess

public void checkAccess(Thread t)
如果不允许调用线程修改 thread 参数,则抛出 SecurityException

Thread 类的 stopsuspendresumesetPrioritysetNamesetDaemon 方法为当前的安全管理器调用此方法。

如果 thread 参数是一个系统线程(属于具有一个 null 父线程的线程组),那么此方法使用 RuntimePermission("modifyThread") 权限调用 checkPermission。如果 thread 参数 是一个系统线程,则此方法不执行任何操作。

希望具有更为严格策略的应用程序应该重写此方法。如果重写此方法,那么重写它的方法应该进行额外的检查,查看调用线程是否具有 RuntimePermission("modifyThread") 权限,如果是,则此方法不执行任何操作。这样做是为了确保允许那些被授予该权限的代码(如 JDK 本身)能够操作所有线程。

如果重写此方法,那么应该由已重写方法中的第一条语句调用 super.checkAccess,或者应该在已重写方法中放入等效的安全检查代码。

参数:
t - 要检查的线程。
抛出:
SecurityException - 如果调用线程没有修改线程的权限。
NullPointerException - 如果线程参数为 null
另请参见:
resume, setDaemon, setName, setPriority, stop, suspend, checkPermission

checkAccess

public void checkAccess(ThreadGroup g)
如果不允许调用线程修改线程组参数,则抛出 SecurityException

当创建新的子线程或子线程组时,由 ThreadGroup 类的 setDaemonsetMaxPrioritystopsuspendresumedestroy 方法为当前的安全管理器调用此方法。

如果该线程组是一个系统线程组(具有 null 父线程),那么此方法使用 RuntimePermission("modifyThreadGroup") 权限调用 checkPermission。如果该线程组 是一个系统线程组,则此方法不执行任何操作。

希望具有更为严格策略的应用程序应该重写此方法。如果重写此方法,那么重写它的方法应该进行额外的检查,查看调用线程是否具有 RuntimePermission("modifyThreadGroup") 权限,如果是,则此方法不执行任何操作。这样做是为了确保允许那些被授予该权限的代码(如 JDK 本身)能够操作所有线程。

如果重写此方法,那么应该由已重写方法中的第一条语句调用 super.checkAccess,或者应该在已重写方法中放入等效的安全检查。

参数:
g - 要检查的线程组。
抛出:
SecurityException - 如果调用线程没有修改线程组的权限。
NullPointerException - 如果线程组参数为 null
另请参见:
destroy, resume, setDaemon, setMaxPriority, stop, suspend, checkPermission

checkExit

public void checkExit(int status)
如果不允许调用线程使用特定的状态码暂停 Java 虚拟机,则抛出 SecurityException

Runtime 类的 exit 方法为当前的安全管理器调用此方法。状态 0 表示成功,其他值则表示各种错误。

此方法用 RuntimePermission("exitVM") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkExit

参数:
status - 退出状态。
抛出:
SecurityException - 如果调用线程没有用指定的状态暂停 Java 虚拟机的权限。
另请参见:
exit, checkPermission

checkExec

public void checkExec(String cmd)
如果不允许调用线程创建一个子进程,则抛出 SecurityException

Runtime 类的 exec 方法为当前的安全管理器调用此方法。

如果 cmd 是绝对路径,那么此方法使用 FilePermission(cmd,"execute") 权限调用 checkPermission,否则用 FilePermission("<<ALL FILES>>","execute") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkExec

参数:
cmd - 指定的系统命令。
抛出:
SecurityException - 如果调用线程没有创建子进程的权限。
NullPointerException - 如果 cmd 参数为 null
另请参见:
Runtime.exec(java.lang.String), Runtime.exec(java.lang.String, java.lang.String[]), Runtime.exec(java.lang.String[]), Runtime.exec(java.lang.String[], java.lang.String[]), checkPermission

checkLink

public void checkLink(String lib)
如果不允许调用线程动态链接由字符串参数文件指定的库代码,则抛出 SecurityException。此方法中的参数可以是一个简单的库名,或者是一个完整的文件名。

Runtime 类的 loadloadLibrary 方法为当前的安全管理器调用此方法。

此方法用 RuntimePermission("loadLibrary."+lib) 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkLink

参数:
lib - 库名。
抛出:
SecurityException - 如果调用线程没有动态地链接该库的权限。
NullPointerException - 如果 lib 参数为 null
另请参见:
Runtime.load(java.lang.String), Runtime.loadLibrary(java.lang.String), checkPermission

checkRead

public void checkRead(FileDescriptor fd)
如果不允许调用线程从指定的文件描述符进行读取,则抛出 SecurityException

此方法用 RuntimePermission("readFileDescriptor") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkRead

参数:
fd - 取决于系统的文件描述符。
抛出:
SecurityException - 如果调用线程没有访问指定文件描述符的权限。
NullPointerException - 如果文件描述符参数为 null
另请参见:
FileDescriptor, checkPermission

checkRead

public void checkRead(String file)
如果不允许调用线程读取由字符串参数指定的文件,则抛出 SecurityException

此方法用 FilePermission(file,"read") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkRead

参数:
file - 取决于系统的文件名。
抛出:
SecurityException - 如果调用线程没有访问指定文件的权限。
NullPointerException - 如果 file 参数为 null
另请参见:
checkPermission

checkRead

public void checkRead(String file,
                      Object context)
如果不允许指定的安全上下文读取由字符串参数所指定的文件,则抛出 SecurityException。该上下文必须是以前调用 getSecurityContext 所返回的安全上下文。

如果 contextAccessControlContext 的一个实例,则用 FilePermission(file,"read") 权限调用 AccessControlContext.checkPermission 方法。

如果 context 不是 AccessControlContext 的一个实例,则抛出 SecurityException

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkRead

参数:
file - 取决于系统的文件名。
context - 取决于系统的安全上下文。
抛出:
SecurityException - 如果指定的安全上下文不是 AccessControlContext 的一个实例(如为 null),或者没有读取指定文件的权限。
NullPointerException - 如果 file 参数为 null
另请参见:
getSecurityContext(), AccessControlContext.checkPermission(java.security.Permission)

checkWrite

public void checkWrite(FileDescriptor fd)
如果不允许调用线程写入指定的文件描述符,则抛出 SecurityException

此方法用 RuntimePermission("writeFileDescriptor") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkWrite

参数:
fd - 取决于系统的文件描述符。
抛出:
SecurityException - 如果调用的方法没有访问指定文件描述符的权限。
NullPointerException - 如果文件描述符参数为 null
另请参见:
FileDescriptor, checkPermission

checkWrite

public void checkWrite(String file)
如果不允许调用线程写由字符串参数指定的文件,则抛出 SecurityException

此方法用 FilePermission(file,"write") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkWrite

参数:
file - 取决于系统的文件名。
抛出:
SecurityException - 如果调用线程没有访问指定文件的权限。
NullPointerException - 如果 file 参数为 null
另请参见:
checkPermission

checkDelete

public void checkDelete(String file)
如果不允许调用线程删除指定的文件,则抛出 SecurityException

File 类的 delete 方法为当前的安全管理器调用此方法。

此方法用 FilePermission(file,"delete") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkDelete

参数:
file - 取决于系统的文件名。
抛出:
SecurityException - 如果调用线程没有删除文件的权限。
NullPointerException - 如果 file 参数为 null
另请参见:
File.delete(), checkPermission

checkConnect

public void checkConnect(String host,
                         int port)
如果不允许调用线程打开到指定主机和端口号的套接字连接,则抛出 SecurityException

端口号 -1 表示调用的方法正在试图确定指定主机名的 IP 地址。

如果端口号不等于 -1,则此方法用 SocketPermission(host+":"+port,"connect") 权限调用 checkPermission。如果端口号等于 -1,则用 SocketPermission(host,"resolve") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkConnect

参数:
host - 要连接的主机名端口。
port - 要连接的协议端口。
抛出:
SecurityException - 如果不允许调用线程打开与指定 hostport 的套接字连接。
NullPointerException - 如果 host 参数为 null
另请参见:
checkPermission

checkConnect

public void checkConnect(String host,
                         int port,
                         Object context)
如果不允许指定的安全上下文打开与指定主机和端口号的套接字连接,则抛出 SecurityException

端口号 -1 表示调用的方法正试图确定指定主机名的 IP 地址。

如果 context 不是 AccessControlContext 的一个实例,则抛出 SecurityException

否则就检查端口号。如果端口号不等于 -1,则用 SocketPermission(host+":"+port,"connect") 权限调用 contextcheckPermission 方法。如果端口号等于 -1,则用 SocketPermission(host,"resolve") 权限调用 contextcheckPermission 方法。

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkConnect

参数:
host - 要连接的主机名端口。
port - 要连接的协议端口。
context - 取决于系统的安全上下文。
抛出:
SecurityException - 如果指定的安全上下文不是 AccessControlContext的一个实例(如为 null),或者不允许打开与指定 hostport 套接字连接。
NullPointerException - 如果 host 参数为 null
另请参见:
getSecurityContext(), AccessControlContext.checkPermission(java.security.Permission)

checkListen

public void checkListen(int port)
如果不允许调用线程等待与指定本地端口号进行连接的请求,则抛出 SecurityException

如果端口号不是 0,则此方法用 SocketPermission("localhost:"+port,"listen") 调用 checkPermission。如果端口号是 0,则此方法用 SocketPermission("localhost:1024-","listen") 调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkListen

参数:
port - 本地端口。
抛出:
SecurityException - 如果调用的方法没有侦听指定端口的权限。
另请参见:
checkPermission

checkAccept

public void checkAccept(String host,
                        int port)
如果不允许调用线程从指定的主机和端口号接受套接字连接,则抛出 SecurityException

ServerSocket 类的 accept 方法为当前的安全管理器调用此方法。

此方法用 SocketPermission(host+":"+port,"accept") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkAccept

参数:
host - 套接字连接的主机名。
port - 套接字连接的端口号。
抛出:
SecurityException - 如果调用线程没有接受连接的权限。
NullPointerException - 如果 host 参数为 null
另请参见:
ServerSocket.accept(), checkPermission

checkMulticast

public void checkMulticast(InetAddress maddr)
如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播,则抛出 SecurityException

此方法使用 java.net.SocketPermission(maddr.getHostAddress(), "accept,connect") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkMulticast

参数:
maddr - 要使用的 Internet 组地址。
抛出:
SecurityException - 如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播。
NullPointerException - 如果地址参数为 null
从以下版本开始:
JDK1.1
另请参见:
checkPermission

checkMulticast

@Deprecated
public void checkMulticast(InetAddress maddr,
                                      byte ttl)
已过时。 由 #checkPermission(java.security.Permission) 取代

如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播,则抛出 SecurityException

此方法用 java.net.SocketPermission(maddr.getHostAddress(), "accept,connect") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkMulticast

参数:
maddr - 要使用的 Internet 组地址。
ttl - 正在使用的值,如果是用多路广播发送的话。注:此特定实现不使用 ttl 参数。
抛出:
SecurityException - 如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播。
NullPointerException - 如果地址参数为 null
从以下版本开始:
JDK1.1
另请参见:
checkPermission

checkPropertiesAccess

public void checkPropertiesAccess()
如果不允许调用线程访问或修改系统属性,则抛出 SecurityException

System 类的 getPropertiessetProperties 方法使用此方法。

此方法用 PropertyPermission("*", "read,write") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkPropertiesAccess

抛出:
SecurityException - 如果调用线程没有访问或修改系统属性的权限。
另请参见:
System.getProperties(), System.setProperties(java.util.Properties), checkPermission

checkPropertyAccess

public void checkPropertyAccess(String key)
如果不允许调用线程访问具有指定的 key 名的系统属性,则抛出 SecurityException

System 类的 getProperty 方法使用此方法。

此方法用 PropertyPermission(key, "read") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkPropertyAccess

参数:
key - key 系统属性。
抛出:
SecurityException - 如果调用线程没有访问指定系统属性的权限。
NullPointerException - 如果 key 参数为 null
IllegalArgumentException - 如果 key 为空。
另请参见:
System.getProperty(java.lang.String), checkPermission

checkTopLevelWindow

public boolean checkTopLevelWindow(Object window)
如果不受信任的调用线程调出由 window 参数指出的顶层窗口,则返回 false。在这种情况下,调用方仍然可以决定显示窗口,但窗口应包括某些可视的警告。如果此方法返回 true,则窗口的显示没有任何特殊的限制。

有关受信任和不受信任窗口的更多信息,请参见 Window 类。

此方法用 AWTPermission("showWindowWithoutWarningBanner") 权限调用 checkPermission,并且如果未抛出 SecurityException,则返回 true,否则返回 false

如果重写此方法,那么通常应该在已重写方法将要返回 false 时调用 super.checkTopLevelWindow,并且应该返回 super.checkTopLevelWindow 值。

参数:
window - 所创建的新窗口。
返回:
如果信任的调用线程弹出顶层窗口,则返回 true,否则返回 false
抛出:
NullPointerException - 如果 window 参数为 null
另请参见:
Window, checkPermission

checkPrintJobAccess

public void checkPrintJobAccess()
如果不允许调用线程发起一个打印作业请求,则抛出 SecurityException

此方法用 RuntimePermission("queuePrintJob") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkPrintJobAccess

抛出:
SecurityException - 如果调用线程没有发起打印作业请求的权限。
从以下版本开始:
JDK1.1
另请参见:
checkPermission

checkSystemClipboardAccess

public void checkSystemClipboardAccess()
如果不允许调用线程访问系统剪贴板,则抛出 SecurityException

此方法用 AWTPermission("accessClipboard") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkSystemClipboardAccess

抛出:
SecurityException - 如果调用线程没有访问系统剪贴板的权限。
从以下版本开始:
JDK1.1
另请参见:
checkPermission

checkAwtEventQueueAccess

public void checkAwtEventQueueAccess()
如果不允许调用线程访问 AWT 事件队列,则抛出 SecurityException

此方法用 AWTPermission("accessEventQueue") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkAwtEventQueueAccess

抛出:
SecurityException - 如果调用线程没有访问 AWT 事件队列的权限。
从以下版本开始:
JDK1.1
另请参见:
checkPermission

checkPackageAccess

public void checkPackageAccess(String pkg)
如果不允许调用线程访问由参数指定的包,则抛出 SecurityException

由类加载器的 loadClass 方法使用此方法。

此方法首先获得受限制包的列表,方法是从对 java.security.Security.getProperty("package.access") 的调用中获取一个逗号分隔的列表,并查看受限制包是否以 pkg 开头或等于该字符。如果是,则用 RuntimePermission("accessClassInPackage."+pkg) 权限调用 checkPermission

如果重写了此方法,则应在已重写方法的首行调用 super.checkPackageAccess

参数:
pkg - 包名。
抛出:
SecurityException - 如果调用线程没有访问指定包的权限。
NullPointerException - 如果包名参数为 null
另请参见:
loadClass, getProperty, checkPermission

checkPackageDefinition

public void checkPackageDefinition(String pkg)
如果不允许调用线程在参数指定的包中定义类,则抛出 SecurityException

由类加载器的 loadClass 方法使用此方法。

此方法首先获得受限制包的列表,方法是从对 java.security.Security.getProperty("package.definition") 的调用中获取一个逗号分隔的列表,并查看受限制包是否以 pkg 开头或等于该字符。如果是,则用 RuntimePermission("defineClassInPackage."+pkg) 权限调用 checkPermission

如果重写了此方法,则应在已重写方法的首行调用 super.checkPackageDefinition

参数:
pkg - 包名。
抛出:
SecurityException - 如果调用线程没有在指定包中定义类的权限。
另请参见:
ClassLoader.loadClass(java.lang.String, boolean), getProperty, checkPermission

checkSetFactory

public void checkSetFactory()
如果不允许调用线程设置由 ServerSocketSocket 使用的套接字工厂,或者由 URL 使用的流处理程序工厂,则抛出 SecurityException

此方法用 RuntimePermission("setFactory") 权限调用 checkPermission

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkSetFactory

抛出:
SecurityException - 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。
另请参见:
setSocketFactory, setSocketImplFactory, setURLStreamHandlerFactory, checkPermission

checkMemberAccess

public void checkMemberAccess(Class<?> clazz,
                              int which)
如果不允许调用线程访问程序,则抛出 SecurityException

默认的策略是允许访问 PUBLIC 成员,以及访问具有与调用方相同类加载器的类。在所有其他情况下,此方法用 RuntimePermission("accessDeclaredMembers") 权限调用 checkPermission

如果重写此方法,则不能调用 super.checkMemberAccess,因为 checkMemberAccess 的默认实现依赖于堆栈深度为 4 时检查的代码。

参数:
clazz - 要执行反射的类。
which - 访问类型,PUBLIC 或 DECLARED。
抛出:
SecurityException - 如果调用方没有访问成员的权限。
NullPointerException - 如果 clazz 参数为 null
从以下版本开始:
JDK1.1
另请参见:
Member, checkPermission

checkSecurityAccess

public void checkSecurityAccess(String target)
确定是应该允许还是拒绝具有指定权限目标名的权限。

如果允许请求的权限,则此方法不执行任何操作。如果拒绝,则引发 SecurityException。

此方法为给定权限的目标名创建一个 SecurityPermission 对象并用该对象调用 checkPermission

有关可用权限目标名的列表,请参阅 SecurityPermission 的文档。

如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkSecurityAccess

参数:
target - SecurityPermission 的目标名。
抛出:
SecurityException - 如果调用线程没有所请求访问的权限。
NullPointerException - 如果 target 为 null。
IllegalArgumentException - 如果 target 为空。
从以下版本开始:
JDK1.1
另请参见:
checkPermission

getThreadGroup

public ThreadGroup getThreadGroup()
调用此方法时,返回所有新创建的线程实例化后所在的线程组。默认情况下,返回当前线程所在的线程组。应该由指定的安全管理器重写此方法,以返回适当的线程组。

返回:
ThreadGroup 新线程被实例化后所在的线程组
从以下版本开始:
JDK1.1
另请参见:
ThreadGroup

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策