模块  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

    当前安全管理器由类SystemsetSecurityManager方法设置。 当前的安全管理器是通过getSecurityManager方法获得的。

    特殊方法checkPermission(java.security.Permission)确定是否应该授予或拒绝由指定许可指示的访问请求。 默认实现调用

      AccessController.checkPermission(perm); 

    如果允许访问请求, checkPermission将安静地返回。 如果被拒绝,则抛出SecurityException

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

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

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

    除了权限之外还采用上下文对象的checkPermission方法基于该上下文而不是当前执行线程的方式做出访问决策。 因此,不同上下文中的代码可以调用该方法,传递权限和先前保存的上下文对象。 使用如上例sm获得的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.Permission BasicPermission定义包含遵循分层属性命名约定的名称的所有权限所需的功能(例如,“exitVM”,“setFactory”,“queuePrintJob”等)。 星号可以出现在名称的末尾,跟在“。”之后,或者单独出现,以表示通配符匹配。 例如:“a。*”或“*”有效,“* a”或“a * b”无效。

    FilePermission和SocketPermission是权限的顶级类的子类( java.security.Permission )。 像这样的类具有比BasicPermission子类直接从Permission而不是BasicPermission使用的更复杂的名称语法。 例如,对于java.io.FilePermission对象,权限名称是文件(或目录)的路径名。

    某些权限类具有“操作”列表,该列表指示对象允许的操作。 例如,对于java.io.FilePermission对象,操作列表(例如“读取,写入”)指定为指定文件(或指定目录中的文件)授予的操作。

    其他权限类用于“命名”权限 - 包含名称但没有操作列表的权限; 您要么拥有命名权限,要么不拥有。

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

    有关许可相关信息,请参见Permissions in the Java Development Kit (JDK) 本文档包含一个表,列出了各种SecurityManager check方法以及每种此类方法的默认实现所需的权限。 它还包含一个需要权限的方法表,并且每个这样的方法都会告诉它需要哪个权限。

    从以下版本开始:
    1.0
    另请参见:
    ClassLoaderSecurityExceptiongetSecurityManagersetSecurityManagerAccessControllerAccessControlContextAccessControlExceptionPermissionBasicPermissionFilePermissionSocketPermissionPropertyPermissionRuntimePermissionAWTPermissionPolicySecurityPermissionProtectionDomain
    • 构造方法摘要

      构造方法  
      构造器 描述
      SecurityManager()
      构造一个新的 SecurityManager
    • 方法摘要

      所有方法  实例方法 具体的方法  弃用的方法 
      变量和类型 方法 描述
      void checkAccept​(String host, int port)
      如果不允许调用线程接受来自指定主机和端口号的套接字连接,则抛出 SecurityException
      void checkAccess​(Thread t)
      如果不允许调用线程修改线程参数,则抛出 SecurityException
      void checkAccess​(ThreadGroup g)
      如果不允许调用线程修改线程组参数,则抛出 SecurityException
      void checkConnect​(String host, int port)
      如果不允许调用线程打开到指定主机和端口号的套接字连接,则抛出 SecurityException
      void checkConnect​(String host, int port, Object context)
      如果不允许指定的安全上下文打开指定主机和端口号的套接字连接,则抛出 SecurityException
      void checkCreateClassLoader()
      如果不允许调用线程创建新的类加载器,则抛出 SecurityException
      void checkDelete​(String file)
      如果不允许调用线程删除指定文件,则抛出 SecurityException
      void checkExec​(String cmd)
      如果不允许调用线程创建子进程,则抛出 SecurityException
      void checkExit​(int status)
      如果不允许调用线程导致Java虚拟机使用指定的状态代码暂停,则抛出 SecurityException
      void checkLink​(String lib)
      如果不允许调用线程动态链接字符串参数文件指定的库代码,则抛出 SecurityException
      void checkListen​(int port)
      如果不允许调用线程等待指定本地端口号上的连接请求,则抛出 SecurityException
      void 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)
      抛出 SecurityException如果调用线程不允许使用指定的访问系统属性 key名。
      void checkRead​(FileDescriptor fd)
      如果不允许调用线程从指定的文件描述符读取,则抛出 SecurityException
      void checkRead​(String file)
      如果不允许调用线程读取字符串参数指定的文件,则抛出 SecurityException
      void checkRead​(String file, Object context)
      如果不允许指定的安全上下文读取字符串参数指定的文件,则抛出 SecurityException
      void checkSecurityAccess​(String target)
      确定是应授予还是拒绝具有指定权限目标名称的权限。
      void checkSetFactory()
      抛出 SecurityException如果调用线程不允许设置由使用的套接字工厂 ServerSocketSocket ,或使用的流处理程序工厂 URL
      void checkWrite​(FileDescriptor fd)
      如果不允许调用线程写入指定的 SecurityException则抛出 SecurityException
      void checkWrite​(String file)
      如果不允许调用线程写入字符串参数指定的文件,则抛出 SecurityException
      protected <?>[] getClassContext()
      将当前执行堆栈作为类数组返回。
      Object getSecurityContext()
      创建一个封装当前执行环境的对象。
      ThreadGroup getThreadGroup()
      返回一个线程组,在该线程组中实例化在调用它时创建的任何新线程。
    • 构造方法详细信息

      • SecurityManager

        public SecurityManager()
        构造一个新的SecurityManager

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

        异常
        SecurityException - 如果安全管理器已存在且其 checkPermission方法不允许创建新的安全管理器。
        另请参见:
        System.getSecurityManager()checkPermissionRuntimePermission
    • 方法详细信息

      • getClassContext

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

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

        结果
        执行堆栈。
      • 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

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

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

        异常
        SecurityException - 如果调用线程没有创建新类加载器的权限。
        另请参见:
        ClassLoader()checkPermission
      • checkAccess

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

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

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

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

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

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

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

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

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

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

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

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

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

        通过类Runtimeexit方法为当前安全性管理器调用此方法。 状态为0表示成功; 其他值表示各种错误。

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

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

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

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

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

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkLink

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

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

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkRead

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

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

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkRead

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

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

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

        如果context不是一个实例AccessControlContext然后SecurityException异常。

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkRead

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

        public void checkWrite​(FileDescriptor fd)
        如果不允许调用线程写入指定的SecurityException则抛出SecurityException

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkWrite

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

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

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkWrite

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

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

        通过类Filedelete方法为当前安全管理器调用此方法。

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

        如果重写此方法, super.checkDelete在被覆盖的方法通常会抛出异常的位置调用super.checkDelete

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

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

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

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkConnect

        参数
        host - 要连接的主机名端口。
        port - 要连接的协议端口。
        异常
        SecurityException - 如果调用线程无权打开到指定的 hostport的套接字连接。
        NullPointerException - 如果 host参数是 null
        另请参见:
        checkPermission
      • checkConnect

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

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

        如果context不是一个实例AccessControlContext然后SecurityException异常。

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkConnect

        参数
        host - 要连接的主机名端口。
        port - 要连接的协议端口。
        context - 依赖于系统的安全上下文。
        异常
        SecurityException - 如果指定的安全上下文不是 AccessControlContext的实例(例如,是 null ),或者无权打开到指定的 hostport的套接字连接。
        NullPointerException - 如果 host参数是 null
        另请参见:
        getSecurityContext()AccessControlContext.checkPermission(java.security.Permission)
      • checkListen

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

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

        如果重写此方法,则应该在被覆盖的方法通常会抛出异常时调用super.checkListen

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

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

        通过类ServerSocketaccept方法为当前安全管理器调用此方法。

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkAccept

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

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

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

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

        参数
        maddr - 要使用的Internet组地址。
        异常
        SecurityException - 如果不允许调用线程使用(加入/离开/发送/接收)IP多播。
        NullPointerException - 如果地址参数是 null
        从以下版本开始:
        1.1
        另请参见:
        checkPermission
      • checkMulticast

        @Deprecated(since="1.4")
        public void checkMulticast​(InetAddress maddr,
                                   byte ttl)
        Deprecated.
        Use #checkPermission(java.security.Permission) instead
        如果不允许调用线程使用(加入/离开/发送/接收)IP多播,则抛出SecurityException

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkMulticast

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

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

        该方法由getPropertiessetPropertiesSystem方法System

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkPropertiesAccess

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

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

        该方法由getPropertySystem方法使用。

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkPropertyAccess

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

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

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

        如果重写此方法,则应该在重写方法通常会抛出异常时调用super.checkPrintJobAccess

        异常
        SecurityException - 如果调用线程没有启动打印作业请求的权限。
        从以下版本开始:
        1.1
        另请参见:
        checkPermission
      • checkPackageAccess

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

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

        此方法检查指定的包是以package.access安全属性中的任何包开头还是等于任何包。 实现还可以针对附加的受限包列表检查包,如下所述。 如果程序包受到限制, 则以 RuntimePermission("accessClassInPackage."+pkg)权限调用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如果调用线程不允许设置由使用的套接字工厂ServerSocketSocket ,或使用的流处理程序工厂URL

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

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

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