Module  java.base
软件包  java.lang

Class 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方法使得基于该上下文而不是当前执行线程的访问决策。 因此,不同上下文中的代码可以调用该方法,传递权限和先前保存的上下文对象。 使用前面示例中获得的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.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
    另请参见:
    ClassLoaderSecurityExceptiongetSecurityManagersetSecurityManagerAccessControllerAccessControlContextAccessControlExceptionPermissionBasicPermissionFilePermissionSocketPermissionPropertyPermissionRuntimePermissionAWTPermissionPolicySecurityPermissionProtectionDomain
    • 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()checkPermissionRuntimePermission
    • 方法详细信息

      • getInCheck

        @Deprecated(since="1.2",
                    forRemoval=true)
        public boolean getInCheck​()
        不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission呼叫。 此方法在将来的Java SE版本中可能会被删除。
        测试是否有正在进行的安全检查。
        结果
        该值为inCheck字段。 如果安全检查正在进行中,则此字段应包含true ,否则为false
        另请参见:
        inCheck
      • getClassContext

        protected Class<?>[] getClassContext​()
        将当前执行堆栈作为一个类的数组返回。

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

        结果
        执行堆栈。
      • currentClassLoader

        @Deprecated(since="1.2",
                    forRemoval=true)
        protected ClassLoader currentClassLoader​()
        不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。
        从使用非系统类加载器定义的类返回最近执行的方法的类加载器。 非系统类加载器被定义为不等于系统类加载器(由ClassLoader.getSystemClassLoader()返回)或其祖先之一的类加载器。

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

        1. 执行堆栈上的所有方法都是使用系统类加载器或其祖先之一定义的类。
        2. 执行堆栈上的所有方法直到第一个“特权”调用者(见AccessController.doPrivileged(java.security.PrivilegedAction<T>) )都是使用系统类加载器或其祖先之一定义的类。
        3. 调用checkPermissionjava.security.AllPermission不会导致SecurityException。
        结果
        类加载器最近发生的堆栈中的方法来自使用非系统类加载器定义的类。
        另请参见:
        getSystemClassLoadercheckPermission
      • currentLoadedClass

        @Deprecated(since="1.2",
                    forRemoval=true)
        protected Class<?> currentLoadedClass​()
        不推荐用于删除:此API元素将在以后的版本中被删除。 不推荐使用这种类型的安全检查。 建议使用checkPermission通话。 此方法在将来的Java SE版本中可能会被删除。
        从使用非系统类加载器定义的类中返回最近执行的方法的类。 非系统类加载器被定义为不等于系统类加载器(由ClassLoader.getSystemClassLoader()返回)或其祖先之一的类加载器。

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

        1. 执行堆栈上的所有方法都是使用系统类加载器或其祖先之一定义的类。
        2. 执行堆栈上的所有方法直到第一个“特权”调用者(见AccessController.doPrivileged(java.security.PrivilegedAction<T>) )都是使用系统类加载器或其祖先之一定义的类。
        3. checkPermissionjava.security.AllPermission调用不会导致SecurityException。
        结果
        来自使用非系统类加载器定义的类的方法的堆栈上最近出现的类。
        另请参见:
        getSystemClassLoadercheckPermission
      • 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:

        1. 执行堆栈上的所有方法都是使用系统类加载器或其祖先之一定义的类。
        2. 第一个“特权”调用者(见AccessController.doPrivileged(java.security.PrivilegedAction<T>) )的执行堆栈上的所有方法来自使用系统类加载器或其祖先之一定义的类。
        3. checkPermissionjava.security.AllPermission调用不会导致SecurityException。
        结果
        最近发生的堆栈框架中的深度来自使用非系统类加载器定义的类的方法。
        另请参见:
        getSystemClassLoadercheckPermission
      • 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对象。

        结果
        一个依赖于实现的对象,封装了有关当前执行环境的足够信息,以便稍后执行一些安全检查。
        另请参见:
        checkConnectcheckReadAccessControlContext
      • 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是实例AccessControlContextAccessControlContext.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

        此方法被调用为当前的安全管理stopsuspendresumesetPrioritysetName ,并setDaemon类的方法Thread

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

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

        如果这个方法被覆盖,那么super.checkAccess应该被覆盖方法中的第一个语句调用,或者等效的安全检查应该放在被覆盖的方法中。

        参数
        t - 要检查的线程。
        异常
        SecurityException - 如果调用线程没有修改线程的权限。
        NullPointerException - 如果线程参数是 null
        另请参见:
        resumesetDaemonsetNamesetPrioritystopsuspendcheckPermission
      • checkAccess

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

        这种方法被调用为当前的安全管理器创建一个新的子线程或子线程组时,以及由setDaemonsetMaxPrioritystopsuspendresume ,并destroy类的方法ThreadGroup

        如果线程组参数是系统线程组(有一个null父级),则该方法调用checkPermissionRuntimePermission("modifyThreadGroup")权限。 如果线程组参数不是系统线程组,则此方法只是静默地返回。

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

        如果这个方法被覆盖,那么super.checkAccess应该被覆盖方法中的第一个语句调用,或者等效的安全检查应该被放在被覆盖的方法中。

        参数
        g - 要检查的线程组。
        异常
        SecurityException - 如果调用线程没有修改线程组的权限。
        NullPointerException - 如果线程组参数是 null
        另请参见:
        destroyresumesetDaemonsetMaxPrioritystopsuspendcheckPermission
      • checkExit

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

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

        此方法调用checkPermissionRuntimePermission("exitVM."+status)权限。

        如果您重写此方法,那么您应该调用super.checkExit ,在重写方法通常会引发异常的时候。

        参数
        status - 退出状态。
        异常
        SecurityException - 如果调用线程没有权限停止具有指定状态的Java虚拟机。
        另请参见:
        exitcheckPermission
      • checkLink

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

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

        此方法调用checkPermissionRuntimePermission("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

        此方法调用checkPermissionRuntimePermission("readFileDescriptor")权限。

        如果您重写此方法,那么您应该在覆盖方法通常会引发异常的时候调用super.checkRead

        参数
        fd - 依赖系统的文件描述符。
        异常
        SecurityException - 如果调用线程没有权限访问指定的文件描述符。
        NullPointerException - 如果文件描述符参数是 null
        另请参见:
        FileDescriptorcheckPermission
      • checkRead

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

        此方法调用checkPermissionFilePermission(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

        此方法调用checkPermissionRuntimePermission("writeFileDescriptor")权限。

        如果您重写此方法,那么您应该调用super.checkWrite ,这样一来,重写方法通常会引发异常。

        参数
        fd - 依赖系统的文件描述符。
        异常
        SecurityException - 如果调用线程没有访问指定文件描述符的权限。
        NullPointerException - 如果文件描述符参数是 null
        另请参见:
        FileDescriptorcheckPermission
      • checkWrite

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

        此方法调用checkPermissionFilePermission(file,"write")权限。

        如果你重写这个方法,那么你应该调用super.checkWrite ,这样一来,被覆盖的方法通常会引发异常。

        参数
        file - 系统相关的文件名。
        异常
        SecurityException - 如果调用线程没有访问指定文件的权限。
        NullPointerException - 如果 file参数是 null
        另请参见:
        checkPermission
      • checkDelete

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

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

        此方法调用checkPermissionFilePermission(file,"delete")权限。

        如果您重写此方法,那么您应该拨打super.checkDelete ,因为重写方法通常会引发异常。

        参数
        file - 与系统相关的文件名。
        异常
        SecurityException - 如果调用线程没有删除该文件的权限。
        NullPointerException - 如果 file参数是 null
        另请参见:
        File.delete()checkPermission
      • checkConnect

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

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

        如果端口不等于-1,则此方法调用checkPermissionSocketPermission(host+":"+port,"connect")权限。 如果端口等于-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,则contextcheckPermission方法通过SocketPermission(host+":"+port,"connect")权限进行调用。 如果端口等于-1,则contextcheckPermission方法被调用,具有SocketPermission(host,"resolve")权限。

        如果您重写此方法,那么您应该在覆盖方法通常会引发异常的时候调用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

        此方法调用checkPermissionSocketPermission("localhost:"+port,"listen")

        如果您重写此方法,那么您应该拨打super.checkListen ,在重写方法通常会引发异常的时候。

        参数
        port - 当地港口。
        异常
        SecurityException - 如果调用线程没有在指定端口上侦听的权限。
        另请参见:
        checkPermission
      • checkAccept

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

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

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

        如果您重写此方法,那么您应该拨打super.checkAccept ,这样一来,覆盖方法通常会引发异常。

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

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

        这个方法调用checkPermissionjava.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

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

        如果您重写此方法,那么您应该拨打super.checkMulticast ,这样一来,覆盖的方法通常会引发异常。

        参数
        maddr - 要使用的互联网组地址。
        ttl - 正在使用的值,如果是多播发送。 注意:这个特定的实现不使用ttl参数。
        异常
        SecurityException - 如果调用线程不允许使用(加入/离开/发送/接收)IP多播。
        NullPointerException - 如果地址参数是 null
        从以下版本开始:
        1.1
        另请参见:
        checkPermission
      • checkPropertiesAccess

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

        这种方法是由getPropertiessetProperties方法用于System

        此方法调用checkPermissionPropertyPermission("*", "read,write")权限。

        如果您重写此方法,那么您应该拨打super.checkPropertiesAccess ,这样一来,覆盖的方法通常会引发异常。

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

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

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

        该方法调用checkPermissionPropertyPermission(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

        此方法调用checkPermissionRuntimePermission("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
        另请参见:
        loadClassgetPropertycheckPermission
      • 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)getPropertycheckPermission
      • checkSetFactory

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

        此方法调用checkPermissionRuntimePermission("setFactory")权限。

        如果您重写此方法,那么您应该拨打super.checkSetFactory ,因为重写方法通常会引发异常。

        异常
        SecurityException - 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。
        另请参见:
        setSocketFactorysetSocketImplFactorysetURLStreamHandlerFactorycheckPermission
      • checkMemberAccess

        @Deprecated(since="1.8",
                    forRemoval=true)
        public void checkMemberAccess​(Class<?> clazz,
                                      int which)
        不推荐用于删除:此API元素将在以后的版本中被删除。 该方法依赖于调用者的堆栈深度为4,容易出错,并且不能由运行时执行。 该方法的用户应直接调用checkPermission(java.security.Permission) 此方法在将来的Java SE版本中可能会被删除。
        如果调用线程不允许访问成员,则抛出一个SecurityException

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

        如果该方法被覆盖,则无法进行super.checkMemberAccess的调用,因为checkMemberAccess的默认实现依赖于堆栈深度为4的被检查代码。

        参数
        clazz - 要执行反射的类。
        which - 访问类型,PUBLIC或DECLARED。
        异常
        SecurityException - 如果来电者没有访问成员的权限。
        NullPointerException - 如果 clazz参数是 null
        从以下版本开始:
        1.1
        另请参见:
        MembercheckPermission
      • 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