Module java.base
Package java.lang

Class SecurityManager

java.lang.Object
java.lang.SecurityManager
直接已知的子类:
RMISecurityManager

@Deprecated(since="17", forRemoval=true) public class SecurityManager extends Object
Deprecated, for removal: This API element is subject to removal in a future version.
The Security Manager is deprecated and subject to removal in a future release. There is no replacement for the Security Manager. See JEP 411 for discussion and alternatives.
安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行可能不安全或敏感的操作之前确定操作是什么,以及是否尝试在允许执行操作的安全上下文中执行。应用程序可以允许或拒绝操作。

SecurityManager类包含许多以check开头的方法。在这些方法执行某些潜在敏感操作之前,Java库中的各种方法会调用这些方法。调用这样一个check方法通常如下所示:

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

安全管理器因此有机会通过抛出异常来阻止操作的完成。如果允许操作,安全管理器例程会简单地返回,但如果不允许操作,则会抛出SecurityException

设置安全管理器

使用安全管理器的环境通常会在启动时设置安全管理器。在JDK实现中,可以通过在命令行上将系统属性java.security.manager设置为安全管理器的类名来完成此操作。也可以将其设置为空字符串("")或特殊标记"default"以使用默认的java.lang.SecurityManager。如果指定了类名,它必须是java.lang.SecurityManager或公共子类,并且必须具有公共无参数构造函数。如果不是java.lang.SecurityManager,则该类将由内置系统类加载器加载。如果未设置java.security.manager系统属性,则默认值为null,这意味着在启动时不会设置安全管理器。

Java运行时也可能允许,但不要求允许通过调用setSecurityManager方法动态设置安全管理器。在JDK实现中,如果Java虚拟机启动时将java.security.manager系统属性设置为特殊标记"allow",则不会在启动时设置安全管理器,但可以动态设置。如果Java虚拟机启动时未设置java.security.manager系统属性或将其设置为特殊标记"disallow",则不会在启动时设置安全管理器,也无法动态设置(setSecurityManager方法将抛出UnsupportedOperationException)。最后,如果将java.security.manager系统属性设置为安全管理器的类名,或为空字符串("")或特殊标记"default",则会在启动时设置安全管理器(如前所述),并且还可以随后替换(或禁用)动态设置(取决于当前安装的安全管理器的策略)。以下表格说明了java.security.manager系统属性的不同设置对JDK实现行为的影响:

属性值,启动时设置的SecurityManager,可以动态设置SecurityManager
属性值 启动时设置的SecurityManager System.setSecurityManager运行时行为
null 抛出UnsupportedOperationException
空字符串("") java.lang.SecurityManager 成功或如果当前安装的安全管理器不允许则抛出SecurityException
"default" java.lang.SecurityManager 成功或如果当前安装的安全管理器不允许则抛出SecurityException
"disallow" 抛出UnsupportedOperationException
"allow" 成功或如果当前安装的安全管理器不允许则抛出SecurityException
类名 指定的类 成功或如果当前安装的安全管理器不允许则抛出SecurityException

当前的安全管理器可以通过getSecurityManager方法返回。

检查权限

特殊方法checkPermission(java.security.Permission)确定指定权限表示的访问请求是否应该被授予或拒绝。默认实现调用
   AccessController.checkPermission(perm);
 

如果允许请求的访问,则checkPermission会静默返回。如果被拒绝,则会抛出SecurityException

SecurityManager中其他每个check方法的默认实现是调用SecurityManager checkPermission方法,以确定调用线程是否有权限执行请求的操作。

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

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

除了当前执行线程的上下文之外,还带有上下文对象的权限检查方法基于该上下文做出访问决策。因此,不同上下文中的代码可以调用该方法,传递权限和先前保存的上下文对象。使用前面示例中获取的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使用的名称语法更复杂的类(例如java.io.FilePermission对象)直接从Permission而不是BasicPermission进行子类化。例如,对于java.io.FilePermission对象,权限名称是文件(或目录)的路径名。

一些权限类具有"actions"列表,指定了为对象授予的操作。例如,对于java.io.FilePermission对象,操作列表(如"read, write")指定了为指定文件(或指定目录中的文件)授予的操作。

