- 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 booleaninCheck不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此字段在将来的Java SE版本中可能会被删除。
-
构造方法摘要
构造方法 Constructor 描述 SecurityManager()构造新的SecurityManager。
-
方法摘要
所有方法 接口方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 voidcheckAccept(String host, int port)如果调用线程不允许从指定的主机和端口号接受套接字连接,则抛出一个SecurityException。voidcheckAccess(Thread t)如果调用线程不允许修改线程参数,则抛出一个SecurityException。voidcheckAccess(ThreadGroup g)如果调用线程不允许修改线程组参数,则抛出一个SecurityException。voidcheckAwtEventQueueAccess()不推荐用于删除:此API元素将在以后的版本中被删除。此方法最初用于检查调用线程是否可以访问AWT事件队列。 该方法已被废弃,代码应使用checkPermission(java.security.Permission)检查AWTPermission("accessEventQueue")。 此方法在将来的Java SE版本中可能会被删除。voidcheckConnect(String host, int port)如果调用线程不允许打开与指定主机和端口号的套接字连接,则抛出一个SecurityException。voidcheckConnect(String host, int port, Object context)如果指定的安全上下文不允许打开到指定的主机和端口号的套接字连接,则抛出一个SecurityException。voidcheckCreateClassLoader()如果调用线程不允许创建新的类加载器,则抛出一个SecurityException。voidcheckDelete(String file)如果调用线程不允许删除指定的文件,则抛出一个SecurityException。voidcheckExec(String cmd)如果调用线程不允许创建子进程,则抛出一个SecurityException。voidcheckExit(int status)如果调用线程不允许Java虚拟机停止指定的状态代码,则抛出一个SecurityException。voidcheckLink(String lib)如果调用线程不允许动态链接由字符串参数文件指定的库代码,则抛出一个SecurityException。voidcheckListen(int port)如果调用线程不允许在指定的本地端口号上等待连接请求,则抛出一个SecurityException。voidcheckMemberAccess(Class<?> clazz, int which)不推荐用于删除:此API元素将在以后的版本中被删除。该方法依赖于调用者的堆栈深度为4,容易出错,并且不能由运行时执行。 该方法的用户应直接调用checkPermission(java.security.Permission)。 此方法在将来的Java SE版本中可能会被删除。voidcheckMulticast(InetAddress maddr)如果调用线程不允许使用(加入/离开/发送/接收)IP组播,则抛出一个SecurityException。voidcheckMulticast(InetAddress maddr, byte ttl)已过时。请改用#checkPermission(java.security.Permission)voidcheckPackageAccess(String pkg)如果调用线程不允许访问指定的包,则抛出一个SecurityException。voidcheckPackageDefinition(String pkg)如果调用线程不允许在指定的包中定义类,则抛出一个SecurityException。voidcheckPermission(Permission perm)如果根据当前有效的安全策略不允许由给定的权限指定的请求访问,则抛出一个SecurityException。voidcheckPermission(Permission perm, Object context)如果指定的安全上下文被拒绝访问指定权限指定的资源,则抛出一个SecurityException。voidcheckPrintJobAccess()如果调用线程不允许启动打印作业请求,则抛出一个SecurityException。voidcheckPropertiesAccess()如果调用线程不允许访问或修改系统属性,则抛出一个SecurityException。voidcheckPropertyAccess(String key)如果调用线程不允许访问具有指定的key名称的系统属性,则抛出一个SecurityException。voidcheckRead(FileDescriptor fd)如果调用线程不允许从指定的文件描述符读取,则抛出一个SecurityException。voidcheckRead(String file)如果调用线程不允许读取由字符串参数指定的文件,则抛出一个SecurityException。voidcheckRead(String file, Object context)如果指定的安全上下文不允许读取由字符串参数指定的文件,则抛出一个SecurityException。voidcheckSecurityAccess(String target)确定是否应授予或拒绝具有指定权限目标名称的权限。voidcheckSetFactory()抛出SecurityException如果调用线程不允许设置由使用的套接字工厂ServerSocket或者Socket,或使用的流处理程序工厂URL。voidcheckSystemClipboardAccess()不推荐用于删除:此API元素将在以后的版本中被删除。该方法最初用于检查调用线程是否可以访问系统剪贴板。 该方法已经过时,代码应该使用checkPermission(java.security.Permission)来检查AWTPermission("accessClipboard")。 此方法在将来的Java SE版本中可能会被删除。booleancheckTopLevelWindow(Object window)不推荐用于删除:此API元素将在以后的版本中被删除。该方法最初用于检查调用线程是否被信任以启动顶级窗口。 该方法已被废弃,代码应该使用checkPermission(java.security.Permission)来检查AWTPermission("showWindowWithoutWarningBanner")。 此方法在将来的Java SE版本中可能会被删除。voidcheckWrite(FileDescriptor fd)如果调用线程不允许写入指定的SecurityException则抛出一个SecurityException。voidcheckWrite(String file)如果调用线程不允许写入由字符串参数指定的文件,则抛出一个SecurityException。protected intclassDepth(String name)不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。protected intclassLoaderDepth()不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。protected ClassLoadercurrentClassLoader()不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。protected Class<?>currentLoadedClass()不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。protected Class<?>[]getClassContext()将当前执行堆栈作为一个类的数组返回。booleangetInCheck()不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。ObjectgetSecurityContext()创建封装当前执行环境的对象。ThreadGroupgetThreadGroup()返回要在其被调用时实例化任何正在创建的新线程的线程组。protected booleaninClass(String name)不推荐用于删除:此API元素将在以后的版本中被删除。不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。protected booleaninClassLoader()不推荐用于删除:此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
-
-