- 已知子类:
RMISecurityManager
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
”,则安全管理器在启动时设置(如前所述)并且可以随后也可以动态替换(或禁用)(根据当前安装的安全管理器的策略)。下表说明了 JDK 实现针对 java.security.manager
系统属性的不同设置的行为:
适当的值 | 启动时设置的 SecurityManager | System.setSecurityManager 运行时行为 |
---|---|---|
无效的 | 没有任何 | 抛出 UnsupportedOperationException |
空字符串 ("") | java.lang.SecurityManager |
如果当前安装的安全管理器不允许,则成功或抛出 SecurityException |
“默认” | java.lang.SecurityManager |
如果当前安装的安全管理器不允许,则成功或抛出 SecurityException |
“不允许” | 没有任何 | 抛出 UnsupportedOperationException |
“允许” | 没有任何 | 如果当前安装的安全管理器不允许,则成功或抛出 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();
checkPermission
方法除权限外还采用上下文对象,根据该上下文而不是当前执行线程的上下文做出访问决策。因此,不同上下文中的代码可以调用该方法,传递权限和先前保存的上下文对象。使用如上例中获取的 SecurityManager sm
的示例调用如下:
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 开发工具包 (JDK) 中的权限。本文档包含一个表格,其中列出了各种 SecurityManager check
方法以及每个此类方法的默认实现所需的权限。它还包含一个需要权限的方法表,并为每个这样的方法说明它需要哪种权限。
- 自从:
- 1.0
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述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
checkDelete
(String file) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程删除指定文件,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程创建子进程,则抛出SecurityException
。void
checkExit
(int status) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程导致 Java 虚拟机以指定的状态代码停止,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程动态链接字符串参数文件指定的库代码,则抛出SecurityException
。void
checkListen
(int port) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程在指定的本地端口号上等待连接请求,则抛出SecurityException
。void
checkMulticast
(InetAddress maddr) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程使用(加入/离开/发送/接收)IP 多播,则抛出SecurityException
。void
checkMulticast
(InetAddress maddr, byte ttl) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。void
checkPackageAccess
(String pkg) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程访问指定的包,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程在指定包中定义类,则抛出SecurityException
。void
checkPermission
(Permission perm) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果根据当前有效的安全策略不允许由给定权限指定的请求访问,则抛出SecurityException
。void
checkPermission
(Permission perm, Object context) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果指定的安全上下文被拒绝访问给定权限指定的资源,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程启动打印作业请求,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程访问或修改系统属性,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程访问具有指定key
名称的系统属性,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程从指定的文件描述符中读取,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程读取字符串参数指定的文件,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许指定的安全上下文读取字符串参数指定的文件,则抛出SecurityException
。void
checkSecurityAccess
(String target) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。确定是否应授予或拒绝具有指定权限目标名称的权限。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程设置ServerSocket
或Socket
使用的套接字工厂,或URL
使用的流处理程序工厂,则抛出SecurityException
。void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程写入指定的文件描述符,则抛出SecurityException
。void
checkWrite
(String file) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程写入字符串参数指定的文件,则抛出SecurityException
。protected Class<?>[]
已弃用,将被删除:此 API 元素可能会在未来版本中删除。将当前执行堆栈作为类数组返回。已弃用,将被删除:此 API 元素可能会在未来版本中删除。创建一个封装当前执行环境的对象。已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回线程组,在调用此方法时将创建的任何新线程实例化到该线程组中。
-
构造方法详细信息
-
SecurityManager
public SecurityManager()已弃用,将被删除:此 API 元素可能会在未来版本中删除。构造一个新的SecurityManager
.如果已经安装了安全管理器,此方法首先调用具有
RuntimePermission("createSecurityManager")
权限的安全管理器的checkPermission
方法,以确保调用线程具有创建新安全管理器的权限。这可能会导致抛出SecurityException
。- 抛出:
SecurityException
- 如果安全管理器已经存在并且其checkPermission
方法不允许创建新的安全管理器。- 参见:
-
-
方法详情
-
getClassContext
已弃用,将被删除:此 API 元素可能会在未来版本中删除。将当前执行堆栈作为类数组返回。数组的长度是执行堆栈上的方法数。索引
0
处的元素是当前正在执行的方法的类,索引1
处的元素是该方法调用者的类,依此类推。- 返回:
- 执行堆栈。
-
getSecurityContext
已弃用,将被删除:此 API 元素可能会在未来版本中删除。创建一个封装当前执行环境的对象。例如,三参数checkConnect
方法和二参数checkRead
方法使用此方法的结果。这些方法是必需的,因为可以调用受信任的方法来代表另一个方法读取文件或打开套接字。受信任的方法需要确定是否允许其他(可能不受信任的)方法自行执行操作。此方法的默认实现是返回一个
AccessControlContext
对象。- 返回:
- 一个依赖于实现的对象,它封装了有关当前执行环境的足够信息,以便稍后执行一些安全检查。
- 参见:
-
checkPermission
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果根据当前有效的安全策略不允许由给定权限指定的请求访问,则抛出SecurityException
。此方法使用给定权限调用
AccessController.checkPermission
。- 参数:
perm
- 请求的权限。- 抛出:
SecurityException
- 如果根据当前安全策略不允许访问。NullPointerException
- 如果权限参数是null
。- 自从:
- 1.2
-
checkPermission
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果指定的安全上下文被拒绝访问给定权限指定的资源,则抛出SecurityException
。上下文必须是先前调用getSecurityContext
返回的安全上下文,并且访问控制决策基于为该安全上下文配置的安全策略。如果
context
是AccessControlContext
的实例,则使用指定权限调用AccessControlContext.checkPermission
方法。如果
context
不是AccessControlContext
的实例,则抛出SecurityException
。- 参数:
perm
- 指定权限context
- 系统相关的安全上下文。- 抛出:
SecurityException
- 如果指定的安全上下文不是AccessControlContext
的实例(例如,是null
),或者被拒绝访问给定权限指定的资源。NullPointerException
- 如果权限参数是null
。- 自从:
- 1.2
- 参见:
-
checkCreateClassLoader
public void checkCreateClassLoader()已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程创建新的类加载器,则抛出SecurityException
。此方法使用
RuntimePermission("createClassLoader")
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkCreateClassLoader
。- 抛出:
SecurityException
- 如果调用线程没有创建新类加载器的权限。- 参见:
-
checkAccess
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程修改线程参数,则抛出SecurityException
。此方法由类
Thread
的setPriority
、setName
和setDaemon
方法为当前安全管理器调用。如果线程参数是系统线程(属于具有
null
父级的线程组),则此方法使用RuntimePermission("modifyThread")
权限调用checkPermission
。如果线程参数是not一个系统线程,这个方法只是默默地返回。需要更严格策略的应用程序应该覆盖此方法。如果此方法被覆盖,覆盖它的方法应额外检查调用线程是否具有
RuntimePermission("modifyThread")
权限,如果有,则静默返回。这是为了确保授予该权限的代码(例如 JDK 本身)可以操作任何线程。如果这个方法被覆盖,那么
super.checkAccess
应该被覆盖方法中的第一条语句调用,或者等效的安全检查应该放在被覆盖的方法中。- 参数:
t
- 要检查的线程。- 抛出:
SecurityException
- 如果调用线程没有修改线程的权限。NullPointerException
- 如果线程参数是null
。- 参见:
-
checkAccess
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程修改线程组参数,则抛出SecurityException
。当创建新的子线程或子线程组时,由类
ThreadGroup
的setDaemon
和setMaxPriority
方法为当前安全管理器调用此方法。如果线程组参数是系统线程组(具有
null
父级),则此方法使用RuntimePermission("modifyThreadGroup")
权限调用checkPermission
。如果线程组参数是not系统线程组,这个方法只是默默地返回。需要更严格策略的应用程序应该覆盖此方法。如果此方法被覆盖,覆盖它的方法应额外检查调用线程是否具有
RuntimePermission("modifyThreadGroup")
权限,如果有,则静默返回。这是为了确保授予该权限的代码(例如 JDK 本身)可以操作任何线程。如果这个方法被覆盖,那么
super.checkAccess
应该被覆盖方法中的第一条语句调用,或者等效的安全检查应该放在被覆盖的方法中。- 参数:
g
- 要检查的线程组。- 抛出:
SecurityException
- 如果调用线程没有修改线程组的权限。NullPointerException
- 如果线程组参数是null
。- 参见:
-
checkExit
public void checkExit(int status) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程导致 Java 虚拟机以指定的状态代码停止,则抛出SecurityException
。此方法由类
Runtime
的exit
方法为当前安全管理器调用。0
状态表示成功;其他值表示各种错误。此方法使用
RuntimePermission("exitVM."+status)
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkExit
。- 参数:
status
- 退出状态。- 抛出:
SecurityException
- 如果调用线程无权停止具有指定状态的 Java 虚拟机。- 参见:
-
checkExec
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程创建子进程,则抛出SecurityException
。此方法由类
Runtime
的exec
方法为当前安全管理器调用。如果 cmd 是绝对路径,则此方法使用
FilePermission(cmd,"execute")
权限调用checkPermission
,否则它使用FilePermission("<<ALL FILES>>","execute")
调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkExec
。- 参数:
cmd
- 指定的系统命令。- 抛出:
SecurityException
- 如果调用线程没有创建子进程的权限。NullPointerException
- 如果cmd
参数是null
。- 参见:
-
checkLink
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程动态链接字符串参数文件指定的库代码,则抛出SecurityException
。参数是一个简单的库名或一个完整的文件名。此方法由类
Runtime
的方法load
和loadLibrary
为当前安全管理器调用。此方法使用
RuntimePermission("loadLibrary."+lib)
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkLink
。- 参数:
lib
- 库的名称。- 抛出:
SecurityException
- 如果调用线程没有动态链接库的权限。NullPointerException
- 如果lib
参数是null
。- 参见:
-
checkRead
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程从指定的文件描述符中读取,则抛出SecurityException
。此方法使用
RuntimePermission("readFileDescriptor")
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkRead
。- 参数:
fd
- 系统相关的文件描述符。- 抛出:
SecurityException
- 如果调用线程没有访问指定文件描述符的权限。NullPointerException
- 如果文件描述符参数是null
。- 参见:
-
checkRead
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程读取字符串参数指定的文件,则抛出SecurityException
。此方法使用
FilePermission(file,"read")
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkRead
。- 参数:
file
- 系统相关的文件名。- 抛出:
SecurityException
- 如果调用线程没有访问指定文件的权限。NullPointerException
- 如果file
参数是null
。- 参见:
-
checkRead
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许指定的安全上下文读取字符串参数指定的文件,则抛出SecurityException
。上下文必须是先前调用getSecurityContext
返回的安全上下文。如果
context
是AccessControlContext
的一个实例,那么AccessControlContext.checkPermission
方法将以FilePermission(file,"read")
权限被调用。如果
context
不是AccessControlContext
的实例,则抛出SecurityException
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkRead
。- 参数:
file
- 系统相关的文件名。context
- 系统相关的安全上下文。- 抛出:
SecurityException
- 如果指定的安全上下文不是AccessControlContext
的实例(例如,是null
),或者没有读取指定文件的权限。NullPointerException
- 如果file
参数是null
。- 参见:
-
checkWrite
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程写入指定的文件描述符,则抛出SecurityException
。此方法使用
RuntimePermission("writeFileDescriptor")
权限调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkWrite
。- 参数:
fd
- 系统相关的文件描述符。- 抛出:
SecurityException
- 如果调用线程没有访问指定文件描述符的权限。NullPointerException
- 如果文件描述符参数是null
。- 参见:
-
checkWrite
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程写入字符串参数指定的文件,则抛出SecurityException
。此方法使用
FilePermission(file,"write")
权限调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkWrite
。- 参数:
file
- 系统相关的文件名。- 抛出:
SecurityException
- 如果调用线程没有访问指定文件的权限。NullPointerException
- 如果file
参数是null
。- 参见:
-
checkDelete
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程删除指定文件,则抛出SecurityException
。此方法由类
File
的delete
方法为当前安全管理器调用。此方法使用
FilePermission(file,"delete")
权限调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkDelete
。- 参数:
file
- 系统相关的文件名。- 抛出:
SecurityException
- 如果调用线程没有删除文件的权限。NullPointerException
- 如果file
参数是null
。- 参见:
-
checkConnect
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程打开到指定主机和端口号的套接字连接,则抛出SecurityException
。端口号
-1
表示调用方法正在尝试确定指定主机名的 IP 地址。如果端口不等于 -1,则此方法使用
SocketPermission(host+":"+port,"connect")
权限调用checkPermission
。如果端口等于 -1,则它调用具有SocketPermission(host,"resolve")
权限的checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkConnect
。- 参数:
host
- 要连接的主机名端口。port
- 要连接的协议端口。- 抛出:
SecurityException
- 如果调用线程没有权限打开到指定host
和port
的套接字连接。NullPointerException
- 如果host
参数是null
。- 参见:
-
checkConnect
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许指定的安全上下文打开到指定主机和端口号的套接字连接,则抛出SecurityException
。端口号
-1
表示调用方法正在尝试确定指定主机名的 IP 地址。如果
context
不是AccessControlContext
的实例,则抛出SecurityException
。否则,检查端口号。如果它不等于 -1,则使用
SocketPermission(host+":"+port,"connect")
权限调用context
的checkPermission
方法。如果端口等于 -1,则使用SocketPermission(host,"resolve")
权限调用context
的checkPermission
方法。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkConnect
。- 参数:
host
- 要连接的主机名端口。port
- 要连接的协议端口。context
- 系统相关的安全上下文。- 抛出:
SecurityException
- 如果指定的安全上下文不是AccessControlContext
的实例(例如,是null
),或者没有权限打开到指定的host
和port
的套接字连接。NullPointerException
- 如果host
参数是null
。- 参见:
-
checkListen
public void checkListen(int port) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程在指定的本地端口号上等待连接请求,则抛出SecurityException
。此方法使用
SocketPermission("localhost:"+port,"listen")
调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkListen
。- 参数:
port
- 本地端口。- 抛出:
SecurityException
- 如果调用线程没有权限监听指定端口。- 参见:
-
checkAccept
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程接受来自指定主机和端口号的套接字连接,则抛出SecurityException
。此方法由类
ServerSocket
的accept
方法为当前安全管理器调用。此方法使用
SocketPermission(host+":"+port,"accept")
权限调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkAccept
。- 参数:
host
- 套接字连接的主机名。port
- 套接字连接的端口号。- 抛出:
SecurityException
- 如果调用线程没有接受连接的权限。NullPointerException
- 如果host
参数是null
。- 参见:
-
checkMulticast
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程使用(加入/离开/发送/接收)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) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程使用(加入/离开/发送/接收)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()已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程访问或修改系统属性,则抛出SecurityException
。此方法由类
System
的getProperties
和setProperties
方法使用。此方法使用
PropertyPermission("*", "read,write")
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkPropertiesAccess
。- 抛出:
SecurityException
- 如果调用线程没有访问或修改系统属性的权限。- 参见:
-
checkPropertyAccess
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程访问具有指定key
名称的系统属性,则抛出SecurityException
。此方法由类
System
的getProperty
方法使用。此方法使用
PropertyPermission(key, "read")
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkPropertyAccess
。- 参数:
key
- 系统属性键。- 抛出:
SecurityException
- 如果调用线程没有访问指定系统属性的权限。NullPointerException
- 如果key
参数是null
。IllegalArgumentException
- 如果key
为空。- 参见:
-
checkPrintJobAccess
public void checkPrintJobAccess()已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程启动打印作业请求,则抛出SecurityException
。此方法使用
RuntimePermission("queuePrintJob")
权限调用checkPermission
。如果您覆盖此方法,那么您应该在被覆盖的方法通常会引发异常的位置调用
super.checkPrintJobAccess
。- 抛出:
SecurityException
- 如果调用线程没有启动打印作业请求的权限。- 自从:
- 1.1
- 参见:
-
checkPackageAccess
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程访问指定的包,则抛出SecurityException
。在类加载期间,该方法可能会被类加载器的
loadClass
方法和Java虚拟机调用,以确保允许调用者访问正在加载的类的包。此方法检查指定的包是否以
package.access
安全属性中的任何包开头或等于任何包。一个实现也可以根据下面提到的受限包的附加列表检查包。如果包受到限制,则使用RuntimePermission("accessClassInPackage."+pkg)
权限调用checkPermission(Permission)
。如果此方法被重写,则
super.checkPackageAccess
应作为被重写方法的第一行调用。- 实现注意事项:
- 此实现还限制了 平台类加载器 或其祖先加载的所有非导出模块包。 “非导出包”是指未导出到所有模块的包。具体来说,它指的是一个包,要么根本没有被它的包含模块导出,要么被它的包含模块以合格的方式导出。
- 参数:
pkg
- 包名。- 抛出:
SecurityException
- 如果调用线程没有访问指定包的权限。NullPointerException
- 如果包名称参数是null
。- 参见:
-
checkPackageDefinition
已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程在指定包中定义类,则抛出SecurityException
。该方法由一些类加载器的
loadClass
方法调用。此方法检查指定包是否以
package.definition
安全属性中的任何包开头或等于任何包。一个实现也可以根据下面提到的受限包的附加列表检查包。如果包受到限制,则使用RuntimePermission("defineClassInPackage."+pkg)
权限调用checkPermission(Permission)
。如果此方法被重写,则
super.checkPackageDefinition
应作为被重写方法的第一行调用。- 实现注意事项:
- 此实现还限制了 平台类加载器 或其祖先加载的所有非导出模块包。 “非导出包”是指未导出到所有模块的包。具体来说,它指的是一个包,要么根本没有被它的包含模块导出,要么被它的包含模块以合格的方式导出。
- 参数:
pkg
- 包名。- 抛出:
SecurityException
- 如果调用线程没有在指定包中定义类的权限。NullPointerException
- 如果包名称参数是null
。- 参见:
-
checkSetFactory
public void checkSetFactory()已弃用,将被删除:此 API 元素可能会在未来版本中删除。如果不允许调用线程设置ServerSocket
或Socket
使用的套接字工厂,或URL
使用的流处理程序工厂,则抛出SecurityException
。此方法使用
RuntimePermission("setFactory")
权限调用checkPermission
。如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkSetFactory
。- 抛出:
SecurityException
- 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。- 参见:
-
checkSecurityAccess
已弃用,将被删除:此 API 元素可能会在未来版本中删除。确定是否应授予或拒绝具有指定权限目标名称的权限。如果允许请求的权限,则此方法会安静地返回。如果被拒绝,则会引发 SecurityException。
此方法为给定的权限目标名称创建一个
SecurityPermission
对象,并使用它调用checkPermission
。有关可能的权限目标名称列表,请参阅
的文档。SecurityPermission
如果您重写此方法,那么您应该在被重写的方法通常会引发异常的位置调用
super.checkSecurityAccess
。- 参数:
target
-SecurityPermission
的目标名称。- 抛出:
SecurityException
- 如果调用线程没有请求访问权限。NullPointerException
- 如果target
为空。IllegalArgumentException
- 如果target
为空。- 自从:
- 1.1
- 参见:
-
getThreadGroup
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回线程组,在调用此方法时将创建的任何新线程实例化到该线程组中。默认情况下,它返回当前线程的线程组。这应该由特定的安全管理器重写以返回适当的线程组。- 返回:
- 新线程实例化到的 ThreadGroup
- 自从:
- 1.1
- 参见:
-