其他权限类是用于"命名"权限的类 - 这些类包含名称但没有操作列表;您要么具有命名权限,要么没有。

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

有关权限相关信息,请参阅Java开发工具包(JDK)中的权限。该文档包括列出各种SecurityManager check方法及每个此类方法的默认实现所需的权限的表格。它还包含一个需要权限的方法的表格,并针对每个此类方法告知其需要的权限。

自从:
1.0
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    构造一个新的SecurityManager
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    checkAccept(String host, int port)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许从指定主机和端口号接受套接字连接,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许修改线程参数,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许修改线程组参数,则抛出SecurityException
    void
    checkConnect(String host, int port)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许向指定主机和端口号打开套接字连接,则抛出SecurityException
    void
    checkConnect(String host, int port, Object context)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果指定的安全上下文不被允许向指定主机和端口号打开套接字连接,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许创建新的类加载器,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许删除指定文件,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许创建子进程,则抛出SecurityException
    void
    checkExit(int status)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许使Java虚拟机以指定的状态码终止,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许动态链接由字符串参数文件指定的库代码,则抛出SecurityException
    void
    checkListen(int port)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许在指定的本地端口号上等待连接请求,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许使用(加入/离开/发送/接收)IP多播,则抛出SecurityException
    void
    checkMulticast(InetAddress maddr, byte ttl)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许访问指定包,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许在指定包中定义类,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果根据当前生效的安全策略,指定的权限目标名称的权限不被允许,则抛出SecurityException
    void
    checkPermission(Permission perm, Object context)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果指定的安全上下文被拒绝访问给定权限指定的资源,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许发起打印作业请求,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许访问或修改系统属性,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许访问具有指定key名称的系统属性,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许从指定文件描述符读取,则抛出SecurityException
    void
    checkRead(String file)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许读取由字符串参数指定的文件,则抛出SecurityException
    void
    checkRead(String file, Object context)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果指定的安全上下文不被允许读取由字符串参数指定的文件,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    确定是否应授予或拒绝具有指定权限目标名称的权限。
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许设置ServerSocketSocket使用的套接字工厂,或者URL使用的流处理程序工厂,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许向指定文件描述符写入,则抛出SecurityException
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    如果调用线程不被允许向由字符串参数指定的文件写入,则抛出SecurityException
    protected Class<?>[]
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    将当前执行堆栈作为类数组返回。
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    创建一个封装当前执行环境的对象。
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回在调用时用于实例化任何新线程的线程组。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SecurityManager

      public SecurityManager()
      Deprecated, for removal: This API element is subject to removal in a future version.
      构造一个新的SecurityManager

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

      抛出:
      SecurityException - 如果安全管理器已经存在且其checkPermission方法不允许创建新的安全管理器。
      参见:
  • Method Details

    • getClassContext

      protected Class<?>[] getClassContext()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回当前执行堆栈作为类数组。

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

      返回:
      执行堆栈。
    • getSecurityContext

      public Object getSecurityContext()
      Deprecated, for removal: This API element is subject to removal in a future version.
      创建一个封装当前执行环境的对象。该方法的结果例如被三参数的checkConnect方法和两参数的checkRead方法使用。这些方法是必需的,因为一个受信任的方法可能被调用来代表另一个方法读取文件或打开套接字。受信任的方法需要确定另一个(可能不受信任的)方法是否允许自行执行操作。

      该方法的默认实现是返回一个AccessControlContext对象。

      返回:
      一个依赖于实现的对象,封装了关于当前执行环境的足够信息,以便稍后执行一些安全检查。
      参见:
    • checkPermission

      public void checkPermission(Permission perm)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果根据当前生效的安全策略不允许基于给定权限的请求访问,则抛出SecurityException

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

      参数:
      perm - 请求的权限。
      抛出:
      SecurityException - 如果基于当前安全策略不允许访问。
      NullPointerException - 如果权限参数为null
      自版本:
      1.2
    • checkPermission

      public void checkPermission(Permission perm, Object context)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果指定的安全上下文被拒绝访问给定权限指定的资源,则抛出SecurityException。上下文必须是先前调用getSecurityContext返回的安全上下文,并且访问控制决策基于该安全上下文的配置的安全策略。

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

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

      参数:
      perm - 指定的权限
      context - 系统相关的安全上下文。
      抛出:
      SecurityException - 如果指定的安全上下文不是AccessControlContext的实例(例如,为null),或被拒绝访问给定权限指定的资源。
      NullPointerException - 如果权限参数为null
      自版本:
      1.2
      参见:
    • checkCreateClassLoader

      public void checkCreateClassLoader()
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许创建新的类加载器,则抛出SecurityException

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

      如果您重写此方法,则应在通常会抛出异常的重写方法处调用super.checkCreateClassLoader

      抛出:
      SecurityException - 如果调用线程没有权限创建新的类加载器。
      参见:
    • checkAccess

      public void checkAccess(Thread t)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许修改线程参数,则抛出SecurityException

      该方法由Thread类的setPrioritysetNamesetDaemon方法调用当前安全管理器。

      如果线程参数是系统线程(属于具有null父级的线程组),则此方法使用RuntimePermission("modifyThread")权限调用checkPermission。如果线程参数不是系统线程,则此方法只是静默返回。

      希望更严格策略的应用程序应该重写此方法。如果重写此方法,则覆盖它的方法还应该额外检查调用线程是否具有RuntimePermission("modifyThread")权限,如果是,则静默返回。这是为了确保被授予该权限的代码(如JDK本身)被允许操作任何线程。

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

      参数:
      t - 要检查的线程。
      抛出:
      SecurityException - 如果调用线程没有权限修改线程。
      NullPointerException - 如果线程参数为null
      参见:
    • checkAccess

      public void checkAccess(ThreadGroup g)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许修改线程组参数,则抛出SecurityException

      该方法在当前安全管理器为新创建的子线程或子线程组创建时被调用,以及ThreadGroup类的setDaemonsetMaxPriority方法中被调用。

      如果线程组参数是系统线程组(具有null父级),则此方法使用RuntimePermission("modifyThreadGroup")权限调用checkPermission。如果线程组参数不是系统线程组,则此方法只是静默返回。

      希望更严格策略的应用程序应该重写此方法。如果重写此方法,则覆盖它的方法还应该额外检查调用线程是否具有RuntimePermission("modifyThreadGroup")权限,如果是,则静默返回。这是为了确保被授予该权限的代码(如JDK本身)被允许操作任何线程。

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

      参数:
      g - 要检查的线程组。
      抛出:
      SecurityException - 如果调用线程没有权限修改线程组。
      NullPointerException - 如果线程组参数为null
      参见:
    • checkExit

      public void checkExit(int status)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许使用指定状态代码使Java虚拟机停止,则抛出SecurityException

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

      该方法使用RuntimePermission("exitVM."+status)权限调用checkPermission

      如果您重写此方法,则应在通常会抛出异常的重写方法处调用super.checkExit

      参数:
      status - 退出状态。
      抛出:
      SecurityException - 如果调用线程没有权限使用指定状态使Java虚拟机停止。
      参见:
    • checkExec

      public void checkExec(String cmd)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许创建子进程。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkExec

      参数:
      cmd - 指定的系统命令。
      抛出:
      SecurityException - 如果调用线程没有权限创建子进程。
      NullPointerException - 如果cmd参数为null
      参见:
    • checkLink

      public void checkLink(String lib)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许动态链接由字符串参数file指定的库代码。参数可以是简单库名称或完整文件名。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkLink

      参数:
      lib - 库的名称。
      抛出:
      SecurityException - 如果调用线程没有权限动态链接库。
      NullPointerException - 如果lib参数为null
      参见:
    • checkRead

      public void checkRead(FileDescriptor fd)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许从指定文件描述符读取。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkRead

      参数:
      fd - 系统相关的文件描述符。
      抛出:
      SecurityException - 如果调用线程没有权限访问指定的文件描述符。
      NullPointerException - 如果文件描述符参数为null
      参见:
    • checkRead

      public void checkRead(String file)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许读取由字符串参数file指定的文件。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkRead

      参数:
      file - 系统相关的文件名。
      抛出:
      SecurityException - 如果调用线程没有权限访问指定的文件。
      NullPointerException - 如果file参数为null
      参见:
    • checkRead

      public void checkRead(String file, Object context)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果指定的安全上下文不被允许读取由字符串参数file指定的文件。上下文必须是先前调用getSecurityContext返回的安全上下文。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkRead

      参数:
      file - 系统相关的文件名。
      context - 系统相关的安全上下文。
      抛出:
      SecurityException - 如果指定的安全上下文不是AccessControlContext的实例(例如,为null),或没有权限读取指定的文件。
      NullPointerException - 如果file参数为null
      参见:
    • checkWrite

      public void checkWrite(FileDescriptor fd)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许写入指定的文件描述符。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkWrite

      参数:
      fd - 系统相关的文件描述符。
      抛出:
      SecurityException - 如果调用线程没有权限访问指定的文件描述符。
      NullPointerException - 如果文件描述符参数为null
      参见:
    • checkWrite

      public void checkWrite(String file)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许写入由字符串参数file指定的文件。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkWrite

      参数:
      file - 系统相关的文件名。
      抛出:
      SecurityException - 如果调用线程没有权限访问指定的文件。
      NullPointerException - 如果file参数为null
      参见:
    • checkDelete

      public void checkDelete(String file)
      Deprecated, for removal: This API element is subject to removal in a future version.
      抛出SecurityException,如果调用线程不被允许删除指定的文件。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的点上调用super.checkDelete

      参数:
      file - 系统相关的文件名。
      抛出:
      SecurityException - 如果调用线程没有权限删除文件。
      NullPointerException - 如果file参数为null
      参见:
    • checkConnect

      public void checkConnect(String host, int port)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许打开到指定主机和端口号的套接字连接,则抛出SecurityException异常。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkConnect

      参数:
      host - 要连接的主机名端口。
      port - 要连接的协议端口。
      抛出:
      SecurityException - 如果调用线程没有权限打开到指定hostport的套接字连接。
      NullPointerException - 如果host参数为null
      参见:
    • checkConnect

      public void checkConnect(String host, int port, Object context)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果指定的安全上下文不被允许打开到指定主机和端口号的套接字连接,则抛出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
      参见:
    • checkListen

      public void checkListen(int port)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许在指定的本地端口号上等待连接请求,则抛出SecurityException异常。

      此方法使用SocketPermission("localhost:"+port,"listen")调用checkPermission

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkListen

      参数:
      port - 本地端口。
      抛出:
      SecurityException - 如果调用线程没有权限在指定端口上监听。
      参见:
    • checkAccept

      public void checkAccept(String host, int port)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许从指定主机和端口号接受套接字连接,则抛出SecurityException异常。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkAccept

      参数:
      host - 套接字连接的主机名。
      port - 套接字连接的端口号。
      抛出:
      SecurityException - 如果调用线程没有权限接受连接。
      NullPointerException - 如果host参数为null
      参见:
    • checkMulticast

      public void checkMulticast(InetAddress maddr)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许使用(加入/离开/发送/接收)IP多播,则抛出SecurityException异常。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkMulticast

      参数:
      maddr - 要使用的Internet组地址。
      抛出:
      SecurityException - 如果调用线程不被允许使用(加入/离开/发送/接收)IP多播。
      NullPointerException - 如果地址参数为null
      自版本:
      1.1
      参见:
    • checkMulticast

      @Deprecated(since="1.4", forRemoval=true) public void checkMulticast(InetAddress maddr, byte ttl)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许使用(加入/离开/发送/接收)IP多播,则抛出SecurityException异常。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkMulticast

      参数:
      maddr - 要使用的Internet组地址。
      ttl - 在使用时的值,如果是多播发送。注意:此特定实现不使用ttl参数。
      抛出:
      SecurityException - 如果调用线程不被允许使用(加入/离开/发送/接收)IP多播。
      NullPointerException - 如果地址参数为null
      自版本:
      1.1
      参见:
    • checkPropertiesAccess

      public void checkPropertiesAccess()
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许访问或修改系统属性,则抛出SecurityException异常。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkPropertiesAccess

      抛出:
      SecurityException - 如果调用线程没有权限访问或修改系统属性。
      参见:
    • checkPropertyAccess

      public void checkPropertyAccess(String key)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许访问具有指定key名称的系统属性,则抛出SecurityException异常。

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

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkPropertyAccess

      参数:
      key - 系统属性键。
      抛出:
      SecurityException - 如果调用线程没有权限访问指定的系统属性。
      NullPointerException - 如果key参数为null
      IllegalArgumentException - 如果key为空。
      参见:
    • checkPrintJobAccess

      public void checkPrintJobAccess()
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不被允许发起打印作业请求,则抛出SecurityException异常。

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

      如果您重写此方法,则应在通常会抛出异常的被重写方法的位置调用super.checkPrintJobAccess

      抛出:
      SecurityException - 如果调用线程没有权限发起打印作业请求。
      自版本:
      1.1
      参见:
    • checkPackageAccess

      public void checkPackageAccess(String pkg)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许访问指定包,则抛出SecurityException

      在类加载期间,此方法可能会被类加载器的loadClass方法和Java虚拟机调用,以确保调用者被允许访问正在加载的类的包。

      此方法检查指定的包是否以任何package.access安全属性中的包开头或相等。实现还可以根据下面的附加受限包列表检查包。如果包受限,则使用RuntimePermission("accessClassInPackage."+pkg)权限调用checkPermission(Permission)

      如果重写此方法,则应在重写方法的第一行调用super.checkPackageAccess

      实现注意:
      此实现还限制由平台类加载器或其祖先加载的模块的所有非导出包。"非导出包"指的是未向所有模块导出的包。具体而言,它指的是包要么根本不被其包含模块导出,要么以合格方式被其包含模块导出。
      参数:
      pkg - 包名。
      抛出:
      SecurityException - 如果调用线程没有权限访问指定包。
      NullPointerException - 如果包名参数为null
      参见:
    • checkPackageDefinition

      public void checkPackageDefinition(String pkg)
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许在指定包中定义类,则抛出SecurityException

      此方法由某些类加载器的loadClass方法调用。

      此方法检查指定的包是否以任何package.definition安全属性中的包开头或相等。实现还可以根据下面的附加受限包列表检查包。如果包受限,则使用RuntimePermission("defineClassInPackage."+pkg)权限调用checkPermission(Permission)

      如果重写此方法,则应在重写方法的第一行调用super.checkPackageDefinition

      实现注意:
      此实现还限制由平台类加载器或其祖先加载的模块的所有非导出包。"非导出包"指的是未向所有模块导出的包。具体而言,它指的是包要么根本不被其包含模块导出,要么以合格方式被其包含模块导出。
      参数:
      pkg - 包名。
      抛出:
      SecurityException - 如果调用线程没有权限在指定包中定义类。
      NullPointerException - 如果包名参数为null
      参见:
    • checkSetFactory

      public void checkSetFactory()
      Deprecated, for removal: This API element is subject to removal in a future version.
      如果调用线程不允许设置ServerSocketSocket使用的套接字工厂,或者URL使用的流处理程序工厂,则抛出SecurityException

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

      如果您重写此方法,则应在通常会抛出异常的重写方法处调用super.checkSetFactory

      抛出:
      SecurityException - 如果调用线程没有权限指定套接字工厂或流处理程序工厂。
      参见:
    • checkSecurityAccess

      public void checkSecurityAccess(String target)
      Deprecated, for removal: This API element is subject to removal in a future version.
      确定是否应授予或拒绝具有指定权限目标名称的权限。

      如果允许请求的权限,则此方法会静默返回。如果拒绝,则会引发SecurityException

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

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

      如果您重写此方法,则应在通常会抛出异常的重写方法处调用super.checkSecurityAccess

      参数:
      target - SecurityPermission的目标名称。
      抛出:
      SecurityException - 如果调用线程没有请求访问的权限。
      NullPointerException - 如果target为null。
      IllegalArgumentException - 如果target为空。
      自版本:
      1.1
      参见:
    • getThreadGroup

      public ThreadGroup getThreadGroup()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回在调用此方法时正在创建的任何新线程实例化到其中的线程组。默认情况下,它返回当前线程的线程组。应该由特定安全管理器重写此方法以返回适当的线程组。
      返回:
      实例化新线程的ThreadGroup
      自版本:
      1.1
      参见: