- java.lang.Object
-
- java.lang.SecurityManager
-
- 已知直接子类:
-
RMISecurityManager
public class SecurityManager extends Object
安全管理器是一个允许应用程序实现安全策略的类。 它允许应用程序在执行可能不安全或敏感的操作之前确定操作是什么以及是否在允许执行操作的安全上下文中尝试操作。 应用程序可以允许或禁止操作。SecurityManager
类包含许多名称以check
开头的方法。 在这些方法执行某些可能敏感的操作之前,这些方法在Java库中通过各种方法调用。 这种check
方法的调用通常如下所示:SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkXXX(argument, . . . ); }
因此,安全管理器有机会通过抛出异常来阻止操作的完成。 如果允许操作,则安全管理器例程仅返回,但如果不允许操作,则抛出
SecurityException
。当前安全管理器由类
System
的setSecurityManager
方法设置。 当前的安全管理器是通过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
获得的SecurityManagersm
进行的示例调用如下:if (sm != null) sm.checkPermission(permission, context);
权限属于以下类别:文件,套接字,网络,安全性,运行时,属性,AWT,反射和可序列化。 管理这些不同的权限类别类是
java.io.FilePermission
,java.net.SocketPermission
,java.net.NetPermission
,java.security.SecurityPermission
,java.lang.RuntimePermission
,java.util.PropertyPermission
,java.awt.AWTPermission
,java.lang.reflect.ReflectPermission
和java.io.SerializablePermission
。除前两个之外的所有文件(FilePermission和SocketPermission)都是
java.security.BasicPermission
子类,它本身是权限的顶级类的抽象子类,即java.security.Permission
。 BasicPermission定义包含遵循分层属性命名约定的名称的所有权限所需的功能(例如,“exitVM”,“setFactory”,“queuePrintJob”等)。 星号可以出现在名称的末尾,跟在“。”之后,或者单独出现,以表示通配符匹配。 例如:“a。*”或“*”有效,“* a”或“a * b”无效。FilePermission和SocketPermission是权限的顶级类的子类(
java.security.Permission
)。 像这样的类具有比BasicPermission子类直接从Permission而不是BasicPermission使用的更复杂的名称语法。 例如,对于java.io.FilePermission
对象,权限名称是文件(或目录)的路径名。某些权限类具有“操作”列表,该列表指示对象允许的操作。 例如,对于
java.io.FilePermission
对象,操作列表(例如“读取,写入”)指定为指定文件(或指定目录中的文件)授予的操作。其他权限类用于“命名”权限 - 包含名称但没有操作列表的权限; 您要么拥有命名权限,要么不拥有。
注意:还有一个隐含所有权限的
java.security.AllPermission
权限。 它的存在是为了简化可能需要执行需要所有(或众多)权限的多个任务的系统管理员的工作。有关许可相关信息,请参见Permissions in the Java Development Kit (JDK) 。 本文档包含一个表,列出了各种SecurityManager
check
方法以及每种此类方法的默认实现所需的权限。 它还包含一个需要权限的方法表,并且每个这样的方法都会告诉它需要哪个权限。- 从以下版本开始:
- 1.0
- 另请参见:
-
ClassLoader
,SecurityException
,getSecurityManager
,setSecurityManager
,AccessController
,AccessControlContext
,AccessControlException
,Permission
,BasicPermission
,FilePermission
,SocketPermission
,PropertyPermission
,RuntimePermission
,AWTPermission
,Policy
,SecurityPermission
,ProtectionDomain
-
-
构造方法摘要
构造方法 构造器 描述 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
如果调用线程不允许设置由使用的套接字工厂ServerSocket
或Socket
,或使用的流处理程序工厂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()
,checkPermission
,RuntimePermission
-
-
方法详细信息
-
getClassContext
protected 类<?>[] getClassContext()
将当前执行堆栈作为类数组返回。数组的长度是执行堆栈上的方法数。 索引
0
处的元素是当前正在执行的方法的类,索引1
处的元素是该方法的调用者的类,依此类推。- 结果
- 执行堆栈。
-
getSecurityContext
public Object getSecurityContext()
创建一个封装当前执行环境的对象。 这种方法的结果被使用,例如,由三个参数checkConnect
方法和由两个参数checkRead
方法。 需要这些方法是因为可以调用受信任的方法来代表另一个方法读取文件或打开套接字。 受信任的方法需要确定是否允许其他(可能是不受信任的)方法自己执行操作。此方法的默认实现是返回
AccessControlContext
对象。- 结果
- 依赖于实现的对象,它封装有关当前执行环境的足够信息,以便稍后执行某些安全检查。
- 另请参见:
-
checkConnect
,checkRead
,AccessControlContext
-
checkPermission
public void checkPermission(Permission perm)
如果根据当前有效的安全策略不允许由给定权限指定的请求访问,则抛出SecurityException
。此方法使用给定的权限调用
AccessController.checkPermission
。- 参数
-
perm
- 请求的许可。 - 异常
-
SecurityException
- 如果不允许基于当前安全策略进行访问。 -
NullPointerException
- 如果权限参数是null
。 - 从以下版本开始:
- 1.2
-
checkPermission
public void checkPermission(Permission perm, Object context)
如果拒绝指定的安全上下文访问由给定权限指定的资源,则抛出SecurityException
。 上下文必须是先前对getSecurityContext
调用返回的安全上下文,并且访问控制决策基于为该安全上下文配置的安全策略。如果
context
是实例AccessControlContext
则AccessControlContext.checkPermission
方法被调用与指定的权限。如果
context
不是一个实例AccessControlContext
然后SecurityException
异常。- 参数
-
perm
- 指定的权限 -
context
- 依赖于系统的安全上下文。 - 异常
-
SecurityException
- 如果指定的安全上下文不是AccessControlContext
的实例(例如,是null
),或者被拒绝访问给定权限指定的资源。 -
NullPointerException
- 如果权限参数是null
。 - 从以下版本开始:
- 1.2
- 另请参见:
-
getSecurityContext()
,AccessControlContext.checkPermission(java.security.Permission)
-
checkCreateClassLoader
public void checkCreateClassLoader()
如果不允许调用线程创建新的类加载器,则抛出SecurityException
。此方法使用
RuntimePermission("createClassLoader")
权限调用checkPermission
。如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkCreateClassLoader
。- 异常
-
SecurityException
- 如果调用线程没有创建新类加载器的权限。 - 另请参见:
-
ClassLoader()
,checkPermission
-
checkAccess
public void checkAccess(Thread t)
如果不允许调用线程修改线程参数,则抛出SecurityException
。此方法被调用为当前的安全管理
stop
,suspend
,resume
,setPriority
,setName
,并setDaemon
类的方法Thread
。如果thread参数是系统线程(属于具有
null
父级的线程组),则此方法使用RuntimePermission("modifyThread")
权限调用checkPermission
。 如果thread参数不是系统线程,则此方法只是静默返回。需要更严格策略的应用程序应覆盖此方法。 如果重写此方法,则覆盖它的方法应另外检查调用线程是否具有
RuntimePermission("modifyThread")
权限,如果是,RuntimePermission("modifyThread")
静默方式返回。 这是为了确保允许授予该权限的代码(例如JDK本身)来操纵任何线程。如果重写此方法,则应该通过重写方法中的第一个语句调用
super.checkAccess
,或者应该在重写方法中放置等效安全检查。- 参数
-
t
- 要检查的线程。 - 异常
-
SecurityException
- 如果调用线程没有修改线程的权限。 -
NullPointerException
- 如果线程参数是null
。 - 另请参见:
-
resume
,setDaemon
,setName
,setPriority
,stop
,suspend
,checkPermission
-
checkAccess
public void checkAccess(ThreadGroup g)
如果不允许调用线程修改线程组参数,则抛出SecurityException
。这种方法被调用为当前的安全管理器创建一个新的子线程或子线程组时,以及由
setDaemon
,setMaxPriority
,stop
,suspend
,resume
,并destroy
类的方法ThreadGroup
。如果线程组参数是系统线程组(具有
null
父级),则此方法将使用RuntimePermission("modifyThreadGroup")
权限调用checkPermission
。 如果线程组参数不是系统线程组,则此方法只是静默返回。需要更严格策略的应用程序应覆盖此方法。 如果重写此方法,则覆盖它的方法应另外检查调用线程是否具有
RuntimePermission("modifyThreadGroup")
权限,如果是,RuntimePermission("modifyThreadGroup")
静默方式返回。 这是为了确保允许授予该权限的代码(例如JDK本身)来操纵任何线程。如果重写此方法,则应在重写方法中的第一个语句调用
super.checkAccess
,或者应在重写方法中放置等效安全性检查。- 参数
-
g
- 要检查的线程组。 - 异常
-
SecurityException
- 如果调用线程没有修改线程组的权限。 -
NullPointerException
- 如果线程组参数是null
。 - 另请参见:
-
destroy
,resume
,setDaemon
,setMaxPriority
,stop
,suspend
,checkPermission
-
checkExit
public void checkExit(int status)
如果不允许调用线程导致Java虚拟机使用指定的状态代码暂停,则抛出SecurityException
。通过类
Runtime
的exit
方法为当前安全性管理器调用此方法。 状态为0
表示成功; 其他值表示各种错误。此方法使用
RuntimePermission("exitVM."+status)
权限调用checkPermission
。如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkExit
。- 参数
-
status
- 退出状态。 - 异常
-
SecurityException
- 如果调用线程没有权限暂停具有指定状态的Java虚拟机。 - 另请参见:
-
exit
,checkPermission
-
checkExec
public void checkExec(String cmd)
如果不允许调用线程创建子进程,则抛出SecurityException
。通过类
Runtime
的exec
方法为当前安全管理器调用此方法。此方法调用
checkPermission
与FilePermission(cmd,"execute")
如果cmd是绝对路径的权限,否则它会调用checkPermission
与FilePermission("<<ALL FILES>>","execute")
。如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkExec
。- 参数
-
cmd
- 指定的系统命令。 - 异常
-
SecurityException
- 如果调用线程没有创建子进程的权限。 -
NullPointerException
- 如果cmd
参数为null
。 - 另请参见:
-
Runtime.exec(java.lang.String)
,Runtime.exec(java.lang.String, java.lang.String[])
,Runtime.exec(java.lang.String[])
,Runtime.exec(java.lang.String[], java.lang.String[])
,checkPermission
-
checkLink
public void checkLink(String lib)
如果不允许调用线程动态链接字符串参数文件指定的库代码,则抛出SecurityException
。 参数是简单的库名称或完整的文件名。通过类
Runtime
方法load
和loadLibrary
为当前安全管理器调用该方法。此方法使用
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
。 - 另请参见:
-
FileDescriptor
,checkPermission
-
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
返回的安全上下文。如果
context
是context
的实例,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
。 - 另请参见:
-
FileDescriptor
,checkPermission
-
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
。通过类
File
的delete
方法为当前安全管理器调用此方法。此方法使用
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
- 如果调用线程无权打开到指定的host
和port
的套接字连接。 -
NullPointerException
- 如果host
参数是null
。 - 另请参见:
-
checkPermission
-
checkConnect
public void checkConnect(String host, int port, Object context)
如果不允许指定的安全上下文打开指定主机和端口号的套接字连接,则抛出SecurityException
。端口号
-1
表示调用方法正在尝试确定指定主机名的IP地址。如果
context
不是一个实例AccessControlContext
然后SecurityException
异常。否则,检查端口号。 如果它不等于-1,则
context
的checkPermission
方法并获得SocketPermission(host+":"+port,"connect")
权限。 如果端口等于-1,则使用SocketPermission(host,"resolve")
权限调用context
的checkPermission
方法。如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkConnect
。- 参数
-
host
- 要连接的主机名端口。 -
port
- 要连接的协议端口。 -
context
- 依赖于系统的安全上下文。 - 异常
-
SecurityException
- 如果指定的安全上下文不是AccessControlContext
的实例(例如,是null
),或者无权打开到指定的host
和port
的套接字连接。 -
NullPointerException
- 如果host
参数是null
。 - 另请参见:
-
getSecurityContext()
,AccessControlContext.checkPermission(java.security.Permission)
-
checkListen
public void checkListen(int port)
如果不允许调用线程等待指定本地端口号上的连接请求,则抛出SecurityException
。此方法调用
checkPermission
与SocketPermission("localhost:"+port,"listen")
。如果重写此方法,则应该在被覆盖的方法通常会抛出异常时调用
super.checkListen
。- 参数
-
port
- 本地端口。 - 异常
-
SecurityException
- 如果调用线程没有侦听指定端口的权限。 - 另请参见:
-
checkPermission
-
checkAccept
public void checkAccept(String host, int port)
如果不允许调用线程接受来自指定主机和端口号的套接字连接,则抛出SecurityException
。通过类
ServerSocket
的accept
方法为当前安全管理器调用此方法。此方法使用
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
。该方法由
getProperties
和setProperties
类System
方法System
。此方法使用
PropertyPermission("*", "read,write")
权限调用checkPermission
。如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkPropertiesAccess
。- 异常
-
SecurityException
- 如果调用线程没有访问或修改系统属性的权限。 - 另请参见:
-
System.getProperties()
,System.setProperties(java.util.Properties)
,checkPermission
-
checkPropertyAccess
public void checkPropertyAccess(String key)
抛出SecurityException
如果调用线程不允许使用指定的访问系统属性key
名。该方法由
getProperty
类System
方法使用。此方法使用
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
。 - 另请参见:
-
loadClass
,getProperty
,checkPermission
-
checkPackageDefinition
public void checkPackageDefinition(String pkg)
如果不允许调用线程在指定的包中定义类,则抛出SecurityException
。这种方法由一些类加载器的
loadClass
方法调用。此方法检查指定的包是以
package.definition
安全属性中的任何包开头还是等于任何包。 实现还可以针对附加的受限包列表检查包,如下所述。 如果包被限制,checkPermission(Permission)
是带一个RuntimePermission("defineClassInPackage."+pkg)
许可。如果重写此方法,则应将
super.checkPackageDefinition
作为重写方法中的第一行。- Implementation Note:
- 此实现还限制由the platform class loader或其祖先加载的所有未导出的模块包。 “未导出的包”是指未导出到所有模块的包。 具体来说,它指的是一个包,它或者根本不由其包含模块导出,或者由其包含模块以合格的方式导出。
- 参数
-
pkg
- 包名称。 - 异常
-
SecurityException
- 如果调用线程没有权限在指定的包中定义类。 -
NullPointerException
- 如果包名称参数为null
。 - 另请参见:
-
ClassLoader.loadClass(String, boolean)
,getProperty
,checkPermission
-
checkSetFactory
public void checkSetFactory()
抛出SecurityException
如果调用线程不允许设置由使用的套接字工厂ServerSocket
或Socket
,或使用的流处理程序工厂URL
。此方法使用
RuntimePermission("setFactory")
权限调用checkPermission
。如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkSetFactory
。- 异常
-
SecurityException
- 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。 - 另请参见:
-
setSocketFactory
,setSocketImplFactory
,setURLStreamHandlerFactory
,checkPermission
-
checkSecurityAccess
public void checkSecurityAccess(String target)
确定是应授予还是拒绝具有指定权限目标名称的权限。如果允许所请求的权限,则此方法将安静地返回。 如果被拒绝,则引发SecurityException。
此方法为给定的权限目标名称创建
SecurityPermission
对象,并使用它调用checkPermission
。有关可能的权限目标名称列表,请参阅
的文档。SecurityPermission
如果重写此方法,则应该在重写方法通常会抛出异常时调用
super.checkSecurityAccess
。- 参数
-
target
-的目标名称SecurityPermission
。 - 异常
-
SecurityException
- 如果调用线程没有所请求访问权限。 -
NullPointerException
- 如果target
为空。 -
IllegalArgumentException
- 如果target
是空的。 - 从以下版本开始:
- 1.1
- 另请参见:
-
checkPermission
-
getThreadGroup
public ThreadGroup getThreadGroup()
返回一个线程组,在该线程组中实例化在调用它时创建的任何新线程。 默认情况下,它返回当前线程的线程组。 这应该被特定的安全管理器覆盖,以返回适当的线程组。- 结果
- 新线程被实例化的ThreadGroup
- 从以下版本开始:
- 1.1
- 另请参见:
-
ThreadGroup
-
-