- 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
。当前的安全管理由设置
setSecurityManager
类方法System
。 目前的安全管理员是通过getSecurityManager
方法获得的。特殊方法
checkPermission(java.security.Permission)
确定是否应该授予或拒绝由指定的权限指示的访问请求。 默认实现调用AccessController.checkPermission(perm);
如果允许请求的访问权限,
checkPermission
静静地返回。 如果被拒绝,则抛出一个SecurityException
。从Java 2 SDK v1.2开始,每个其他的默认实现
check
的方法SecurityManager
是调用SecurityManager checkPermission
方法来确定调用线程具有执行所请求的操作的权限。请注意,仅具有单个权限参数的
checkPermission
方法始终在当前正在执行的线程的上下文中执行安全检查。 有时,在特定上下文中应该进行的安全检查实际上需要在不同的上下文(例如,从工作线程中)完成。 为这种情况提供了包含上下文参数的getSecurityContext
方法和checkPermission
方法。getSecurityContext
方法返回当前调用上下文的“快照”。 (默认实现返回一个AccessControlContext对象。)示例调用如下:Object context = null; SecurityManager sm = System.getSecurityManager(); if (sm != null) context = sm.getSecurityContext();
除了权限之外,还需要一个上下文对象的
checkPermission
方法使得基于该上下文而不是当前执行线程的访问决策。 因此,不同上下文中的代码可以调用该方法,传递权限和先前保存的上下文对象。 使用前面示例中获得的SecurityManagersm
示例呼叫如下所示:if (sm != null) sm.checkPermission(permission, context);
权限属于这些类别:文件,套接字,网络,安全,运行时,属性,AWT,反射和可序列化。 管理这些不同的权限类别类是
java.io.FilePermission
,java.net.SocketPermission
,java.net.NetPermission
,java.security.SecurityPermission
,java.lang.RuntimePermission
,java.util.PropertyPermission
,java.awt.AWTPermission
,java.lang.reflect.ReflectPermission
,并java.io.SerializablePermission
。除了前两个(FilePermission和SocketPermission)之外的所有内容都是
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
所有权限的java.security.AllPermission
权限。 它存在以简化可能需要执行需要所有(或多个)权限的多个任务的系统管理员的工作。有关权限相关信息,请参阅Permissions in the Java Development Kit (JDK) 。 本文档包括例如列出各种SecurityManager
check
方法的表以及每种此类方法的默认实现所需的权限。 它还包含需要权限的所有版本1.2方法的表,并且对于每个这样的方法来说明它需要哪个权限。- 从以下版本开始:
- 1.0
- 另请参见:
-
ClassLoader
,SecurityException
,getSecurityManager
,setSecurityManager
,AccessController
,AccessControlContext
,AccessControlException
,Permission
,BasicPermission
,FilePermission
,SocketPermission
,PropertyPermission
,RuntimePermission
,AWTPermission
,Policy
,SecurityPermission
,ProtectionDomain
-
-
Field Summary
Fields Modifier and Type Field 描述 protected boolean
inCheck
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此字段在将来的Java SE版本中可能会被删除。
-
构造方法摘要
构造方法 Constructor 描述 SecurityManager()
构造新的SecurityManager
。
-
方法摘要
所有方法 接口方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 void
checkAccept(String host, int port)
如果调用线程不允许从指定的主机和端口号接受套接字连接,则抛出一个SecurityException
。void
checkAccess(Thread t)
如果调用线程不允许修改线程参数,则抛出一个SecurityException
。void
checkAccess(ThreadGroup g)
如果调用线程不允许修改线程组参数,则抛出一个SecurityException
。void
checkAwtEventQueueAccess()
不推荐用于删除:此API元素将在以后的版本中被删除。此方法最初用于检查调用线程是否可以访问AWT事件队列。 该方法已被废弃,代码应使用checkPermission(java.security.Permission)
检查AWTPermission("accessEventQueue")
。 此方法在将来的Java SE版本中可能会被删除。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)
不推荐用于删除:此API元素将在以后的版本中被删除。该方法依赖于调用者的堆栈深度为4,容易出错,并且不能由运行时执行。 该方法的用户应直接调用checkPermission(java.security.Permission)
。 此方法在将来的Java SE版本中可能会被删除。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()
抛出SecurityException
如果调用线程不允许设置由使用的套接字工厂ServerSocket
或者Socket
,或使用的流处理程序工厂URL
。void
checkSystemClipboardAccess()
不推荐用于删除:此API元素将在以后的版本中被删除。该方法最初用于检查调用线程是否可以访问系统剪贴板。 该方法已经过时,代码应该使用checkPermission(java.security.Permission)
来检查AWTPermission("accessClipboard")
。 此方法在将来的Java SE版本中可能会被删除。boolean
checkTopLevelWindow(Object window)
不推荐用于删除:此API元素将在以后的版本中被删除。该方法最初用于检查调用线程是否被信任以启动顶级窗口。 该方法已被废弃,代码应该使用checkPermission(java.security.Permission)
来检查AWTPermission("showWindowWithoutWarningBanner")
。 此方法在将来的Java SE版本中可能会被删除。void
checkWrite(FileDescriptor fd)
如果调用线程不允许写入指定的SecurityException
则抛出一个SecurityException
。void
checkWrite(String file)
如果调用线程不允许写入由字符串参数指定的文件,则抛出一个SecurityException
。protected int
classDepth(String name)
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。protected int
classLoaderDepth()
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。protected ClassLoader
currentClassLoader()
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。protected Class<?>
currentLoadedClass()
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。protected Class<?>[]
getClassContext()
将当前执行堆栈作为一个类的数组返回。boolean
getInCheck()
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。Object
getSecurityContext()
创建封装当前执行环境的对象。ThreadGroup
getThreadGroup()
返回要在其被调用时实例化任何正在创建的新线程的线程组。protected boolean
inClass(String name)
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。protected boolean
inClassLoader()
不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。
-
-
-
字段详细信息
-
inCheck
@Deprecated(since="1.2", forRemoval=true) protected boolean inCheck
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此字段在将来的Java SE版本中可能会被删除。如果正在进行安全检查,该字段为true
;false
否则。
-
-
构造方法详细信息
-
SecurityManager
public SecurityManager()
构造新的SecurityManager
。如果已经安装了安全管理器,则该方法首先使用
RuntimePermission("createSecurityManager")
权限调用安全管理器的checkPermission
方法,以确保调用线程有权创建新的安全管理器。 这可能会导致抛出一个SecurityException
。- 异常
-
SecurityException
- 如果安全管理器已经存在,并且其checkPermission
方法不允许创建新的安全管理器。 - 另请参见:
-
System.getSecurityManager()
,checkPermission
,RuntimePermission
-
-
方法详细信息
-
getInCheck
@Deprecated(since="1.2", forRemoval=true) public boolean getInCheck()
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
呼叫。 此方法在将来的Java SE版本中可能会被删除。测试是否有正在进行的安全检查。- 结果
-
该值为
inCheck
字段。 如果安全检查正在进行中,则此字段应包含true
,否则为false
。 - 另请参见:
-
inCheck
-
getClassContext
protected Class<?>[] getClassContext()
将当前执行堆栈作为一个类的数组返回。数组的长度是执行堆栈上的方法数。 索引
0
为0
的元素是当前执行方法的类,索引1
为1
的元素是该方法的调用者的类,依此类推。- 结果
- 执行堆栈。
-
currentClassLoader
@Deprecated(since="1.2", forRemoval=true) protected ClassLoader currentClassLoader()
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。从使用非系统类加载器定义的类返回最近执行的方法的类加载器。 非系统类加载器被定义为不等于系统类加载器(由ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。在以下三种情况下,此方法将返回
null
:- 执行堆栈上的所有方法都是使用系统类加载器或其祖先之一定义的类。
- 执行堆栈上的所有方法直到第一个“特权”调用者(见
AccessController.doPrivileged(java.security.PrivilegedAction<T>)
)都是使用系统类加载器或其祖先之一定义的类。 - 调用
checkPermission
与java.security.AllPermission
不会导致SecurityException。
- 结果
- 类加载器最近发生的堆栈中的方法来自使用非系统类加载器定义的类。
- 另请参见:
-
getSystemClassLoader
,checkPermission
-
currentLoadedClass
@Deprecated(since="1.2", forRemoval=true) protected Class<?> currentLoadedClass()
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。从使用非系统类加载器定义的类中返回最近执行的方法的类。 非系统类加载器被定义为不等于系统类加载器(由ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。在以下三种情况下,此方法将返回
null
:- 执行堆栈上的所有方法都是使用系统类加载器或其祖先之一定义的类。
- 执行堆栈上的所有方法直到第一个“特权”调用者(见
AccessController.doPrivileged(java.security.PrivilegedAction<T>)
)都是使用系统类加载器或其祖先之一定义的类。 - 对
checkPermission
与java.security.AllPermission
调用不会导致SecurityException。
- 结果
- 来自使用非系统类加载器定义的类的方法的堆栈上最近出现的类。
- 另请参见:
-
getSystemClassLoader
,checkPermission
-
classDepth
@Deprecated(since="1.2", forRemoval=true) protected int classDepth(String name)
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
调用。 此方法在将来的Java SE版本中可能会被删除。返回指定类的堆栈深度。- 参数
-
name
- 要搜索的类的完全限定名称。 - 结果
-
第一次发生堆栈框架的深度来自具有指定名称的类的方法;
-1
如果没有找到这样的框架。
-
classLoaderDepth
@Deprecated(since="1.2", forRemoval=true) protected int classLoaderDepth()
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
调用。 此方法在将来的Java SE版本中可能会被删除。从使用非系统类加载器定义的类中返回最近执行的方法的堆栈深度。 非系统类加载器被定义为不等于系统类加载器(由ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。在以下三种情况下,此方法将返回-1:
- 执行堆栈上的所有方法都是使用系统类加载器或其祖先之一定义的类。
- 第一个“特权”调用者(见
AccessController.doPrivileged(java.security.PrivilegedAction<T>)
)的执行堆栈上的所有方法来自使用系统类加载器或其祖先之一定义的类。 - 对
checkPermission
与java.security.AllPermission
调用不会导致SecurityException。
- 结果
- 最近发生的堆栈框架中的深度来自使用非系统类加载器定义的类的方法。
- 另请参见:
-
getSystemClassLoader
,checkPermission
-
inClass
@Deprecated(since="1.2", forRemoval=true) protected boolean inClass(String name)
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。测试来自具有指定名称的类的方法是否在执行堆栈上。- 参数
-
name
- 类的完全限定名称。 - 结果
-
true
如果来自具有指定名称的类的方法在执行堆栈上; 否则为false
。
-
inClassLoader
@Deprecated(since="1.2", forRemoval=true) protected boolean inClassLoader()
不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission
通话。 此方法在将来的Java SE版本中可能会被删除。基本上,测试来自使用类加载器定义的类的方法是否在执行堆栈上。- 结果
-
true
如果对currentClassLoader
的调用具有非空返回值。 - 另请参见:
-
currentClassLoader
-
getSecurityContext
public Object getSecurityContext()
创建封装当前执行环境的对象。 该方法的结果例如由三参数checkConnect
方法和双参数checkRead
方法使用。 需要这些方法,因为可以调用可信方法来读取文件或代替其他方法打开套接字。 可信方法需要确定是否允许其他(可能不受信任的)方法自行执行该操作。此方法的默认实现是返回一个
AccessControlContext
对象。- 结果
- 一个依赖于实现的对象,封装了有关当前执行环境的足够信息,以便稍后执行一些安全检查。
- 另请参见:
-
checkConnect
,checkRead
,AccessControlContext
-
checkPermission
public void checkPermission(Permission perm)
如果根据当前有效的安全策略不允许指定的权限指定的请求访问,则抛出一个SecurityException
。此方法通过给定的权限调用
AccessController.checkPermission
。- 参数
-
perm
- 请求的权限。 - 异常
-
SecurityException
- 如果不允许基于当前安全策略访问。 -
NullPointerException
- 如果权限参数是null
。 - 从以下版本开始:
- 1.2
-
checkPermission
public void checkPermission(Permission perm, Object context)
如果指定的安全上下文被拒绝访问由给定权限指定的资源,则抛出一个SecurityException
。 上下文必须是先前调用getSecurityContext
返回的安全上下文,并且访问控制决定基于针对该安全上下文的配置的安全策略。如果
context
是实例AccessControlContext
则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
。此方法调用
checkPermission
的权限RuntimePermission("createClassLoader")
。如果你重写这个方法,那么你应该调用
super.checkCreateClassLoader
,这样一来,被覆盖的方法通常会引发异常。- 异常
-
SecurityException
- 如果调用线程没有创建新类加载器的权限。 - 另请参见:
-
ClassLoader()
,checkPermission
-
checkAccess
public void checkAccess(Thread t)
如果调用线程不允许修改线程参数,则抛出一个SecurityException
。此方法被调用为当前的安全管理
stop
,suspend
,resume
,setPriority
,setName
,并setDaemon
类的方法Thread
。如果线程参数是系统线程(属于具有
null
父进程的线程组),则该方法调用checkPermission
与RuntimePermission("modifyThread")
权限。 如果线程参数不是系统线程,则该方法只是静默地返回。想要更严格政策的应用程序应该覆盖此方法。 如果该方法被覆盖,则覆盖它的方法还应该检查调用线程是否具有
RuntimePermission("modifyThread")
权限,如果是,则默认返回。 这是为了确保授予该权限的代码(如JDK本身)被允许操纵任何线程。如果这个方法被覆盖,那么
super.checkAccess
应该被覆盖方法中的第一个语句调用,或者等效的安全检查应该放在被覆盖的方法中。- 参数
-
t
- 要检查的线程。 - 异常
-
SecurityException
- 如果调用线程没有修改线程的权限。 -
NullPointerException
- 如果线程参数是null
。 - 另请参见:
-
resume
,setDaemon
,setName
,setPriority
,stop
,suspend
,checkPermission
-
checkAccess
public void checkAccess(ThreadGroup g)
如果调用线程不允许修改线程组参数,则抛出一个SecurityException
。这种方法被调用为当前的安全管理器创建一个新的子线程或子线程组时,以及由
setDaemon
,setMaxPriority
,stop
,suspend
,resume
,并destroy
类的方法ThreadGroup
。如果线程组参数是系统线程组(有一个
null
父级),则该方法调用checkPermission
与RuntimePermission("modifyThreadGroup")
权限。 如果线程组参数不是系统线程组,则此方法只是静默地返回。想要更严格政策的应用程序应该覆盖此方法。 如果该方法被覆盖,则覆盖它的方法还应该检查调用线程是否具有
RuntimePermission("modifyThreadGroup")
权限,如果是,则默认返回。 这是为了确保授予该权限的代码(如JDK本身)被允许操纵任何线程。如果这个方法被覆盖,那么
super.checkAccess
应该被覆盖方法中的第一个语句调用,或者等效的安全检查应该被放在被覆盖的方法中。- 参数
-
g
- 要检查的线程组。 - 异常
-
SecurityException
- 如果调用线程没有修改线程组的权限。 -
NullPointerException
- 如果线程组参数是null
。 - 另请参见:
-
destroy
,resume
,setDaemon
,setMaxPriority
,stop
,suspend
,checkPermission
-
checkExit
public void checkExit(int status)
如果不允许调用线程使Java虚拟机停止指定的状态代码,则抛出一个SecurityException
。此方法被调用为当前的安全管理
exit
类的方法Runtime
。 状态0
表示成功; 其他值表示各种错误。此方法调用
checkPermission
与RuntimePermission("exitVM."+status)
权限。如果您重写此方法,那么您应该调用
super.checkExit
,在重写方法通常会引发异常的时候。- 参数
-
status
- 退出状态。 - 异常
-
SecurityException
- 如果调用线程没有权限停止具有指定状态的Java虚拟机。 - 另请参见:
-
exit
,checkPermission
-
checkExec
public void checkExec(String cmd)
如果调用线程不允许创建子进程,则抛出一个SecurityException
。此方法被调用为当前的安全管理
exec
类的方法Runtime
。如果cmd是绝对路径,此方法调用
checkPermission
的FilePermission(cmd,"execute")
权限,否则调用checkPermission
与FilePermission("<<ALL FILES>>","execute")
。如果您重写此方法,那么您应该调用
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
。 参数是简单的库名称或完整的文件名。该方法通过
load
和loadLibrary
的类别为Runtime
方法为当前安全管理器调用。此方法调用
checkPermission
与RuntimePermission("loadLibrary."+lib)
权限。如果您重写此方法,那么您应该拨打
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
。此方法调用
checkPermission
与RuntimePermission("readFileDescriptor")
权限。如果您重写此方法,那么您应该在覆盖方法通常会引发异常的时候调用
super.checkRead
。- 参数
-
fd
- 依赖系统的文件描述符。 - 异常
-
SecurityException
- 如果调用线程没有权限访问指定的文件描述符。 -
NullPointerException
- 如果文件描述符参数是null
。 - 另请参见:
-
FileDescriptor
,checkPermission
-
checkRead
public void checkRead(String file)
如果调用线程不允许读取由字符串参数指定的文件,则抛出一个SecurityException
。此方法调用
checkPermission
与FilePermission(file,"read")
权限。如果您重写此方法,那么您应该拨打
super.checkRead
,因为重写方法通常会引发异常。- 参数
-
file
- 与系统相关的文件名。 - 异常
-
SecurityException
- 如果调用线程没有访问指定文件的权限。 -
NullPointerException
- 如果file
参数是null
。 - 另请参见:
-
checkPermission
-
checkRead
public void checkRead(String file, Object context)
如果指定的安全上下文不允许读取由字符串参数指定的文件,则抛出一个SecurityException
。 上下文必须是由先前调用getSecurityContext
返回的安全上下文。如果
context
是实例AccessControlContext
那么AccessControlContext.checkPermission
方法将与被调用FilePermission(file,"read")
许可。如果
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
则抛出一个SecurityException
。此方法调用
checkPermission
与RuntimePermission("writeFileDescriptor")
权限。如果您重写此方法,那么您应该调用
super.checkWrite
,这样一来,重写方法通常会引发异常。- 参数
-
fd
- 依赖系统的文件描述符。 - 异常
-
SecurityException
- 如果调用线程没有访问指定文件描述符的权限。 -
NullPointerException
- 如果文件描述符参数是null
。 - 另请参见:
-
FileDescriptor
,checkPermission
-
checkWrite
public void checkWrite(String file)
如果调用线程不允许写入由字符串参数指定的文件,则抛出一个SecurityException
。此方法调用
checkPermission
与FilePermission(file,"write")
权限。如果你重写这个方法,那么你应该调用
super.checkWrite
,这样一来,被覆盖的方法通常会引发异常。- 参数
-
file
- 系统相关的文件名。 - 异常
-
SecurityException
- 如果调用线程没有访问指定文件的权限。 -
NullPointerException
- 如果file
参数是null
。 - 另请参见:
-
checkPermission
-
checkDelete
public void checkDelete(String file)
如果调用线程不允许删除指定的文件,则抛出一个SecurityException
。此方法被调用为当前的安全管理
delete
类的方法File
。此方法调用
checkPermission
与FilePermission(file,"delete")
权限。如果您重写此方法,那么您应该拨打
super.checkDelete
,因为重写方法通常会引发异常。- 参数
-
file
- 与系统相关的文件名。 - 异常
-
SecurityException
- 如果调用线程没有删除该文件的权限。 -
NullPointerException
- 如果file
参数是null
。 - 另请参见:
-
File.delete()
,checkPermission
-
checkConnect
public void checkConnect(String host, int port)
如果调用线程不允许打开与指定主机和端口号的套接字连接,则抛出一个SecurityException
。端口号
-1
表示调用方法正在尝试确定指定主机名的IP地址。如果端口不等于-1,则此方法调用
checkPermission
的SocketPermission(host+":"+port,"connect")
权限。 如果端口等于-1,则通过SocketPermission(host,"resolve")
权限调用checkPermission
。如果你重写这个方法,那么你应该调用
super.checkConnect
,这样一来,被覆盖的方法通常会抛出异常。- 参数
-
host
- 要连接到的主机名端口。 -
port
- 要连接的协议端口。 - 异常
-
SecurityException
- 如果调用线程没有权限打开到指定的host
和port
的套接字连接。 -
NullPointerException
- 如果host
参数是null
。 - 另请参见:
-
checkPermission
-
checkConnect
public void checkConnect(String host, int port, Object context)
如果指定的安全上下文不允许打开到指定的主机和端口号的套接字连接,则抛出一个SecurityException
。端口号
-1
表示调用方法正在尝试确定指定主机名的IP地址。如果
context
不是一个实例AccessControlContext
然后SecurityException
被抛出。否则,将检查端口号。 如果不等于-1,则
context
的checkPermission
方法通过SocketPermission(host+":"+port,"connect")
权限进行调用。 如果端口等于-1,则context
的checkPermission
方法被调用,具有SocketPermission(host,"resolve")
权限。如果您重写此方法,那么您应该在覆盖方法通常会引发异常的时候调用
super.checkConnect
。- 参数
-
host
- 要连接的主机名端口。 -
port
- 要连接的协议端口。 -
context
- 依赖于系统的安全上下文。 - 异常
-
SecurityException
- 如果指定的安全上下文不是AccessControlContext
的实例(例如,是null
),或者没有权限打开到指定的host
和port
的套接字连接。 -
NullPointerException
- 如果host
参数是null
。 - 另请参见:
-
getSecurityContext()
,AccessControlContext.checkPermission(java.security.Permission)
-
checkListen
public void checkListen(int port)
如果调用线程不允许在指定的本地端口号上等待连接请求,则抛出一个SecurityException
。此方法调用
checkPermission
与SocketPermission("localhost:"+port,"listen")
。如果您重写此方法,那么您应该拨打
super.checkListen
,在重写方法通常会引发异常的时候。- 参数
-
port
- 当地港口。 - 异常
-
SecurityException
- 如果调用线程没有在指定端口上侦听的权限。 - 另请参见:
-
checkPermission
-
checkAccept
public void checkAccept(String host, int port)
如果调用线程不允许从指定的主机和端口号接受套接字连接,则抛出一个SecurityException
。此方法被调用为当前的安全管理
accept
类的方法ServerSocket
。此方法调用
checkPermission
与SocketPermission(host+":"+port,"accept")
权限。如果您重写此方法,那么您应该拨打
super.checkAccept
,这样一来,覆盖方法通常会引发异常。- 参数
-
host
- 套接字连接的主机名。 -
port
- 套接字连接的端口号。 - 异常
-
SecurityException
- 如果调用线程没有权限接受连接。 -
NullPointerException
- 如果host
参数是null
。 - 另请参见:
-
ServerSocket.accept()
,checkPermission
-
checkMulticast
public void checkMulticast(InetAddress maddr)
如果调用线程不允许使用(加入/离开/发送/接收)IP组播,则抛出一个SecurityException
。这个方法调用
checkPermission
与java.net.SocketPermission(maddr.getHostAddress(), "accept,connect")
权限。如果你重写这个方法,那么你应该调用
super.checkMulticast
,这样一来,被覆盖的方法通常会抛出异常。- 参数
-
maddr
- 要使用的互联网组地址。 - 异常
-
SecurityException
- 如果调用线程不允许使用(加入/离开/发送/接收)IP组播。 -
NullPointerException
- 如果地址参数是null
。 - 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
checkMulticast
@Deprecated(since="1.4") public void checkMulticast(InetAddress maddr, byte ttl)
已过时。 请改用#checkPermission(java.security.Permission)如果调用线程不允许使用(加入/离开/发送/接收)IP组播,则抛出一个SecurityException
。此方法调用
checkPermission
与java.net.SocketPermission(maddr.getHostAddress(), "accept,connect")
权限。如果您重写此方法,那么您应该拨打
super.checkMulticast
,这样一来,覆盖的方法通常会引发异常。- 参数
-
maddr
- 要使用的互联网组地址。 -
ttl
- 正在使用的值,如果是多播发送。 注意:这个特定的实现不使用ttl参数。 - 异常
-
SecurityException
- 如果调用线程不允许使用(加入/离开/发送/接收)IP多播。 -
NullPointerException
- 如果地址参数是null
。 - 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
checkPropertiesAccess
public void checkPropertiesAccess()
如果调用线程不允许访问或修改系统属性,则抛出一个SecurityException
。这种方法是由
getProperties
和setProperties
方法用于System
。此方法调用
checkPermission
与PropertyPermission("*", "read,write")
权限。如果您重写此方法,那么您应该拨打
super.checkPropertiesAccess
,这样一来,覆盖的方法通常会引发异常。- 异常
-
SecurityException
- 如果调用线程没有访问或修改系统属性的权限。 - 另请参见:
-
System.getProperties()
,System.setProperties(java.util.Properties)
,checkPermission
-
checkPropertyAccess
public void checkPropertyAccess(String key)
如果调用线程不允许访问具有指定的key
名称的系统属性,则抛出一个SecurityException
。此方法由使用的
getProperty
类的方法System
。该方法调用
checkPermission
与PropertyPermission(key, "read")
权限。如果您覆盖此方法,那么您应该拨打
super.checkPropertyAccess
,因为覆盖的方法通常会引发异常。- 参数
-
key
- 系统属性键。 - 异常
-
SecurityException
- 如果调用线程没有访问指定的系统属性的权限。 -
NullPointerException
- 如果key
参数是null
。 -
IllegalArgumentException
- 如果key
为空。 - 另请参见:
-
System.getProperty(java.lang.String)
,checkPermission
-
checkTopLevelWindow
@Deprecated(since="1.8", forRemoval=true) public boolean checkTopLevelWindow(Object window)
不推荐用于删除:此API元素将在以后的版本中被删除。 该方法最初用于检查调用线程是否被信任以启动顶级窗口。 该方法已被废弃,代码应该使用checkPermission(java.security.Permission)
来检查AWTPermission("showWindowWithoutWarningBanner")
。 此方法在将来的Java SE版本中可能会被删除。返回true
如果调用线程具有AllPermission
。- 参数
-
window
- 未使用,除了检查是否是null
。 - 结果
-
true
如果调用线程有AllPermission
。 - 异常
-
NullPointerException
- 如果window
参数是null
。 - 另请参见:
-
checkPermission
-
checkPrintJobAccess
public void checkPrintJobAccess()
如果调用线程不允许启动打印作业请求,则抛出一个SecurityException
。此方法调用
checkPermission
与RuntimePermission("queuePrintJob")
权限。如果您重写此方法,那么您应该调用
super.checkPrintJobAccess
,这样一来,覆盖的方法通常会引发异常。- 异常
-
SecurityException
- 如果调用线程没有启动打印作业请求的权限。 - 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
checkSystemClipboardAccess
@Deprecated(since="1.8", forRemoval=true) public void checkSystemClipboardAccess()
不推荐用于删除:此API元素将在以后的版本中被删除。 该方法最初用于检查调用线程是否可以访问系统剪贴板。 该方法已经过时,代码应该使用checkPermission(java.security.Permission)
来检查AWTPermission("accessClipboard")
。 此方法在将来的Java SE版本中可能会被删除。如果调用线程没有SecurityException
则抛出AllPermission
。- 异常
-
SecurityException
- 如果调用线程没有AllPermission
- 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
checkAwtEventQueueAccess
@Deprecated(since="1.8", forRemoval=true) public void checkAwtEventQueueAccess()
不推荐用于删除:此API元素将在以后的版本中被删除。 此方法最初用于检查调用线程是否可以访问AWT事件队列。 该方法已经过时,代码应该使用checkPermission(java.security.Permission)
来检查AWTPermission("accessEventQueue")
。 此方法在将来的Java SE版本中可能会被删除。如果调用线程没有SecurityException
则抛出AllPermission
。- 异常
-
SecurityException
- 如果调用线程没有AllPermission
- 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
checkPackageAccess
public void checkPackageAccess(String pkg)
如果调用线程不允许访问指定的包,则抛出一个SecurityException
。在加载类时,此方法可以由类加载器和Java虚拟机的
loadClass
方法调用,以确保允许调用者访问正在加载的类的包。此方法检查指定的包是否以
package.access
安全属性中的任何包开始或等于任何包。 实施方案还可以根据下面所述的限制包的附加列表检查包裹。 如果包裹受到限制,checkPermission(Permission)
被授权用RuntimePermission("accessClassInPackage."+pkg)
。如果该方法被覆盖,那么
super.checkPackageAccess
应该被调用为覆盖方法的第一行。- Implementation Note:
- 此实现还限制了由the platform class loader或其祖先加载的所有未导出的模块包。 “未导出的包”是指未导出到所有模块的包。 具体来说,它指的是一个包不被其包含的模块导出,或者通过其包含模块以合格的方式导出的包。
- 参数
-
pkg
- 包名称。 - 异常
-
SecurityException
- 如果调用线程没有访问指定包的权限。 -
NullPointerException
- 如果包名参数是null
。 - 另请参见:
-
loadClass
,getProperty
,checkPermission
-
checkPackageDefinition
public void checkPackageDefinition(String pkg)
如果调用线程不允许在指定的包中定义类,则抛出一个SecurityException
。这种方法被某些类加载器的
loadClass
方法调用。此方法检查指定的包是否以
package.definition
安全属性中的任何包开始或等于任何包。 实施方案还可以根据下面所述的限制包的附加列表检查包裹。 如果包裹受到限制,checkPermission(Permission)
被授权与一个RuntimePermission("defineClassInPackage."+pkg)
权限。如果这个方法被覆盖,那么
super.checkPackageDefinition
应该被调用为覆盖方法的第一行。- Implementation Note:
- 此实现还限制了由the platform class loader或其祖先加载的所有未导出的模块包。 “未导出的包”是指未导出到所有模块的包。 具体来说,它指的是一个包不被其包含的模块导出,或者通过其包含模块以合格的方式导出的包。
- 参数
-
pkg
- 包名称。 - 异常
-
SecurityException
- 如果调用线程没有在指定的包中定义类的权限。 -
NullPointerException
- 如果包名参数是null
。 - 另请参见:
-
ClassLoader.loadClass(String, boolean)
,getProperty
,checkPermission
-
checkSetFactory
public void checkSetFactory()
抛出SecurityException
如果调用线程不允许设置由使用的套接字工厂ServerSocket
或者Socket
,或使用的流处理程序工厂URL
。此方法调用
checkPermission
与RuntimePermission("setFactory")
权限。如果您重写此方法,那么您应该拨打
super.checkSetFactory
,因为重写方法通常会引发异常。- 异常
-
SecurityException
- 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。 - 另请参见:
-
setSocketFactory
,setSocketImplFactory
,setURLStreamHandlerFactory
,checkPermission
-
checkMemberAccess
@Deprecated(since="1.8", forRemoval=true) public void checkMemberAccess(Class<?> clazz, int which)
不推荐用于删除:此API元素将在以后的版本中被删除。 该方法依赖于调用者的堆栈深度为4,容易出错,并且不能由运行时执行。 该方法的用户应直接调用checkPermission(java.security.Permission)
。 此方法在将来的Java SE版本中可能会被删除。如果调用线程不允许访问成员,则抛出一个SecurityException
。默认策略是允许访问PUBLIC成员,以及访问与调用者具有相同类加载器的类。 在所有其他情况下,此方法调用
checkPermission
与RuntimePermission("accessDeclaredMembers")
权限。如果该方法被覆盖,则无法进行
super.checkMemberAccess
的调用,因为checkMemberAccess
的默认实现依赖于堆栈深度为4的被检查代码。- 参数
-
clazz
- 要执行反射的类。 -
which
- 访问类型,PUBLIC或DECLARED。 - 异常
-
SecurityException
- 如果来电者没有访问成员的权限。 -
NullPointerException
- 如果clazz
参数是null
。 - 从以下版本开始:
- 1.1
- 另请参见:
-
Member
,checkPermission
-
checkSecurityAccess
public void checkSecurityAccess(String target)
确定是否应授予或拒绝具有指定权限目标名称的权限。如果允许请求的权限,该方法静默地返回。 如果被拒绝,则会引发SecurityException。
此方法为给定的权限目标名称创建一个
SecurityPermission
对象,并使用它调用checkPermission
。有关可能的许可目标名称的列表,请参阅
的文档。SecurityPermission
如果您重写此方法,那么您应该调用
super.checkSecurityAccess
,这样一来,重写方法通常会引发异常。- 参数
-
target
- 目标名称为SecurityPermission
。 - 异常
-
SecurityException
- 如果调用线程没有对请求的访问权限。 -
NullPointerException
- 如果target
为空。 -
IllegalArgumentException
- 如果target
为空。 - 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
getThreadGroup
public ThreadGroup getThreadGroup()
返回要在其被调用时实例化任何正在创建的新线程的线程组。 默认情况下,它返回当前线程的线程组。 这应由特定的安全管理员覆盖,以返回相应的线程组。- 结果
- 新线程被实例化的ThreadGroup
- 从以下版本开始:
- 1.1
- 另请参见:
-
ThreadGroup
-
-