public class SecurityManager extends Object
SecurityManager
类包含许多方法,名称以check
。 在这些方法执行某些潜在的敏感操作之前,这些方法在Java库中被各种方法所调用。 调用这样的check
方法通常如下所示:
SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkXXX(argument, . . . ); }
因此,安全管理员有机会通过抛出异常来防止操作完成。 安全管理器例程只是简单地返回如果允许在运行,但抛出一个SecurityException
如果操作是不允许的。 这个惯例的唯一例外是checkTopLevelWindow
,它返回一个boolean
值。
当前的安全管理器由setSecurityManager
方法在System
类中System
。 当前的安全管理器是通过getSecurityManager
方法获得的。
特殊方法checkPermission(java.security.Permission)
确定是否应该授予或拒绝由指定许可表示的访问请求。 默认实现调用
AccessController.checkPermission(perm);
如果允许访问请求, checkPermission
安静地返回。 如果被拒绝,则会抛出一个SecurityException
。
从Java 2 SDK v1.2开始,SecurityManager中的其他check
方法的SecurityManager
是调用SecurityManager checkPermission
方法来确定调用线程是否具有执行请求操作的权限。
请注意,只有一个权限参数的checkPermission
方法总是在当前执行的线程的上下文中执行安全检查。 有时,在特定上下文中应该进行的安全检查实际上需要在不同的上下文(例如,从工作线程中)完成。 提供了包含上下文参数的getSecurityContext
方法和checkPermission
方法。 getSecurityContext
方法返回当前调用上下文的“快照”。 (默认实现返回一个AccessControlContext对象。)示例调用如下:
Object context = null;
SecurityManager sm = System.getSecurityManager();
if (sm != null) context = sm.getSecurityContext();
除了checkPermission
,接受上下文对象的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.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 JDK。 本文档包括例如列出各种SecurityManager check
方法的表以及每种此类方法的默认实现所需的权限。 它还包含需要权限的所有版本1.2方法的表,并且对于每个这样的方法来说明它需要哪个权限。
有关JDK中进行的SecurityManager
更改以及有关移植1.1风格安全管理器的建议的更多信息,请参阅security documentation 。
ClassLoader
, SecurityException
, checkTopLevelWindow
, getSecurityManager
, setSecurityManager
, AccessController
, AccessControlContext
, AccessControlException
, Permission
, BasicPermission
, FilePermission
, SocketPermission
, PropertyPermission
, RuntimePermission
, AWTPermission
, Policy
, SecurityPermission
, ProtectionDomain
Modifier and Type | Field and Description |
---|---|
protected boolean |
inCheck
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 调用。
|
Constructor and Description |
---|
SecurityManager()
构造新的
SecurityManager 。
|
Modifier and Type | Method and Description |
---|---|
void |
checkAccept(String host, int port)
如果调用线程不允许从指定的主机和端口号接受套接字连接,则抛出一个
SecurityException 。
|
void |
checkAccess(Thread t)
如果调用线程不允许修改线程参数,则抛出一个
SecurityException 。
|
void |
checkAccess(ThreadGroup g)
如果调用线程不允许修改线程组参数,则抛出一个
SecurityException 。
|
void |
checkAwtEventQueueAccess()
已弃用
对
AWTPermission 的依赖性对未来Java平台的AWTPermission 造成了障碍。
该方法的用户应直接调用checkPermission(java.security.Permission) 。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission 。
|
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(类<?> clazz, int which)
已弃用
该方法依赖于调用者的堆栈深度为4,容易出错,并且不能由运行时执行。
该方法的用户应直接调用
checkPermission(java.security.Permission) 。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission 。
|
void |
checkMulticast(InetAddress maddr)
抛出
SecurityException 如果调用线程不允许使用(加入/离开/发送/接收)IP多播。
|
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()
已弃用
对
AWTPermission 的依赖性为Java平台未来的AWTPermission 创造了障碍。
该方法的用户应直接调用checkPermission(java.security.Permission) 。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission 。
|
boolean |
checkTopLevelWindow(Object window)
已弃用
对
AWTPermission 的依赖性为Java平台的未来AWTPermission 创造了障碍。
该方法的用户应直接调用checkPermission(java.security.Permission) 。
此方法将在以后的版本中更改以检查权限java.security.AllPermission 。
|
void |
checkWrite(FileDescriptor fd)
抛出
SecurityException 如果调用线程不允许写入指定的文件描述符。
|
void |
checkWrite(String file)
如果调用线程不允许写入由字符串参数指定的文件,则抛出一个
SecurityException 。
|
protected int |
classDepth(String name)
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 调用。
|
protected int |
classLoaderDepth()
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 呼叫。
|
protected ClassLoader |
currentClassLoader()
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 通话。
|
protected 类<?> |
currentLoadedClass()
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 通话。
|
protected 类[] |
getClassContext()
将当前执行堆栈作为一个类的数组返回。
|
boolean |
getInCheck()
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 调用。
|
Object |
getSecurityContext()
创建封装当前执行环境的对象。
|
ThreadGroup |
getThreadGroup()
返回要在其被调用时实例化任何正在创建的新线程的线程组。
|
protected boolean |
inClass(String name)
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 呼叫。
|
protected boolean |
inClassLoader()
已弃用
不推荐使用这种类型的安全检查。
建议使用
checkPermission 通话。
|
@Deprecated protected boolean inCheck
checkPermission
通话。
true
;
false
否则。
public SecurityManager()
SecurityManager
。
如果已经安装了安全管理器,则该方法首先使用RuntimePermission("createSecurityManager")
权限调用安全管理器的checkPermission
方法,以确保调用线程有权创建新的安全管理器。 这可能会导致投掷SecurityException
。
SecurityException
- 如果安全管理器已经存在,并且其
checkPermission
方法不允许创建新的安全管理器。
System.getSecurityManager()
, checkPermission
, RuntimePermission
@Deprecated public boolean getInCheck()
checkPermission
调用。
inCheck
字段。
如果安全检查正在进行中,则该字段应包含true
, false
false。
inCheck
protected 类[] getClassContext()
数组的长度是执行堆栈上的方法数。 索引0
的元素是当前执行方法的类,索引1
的元素是该方法的调用者的类,等等。
@Deprecated protected ClassLoader currentClassLoader()
checkPermission
调用。
ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。
在以下三种情况下,此方法将返回null
:
AccessController.doPrivileged(java.security.PrivilegedAction<T>)
)都是使用系统类加载器或其祖先之一定义的类。 checkPermission
与java.security.AllPermission
不会导致SecurityException。 getSystemClassLoader
,
checkPermission
@Deprecated protected 类<?> currentLoadedClass()
checkPermission
呼叫。
ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。
此方法将返回null
在以下三种情况下:
AccessController.doPrivileged(java.security.PrivilegedAction<T>)
)都是使用系统类加载器或其祖先之一定义的类。 checkPermission
与java.security.AllPermission
不会导致SecurityException。 getSystemClassLoader
,
checkPermission
@Deprecated protected int classDepth(String name)
checkPermission
调用。
name
- 要搜索的类的完全限定名称。
-1
如果无法找到这样的框架。
@Deprecated protected int classLoaderDepth()
checkPermission
调用。
ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。
在以下三种情况下,此方法将返回-1:
AccessController.doPrivileged(java.security.PrivilegedAction<T>)
)都是使用系统类加载器或其祖先之一定义的类。 checkPermission
与java.security.AllPermission
不会导致SecurityException。 getSystemClassLoader
,
checkPermission
@Deprecated protected boolean inClass(String name)
checkPermission
呼叫。
name
- 类的完全限定名称。
true
如果来自具有指定名称的类的方法在执行堆栈上;
false
否则。
@Deprecated protected boolean inClassLoader()
checkPermission
通话。
true
如果调用
currentClassLoader
具有非空返回值。
currentClassLoader
public Object getSecurityContext()
checkConnect
方法和双参数checkRead
方法使用。
需要这些方法,因为可以调用可信方法来读取文件或代替其他方法打开套接字。
可信方法需要确定是否允许其他(可能不受信任的)方法自行执行该操作。
该方法的默认实现是返回一个AccessControlContext
对象。
checkConnect
, checkRead
, AccessControlContext
public void checkPermission(Permission perm)
SecurityException
。
该方法调用AccessController.checkPermission
给定的权限。
perm
- 请求的权限。
SecurityException
- 如果不允许基于当前安全策略访问。
NullPointerException
- 如果权限参数是
null
。
public void checkPermission(Permission perm, Object context)
SecurityException
如果指定的安全上下文被拒绝访问由给定权限所指定的资源。
上下文必须是先前调用getSecurityContext
所返回的安全上下文,并且访问控制决定基于该安全上下文的配置的安全策略。
如果context
是context
的一个实例,那么AccessControlContext.checkPermission
方法AccessControlContext
的AccessControlContext.checkPermission
被调用。
如果context
不是一个实例AccessControlContext
然后SecurityException
异常。
perm
- 指定的权限
context
-
context
于系统的安全上下文。
SecurityException
- 如果指定的安全上下文不是
AccessControlContext
的实例(例如,是
null
),或者被拒绝访问由给定权限指定的资源。
NullPointerException
- 如果权限参数是
null
。
getSecurityContext()
,
AccessControlContext.checkPermission(java.security.Permission)
public void checkCreateClassLoader()
SecurityException
。
此方法调用checkPermission
与RuntimePermission("createClassLoader")
权限。
如果你重写这个方法,那么你应该调用super.checkCreateClassLoader
这个重写方法通常会引发一个异常。
SecurityException
- 如果调用线程没有创建新类加载器的权限。
ClassLoader.ClassLoader()
,
checkPermission
public void checkAccess(Thread t)
SecurityException
。
此方法被调用为当前的安全管理stop
, suspend
, resume
, setPriority
, setName
和setDaemon
类的方法Thread
。
如果线程参数是一个系统线程(属于具有null
父线程的线程组),则该方法调用checkPermission
与RuntimePermission("modifyThread")
权限。 如果线程参数不是系统线程,则该方法只是静默地返回。
想要更严格政策的应用程序应该覆盖此方法。 如果该方法被覆盖,则覆盖它的方法还应该检查调用线程是否具有RuntimePermission("modifyThread")
权限,如果是,则默认返回。 这是为了确保授予该权限的代码(如JDK本身)被允许操纵任何线程。
如果该方法被覆盖,那么super.checkAccess
应该被覆盖方法中的第一个语句调用,或者等效的安全检查应该被放在被覆盖的方法中。
t
- 要检查的线程。
SecurityException
- 如果调用线程没有修改线程的权限。
NullPointerException
- 如果线程参数是
null
。
resume
,
setDaemon
,
setName
,
setPriority
,
stop
,
suspend
,
checkPermission
public void checkAccess(ThreadGroup g)
SecurityException
。
这种方法被调用为当前的安全管理器创建一个新的子线程或子线程组时,以及由setDaemon
, setMaxPriority
, stop
, suspend
, resume
和destroy
类的方法ThreadGroup
。
如果线程组参数是系统线程组(有一个null
父级),则该方法调用checkPermission
与RuntimePermission("modifyThreadGroup")
权限。 如果线程组参数不是系统线程组,则此方法只能静默地返回。
想要更严格政策的应用程序应该覆盖此方法。 如果该方法被覆盖,则覆盖它的方法应该另外检查以查看调用线程是否具有RuntimePermission("modifyThreadGroup")
权限,如果是,则默认返回。 这是为了确保授予该权限的代码(如JDK本身)被允许操纵任何线程。
如果该方法被覆盖,那么super.checkAccess
应该被覆盖方法中的第一个语句调用,或者等效的安全检查应该被放在被覆盖的方法中。
g
- 要检查的线程组。
SecurityException
- 如果调用线程没有修改线程组的权限。
NullPointerException
- 如果线程组参数是
null
。
destroy
,
resume
,
setDaemon
,
setMaxPriority
,
stop
,
suspend
,
checkPermission
public void checkExit(int status)
SecurityException
。
此方法被调用为当前的安全管理exit
类的方法Runtime
。 状态0
表示成功; 其他值表示各种错误。
此方法调用checkPermission
与RuntimePermission("exitVM."+status)
权限。
如果您重写此方法,那么您应该调用super.checkExit
在重写方法通常会引发异常的时候。
status
- 退出状态。
SecurityException
- 如果调用线程没有权限停止具有指定状态的Java虚拟机。
exit
,
checkPermission
public void checkExec(String cmd)
SecurityException
如果调用线程不允许创建子进程。
此方法被调用为当前的安全管理exec
类的方法Runtime
。
该方法调用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
public void checkLink(String lib)
SecurityException
。
参数是简单的库名称或完整的文件名。
这种方法是通过调用方法为当前的安全管理load
和loadLibrary
类Runtime
。
此方法调用checkPermission
与RuntimePermission("loadLibrary."+lib)
权限。
如果你重写这个方法,那么你应该调用super.checkLink
,这样被覆盖的方法通常会引发一个异常。
lib
- 图书馆的名称。
SecurityException
- 如果调用线程没有动态链接库的权限。
NullPointerException
- 如果
lib
参数是
null
。
Runtime.load(java.lang.String)
,
Runtime.loadLibrary(java.lang.String)
,
checkPermission
public void checkRead(FileDescriptor fd)
SecurityException
如果调用线程不允许从指定的文件进行读取。
此方法调用checkPermission
与RuntimePermission("readFileDescriptor")
权限。
如果您重写此方法,那么您应该调用super.checkRead
,这样一来,重写方法通常会引发异常。
fd
- 与系统相关的文件描述符。
SecurityException
- 如果调用线程没有访问指定文件描述符的权限。
NullPointerException
- 如果文件描述符参数是
null
。
FileDescriptor
, checkPermission
public void checkRead(String file)
SecurityException
。
此方法调用checkPermission
与FilePermission(file,"read")
权限。
如果您重写此方法,那么您应该调用super.checkRead
,这样一来,重写方法通常会引发异常。
file
- 与系统相关的文件名。
SecurityException
- 如果调用线程没有访问指定文件的权限。
NullPointerException
- 如果
file
参数是
null
。
checkPermission
public void checkRead(String file, Object context)
SecurityException
。
上下文必须是前一次调用getSecurityContext
返回的安全上下文。
如果context
是实例AccessControlContext
那么AccessControlContext.checkPermission
方法将与被调用FilePermission(file,"read")
许可。
如果context
不是一个实例AccessControlContext
然后SecurityException
异常。
如果您重写此方法,那么您应该调用super.checkRead
,这样一来,覆盖的方法通常会引发异常。
file
- 与系统相关的文件名。
context
-
context
于系统的安全上下文。
SecurityException
- 如果指定的安全上下文不是
AccessControlContext
的实例(例如,是
null
),或者没有读取指定文件的权限。
NullPointerException
- 如果
file
参数是
null
。
getSecurityContext()
,
AccessControlContext.checkPermission(java.security.Permission)
public void checkWrite(FileDescriptor fd)
SecurityException
如果调用线程不允许写入指定的文件描述符。
此方法调用checkPermission
与RuntimePermission("writeFileDescriptor")
权限。
如果您重写此方法,那么您应该调用super.checkWrite
,这样一来,覆盖的方法通常会引发异常。
fd
-
fd
于系统的文件描述符。
SecurityException
- 如果调用线程没有访问指定文件描述符的权限。
NullPointerException
- 如果文件描述符参数是
null
。
FileDescriptor
, checkPermission
public void checkWrite(String file)
SecurityException
。
此方法调用checkPermission
与FilePermission(file,"write")
权限。
如果您重写此方法,那么您应该调用super.checkWrite
,这样一来,重写方法通常会引发异常。
file
- 与系统相关的文件名。
SecurityException
- 如果调用线程没有访问指定文件的权限。
NullPointerException
- 如果
file
参数是
null
。
checkPermission
public void checkDelete(String file)
SecurityException
。
此方法被调用为当前的安全管理delete
类的方法File
。
此方法调用checkPermission
与FilePermission(file,"delete")
许可。
如果您覆盖此方法,那么您应该调用super.checkDelete
,在重写方法通常会引发异常的时候。
file
- 与系统相关的文件名。
SecurityException
- 如果调用线程没有删除该文件的权限。
NullPointerException
- 如果
file
参数是
null
。
File.delete()
,
checkPermission
public void checkConnect(String host, int port)
SecurityException
。
的端口号-1
表示调用的方法正试图确定指定主机名的IP地址。
如果端口不等于-1,则此方法调用checkPermission
SocketPermission(host+":"+port,"connect")
权限。 如果端口等于-1,则调用checkPermission
与SocketPermission(host,"resolve")
权限。
如果你重写这个方法,那么你应该调用super.checkConnect
,这样被覆盖的方法通常会引发异常。
host
- 要连接的主机名端口。
port
- 要连接的协议端口。
SecurityException
- 如果调用线程没有权限打开到指定的
host
和
port
的套接字连接。
NullPointerException
- 如果
host
参数是
null
。
checkPermission
public void checkConnect(String host, int port, Object context)
SecurityException
。
的端口号-1
表示调用的方法正试图确定指定主机名的IP地址。
如果context
不是一个实例AccessControlContext
然后SecurityException
异常。
否则,将检查端口号。 如果不等于context
的checkPermission
方法被调用SocketPermission(host+":"+port,"connect")
权限。 如果端口等于-1,则context
的checkPermission
方法被调用,具有SocketPermission(host,"resolve")
权限。
如果你重写这个方法,那么你应该调用super.checkConnect
这个重写方法通常会引发一个异常。
host
- 要连接的主机名称端口。
port
- 要连接的协议端口。
context
-
context
于系统的安全上下文。
SecurityException
- 如果指定的安全上下文不是
AccessControlContext
的实例(例如,是
null
),或者没有权限打开到指定的
host
和
port
的套接字连接。
NullPointerException
- 如果
host
参数是
null
。
getSecurityContext()
,
AccessControlContext.checkPermission(java.security.Permission)
public void checkListen(int port)
SecurityException
。
该方法调用checkPermission
与SocketPermission("localhost:"+port,"listen")
。
如果您重写此方法,那么您应该调用super.checkListen
,这样一来,覆盖方法通常会引发异常。
port
- 本地端口。
SecurityException
- 如果调用线程没有在指定端口上侦听的权限。
checkPermission
public void checkAccept(String host, int port)
SecurityException
。
此方法被调用为当前的安全管理accept
类的方法ServerSocket
。
该方法调用checkPermission
与SocketPermission(host+":"+port,"accept")
权限。
如果您重写此方法,那么您应该调用super.checkAccept
,这样一来,覆盖方法通常会引发异常。
host
- 套接字连接的主机名。
port
- 套接字连接的端口号。
SecurityException
- 如果调用线程没有接受该连接的权限。
NullPointerException
- 如果
host
参数是
null
。
ServerSocket.accept()
,
checkPermission
public void checkMulticast(InetAddress maddr)
SecurityException
如果调用线程不允许使用(加入/离开/发送/接收)IP多播。
此方法调用checkPermission
与java.net.SocketPermission(maddr.getHostAddress(), "accept,connect")
权限。
如果您重写此方法,那么您应该调用super.checkMulticast
,这样一来,覆盖的方法通常会引发异常。
maddr
- 要使用的互联网组地址。
SecurityException
- 如果呼叫线程不允许使用(加入/离开/发送/接收)IP多播。
NullPointerException
- 如果地址参数是
null
。
checkPermission
@Deprecated public void checkMulticast(InetAddress maddr, byte ttl)
SecurityException
如果调用线程不允许使用(加入/离开/发送/接收)IP多播。
此方法调用checkPermission
与java.net.SocketPermission(maddr.getHostAddress(), "accept,connect")
权限。
如果你重写这个方法,那么你应该调用super.checkMulticast
这个重写方法通常会引发一个异常。
maddr
- 要使用的互联网组地址。
ttl
- 正在使用的值,如果是多播发送。
注意:这个特定的实现不使用ttl参数。
SecurityException
- 如果呼叫线程不允许使用(加入/离开/发送/接收)IP多播。
NullPointerException
- 如果地址参数是
null
。
checkPermission
public void checkPropertiesAccess()
SecurityException
如果调用线程不允许访问或修改系统属性。
该方法由getProperties
和setProperties
类System
类。
此方法调用checkPermission
与PropertyPermission("*", "read,write")
权限。
如果您重写此方法,那么您应该调用super.checkPropertiesAccess
,这样一来,覆盖的方法通常会引发异常。
SecurityException
- 如果调用线程没有访问或修改系统属性的权限。
System.getProperties()
,
System.setProperties(java.util.Properties)
,
checkPermission
public void checkPropertyAccess(String key)
key
名称的系统属性,则抛出一个SecurityException
。
该方法由getProperty
类System
。
此方法调用checkPermission
与PropertyPermission(key, "read")
权限。
如果您覆盖此方法,那么您应该调用super.checkPropertyAccess
,这样一来,重写方法通常会引发异常。
key
- 系统属性键。
SecurityException
- 如果调用线程没有权限访问指定的系统属性。
NullPointerException
- 如果
key
参数是
null
。
IllegalArgumentException
- 如果
key
为空。
System.getProperty(java.lang.String)
,
checkPermission
@Deprecated public boolean checkTopLevelWindow(Object window)
AWTPermission
的依赖性为Java平台的未来AWTPermission
创造了障碍。
该方法的用户应直接调用checkPermission(java.security.Permission)
。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission
。
false
,以显示由window
参数指示的顶级窗口。
在这种情况下,呼叫者仍然可以决定显示窗口,但窗口应该包含某种视觉警告。
如果方法返回true
,那么窗口可以没有任何特殊限制。
有关可信任和不受信任的窗口的更多信息,请参阅Window
类。
此方法调用checkPermission
与AWTPermission("showWindowWithoutWarningBanner")
许可,并返回true
如果一个SecurityException没有抛出,否则返回false
。 在Java SE的子java.awt
不包括java.awt
包的情况下, checkPermission
被调用来检查权限java.security.AllPermission
。
如果重写此方法,那么你应该将呼叫super.checkTopLevelWindow
在该点的重写方法通常会返回false
,和值super.checkTopLevelWindow
应返回。
window
- 正在创建的新窗口。
true
如果调用线程被信任放置顶层窗口;
false
否则。
NullPointerException
- 如果
window
参数是
null
。
Window
, checkPermission
public void checkPrintJobAccess()
SecurityException
。
此方法调用checkPermission
与RuntimePermission("queuePrintJob")
权限。
如果您重写此方法,那么您应该调用super.checkPrintJobAccess
,在重写方法通常会抛出异常的时候。
SecurityException
- 如果调用线程没有启动打印作业请求的权限。
checkPermission
@Deprecated public void checkSystemClipboardAccess()
AWTPermission
的依赖性为未来Java平台的AWTPermission
创造了障碍。
该方法的用户应直接调用checkPermission(java.security.Permission)
。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission
。
SecurityException
如果调用线程不允许访问系统剪贴板。
此方法调用checkPermission
与AWTPermission("accessClipboard")
权限。 在Java SE的子java.awt
不包括java.awt
包的情况下, checkPermission
被调用来检查权限java.security.AllPermission
。
如果您重写此方法,那么您应该调用super.checkSystemClipboardAccess
,在重写方法通常会引发异常的时候。
SecurityException
- 如果调用线程没有访问系统剪贴板的权限。
checkPermission
@Deprecated public void checkAwtEventQueueAccess()
AWTPermission
的依赖性为Java平台的未来AWTPermission
创造了障碍。
该方法的用户应该直接调用checkPermission(java.security.Permission)
。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission
。
SecurityException
。
此方法调用checkPermission
与AWTPermission("accessEventQueue")
许可。 在Java SE的子java.awt
不包括java.awt
包的情况下, checkPermission
被调用来检查权限java.security.AllPermission
。
如果您重写此方法,那么您应该调用super.checkAwtEventQueueAccess
,这样一来,重写方法通常会引发异常。
SecurityException
- 如果调用线程没有访问AWT事件队列的权限。
checkPermission
public void checkPackageAccess(String pkg)
SecurityException
。
该方法由loadClass
方法用于类装载器。
该方法首先获得通过获得来自呼叫的逗号分隔的列表来限制包的列表java.security.Security.getProperty("package.access")
,并检查是否pkg
开头或等于任何受限制的套餐。 如果是,那么checkPermission
获得RuntimePermission("accessClassInPackage."+pkg)
权限。
如果该方法被覆盖,那么super.checkPackageAccess
应该被调用为覆盖方法的第一行。
pkg
- 包名称。
SecurityException
- 如果调用线程没有访问指定包的权限。
NullPointerException
- 如果包名参数是
null
。
loadClass
,
getProperty
,
checkPermission
public void checkPackageDefinition(String pkg)
SecurityException
。
这种方法由某些类加载器的loadClass
方法使用。
该方法首先获得通过获得来自呼叫的逗号分隔的列表来限制包的列表java.security.Security.getProperty("package.definition")
,并检查是否pkg
开头或等于任何受限制的套餐。 如果是,那么checkPermission
获得RuntimePermission("defineClassInPackage."+pkg)
权限。
如果这个方法被覆盖,那么super.checkPackageDefinition
应该被调用为覆盖方法的第一行。
pkg
- 包名称。
SecurityException
- 如果调用线程没有在指定的包中定义类的权限。
ClassLoader.loadClass(java.lang.String, boolean)
,
getProperty
,
checkPermission
public void checkSetFactory()
SecurityException
如果调用线程不允许设置由使用的套接字工厂ServerSocket
或Socket
,或使用的流处理程序工厂URL
。
该方法调用checkPermission
RuntimePermission("setFactory")
checkPermission。
如果您覆盖此方法,那么您应该调用super.checkSetFactory
,这样一来,覆盖方法通常会引发异常。
SecurityException
- 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。
setSocketFactory
,
setSocketImplFactory
,
setURLStreamHandlerFactory
,
checkPermission
@Deprecated public void checkMemberAccess(类<?> clazz, int which)
checkPermission(java.security.Permission)
。
此方法将在以后的版本中更改,以检查权限java.security.AllPermission
。
SecurityException
。
默认策略是允许访问PUBLIC成员,以及访问与调用者具有相同类加载器的类。 在所有其他情况下,此方法调用checkPermission
与RuntimePermission("accessDeclaredMembers")
权限。
如果此方法被覆盖,则无法调用super.checkMemberAccess
,因为checkMemberAccess的默认checkMemberAccess
依赖于正在检查的代码的堆栈深度为4。
clazz
- 要执行
clazz
的类。
which
- 访问类型,PUBLIC或DECLARED。
SecurityException
- 如果来电者没有访问成员的权限。
NullPointerException
- 如果
clazz
参数是
null
。
Member
, checkPermission
public void checkSecurityAccess(String target)
如果允许请求的权限,此方法静默地返回。 如果被拒绝,则会引发SecurityException。
此方法创建一个SecurityPermission
对于给定的权限目标名对象,并调用checkPermission
它。
有关可能的许可目标名称的列表,请参阅SecurityPermission
的
。 SecurityPermission
如果您重写此方法,那么您应该调用super.checkSecurityAccess
,这样一来,覆盖方法通常会引发异常。
target
- 目标名称
SecurityPermission
。
SecurityException
- 如果调用线程没有请求的访问权限。
NullPointerException
- 如果
target
为空。
IllegalArgumentException
- 如果
target
为空。
checkPermission
public ThreadGroup getThreadGroup()
ThreadGroup