|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.lang.SecurityManager
public class SecurityManager
安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行一个可能不安全或敏感的操作前确定该操作是什么,以及是否是在允许执行该操作的安全上下文中执行它。应用程序可以允许或不允许该操作。
SecurityManager
包含了很多名称以 check
开头的方法。Java 库中的各种方法在执行某些潜在的敏感操作前可以调用这些方法。对 check
方法的典型调用如下:
SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkXXX(argument, . . . ); }
因此,安全管理器通过抛出异常来提供阻止操作完成的机会。如果允许执行该操作,则安全管理器例程只是简单地返回,但如果不允许执行该操作,则抛出一个 SecurityException
。该约定的惟一例外是 checkTopLevelWindow
,它返回 boolean
值。
当前的安全管理器由 System
类中的 setSecurityManager
方法设置。当前的安全管理器由 getSecurityManager
方法获取。
特殊方法 checkPermission(java.security.Permission)
负责确定是应该允许还是拒绝由指定权限所指示的访问请求。默认的实现调用
AccessController.checkPermission(perm);
如果允许访问请求,则返回 checkPermission
。如果拒绝访问请求,则抛出 SecurityException
。
从 Java 2 SDK v1.2 开始,SecurityManager
中其他所有 check
方法的默认实现都是调用 SecurityManager checkPermission
方法来确定调用线程是否具有执行所请求操作的权限。
注意,只带有单个权限参数的 checkPermission
方法总是在当前执行的线程上下文中执行安全检查。有时,应该在给定上下文中进行的安全检查实际上需要在不同 的上下文(例如,在一个辅助线程中)中进行。Java 为这种情况提供了包含有上下文参数的 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.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 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
字段摘要 | |
---|---|
protected boolean |
inCheck
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。 |
构造方法摘要 | |
---|---|
SecurityManager()
构造一个新的 SecurityManager 。 |
方法摘要 | |
---|---|
void |
checkAccept(String host,
int port)
如果不允许调用线程从指定的主机和端口号接受套接字连接,则抛出 SecurityException 。 |
void |
checkAccess(Thread t)
如果不允许调用线程修改 thread 参数,则抛出 SecurityException 。 |
void |
checkAccess(ThreadGroup g)
如果不允许调用线程修改线程组参数,则抛出 SecurityException 。 |
void |
checkAwtEventQueueAccess()
如果不允许调用线程访问 AWT 事件队列,则抛出 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 |
checkMemberAccess(Class<?> clazz,
int which)
如果不允许调用线程访问程序,则抛出 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)
如果不允许调用线程访问具有指定的 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()
如果不允许调用线程设置由 ServerSocket 或 Socket 使用的套接字工厂,或者由 URL 使用的流处理程序工厂,则抛出 SecurityException 。 |
void |
checkSystemClipboardAccess()
如果不允许调用线程访问系统剪贴板,则抛出 SecurityException 。 |
boolean |
checkTopLevelWindow(Object window)
如果不受信任的调用线程调出由 window 参数指出的顶层窗口,则返回 false 。 |
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 Class<?> |
currentLoadedClass()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。 |
protected Class[] |
getClassContext()
以类数组的形式返回当前执行堆栈。 |
boolean |
getInCheck()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。 |
Object |
getSecurityContext()
创建一个封装当前执行环境的对象。 |
ThreadGroup |
getThreadGroup()
调用此方法时,返回所有新创建的线程实例化后所在的线程组。 |
protected boolean |
inClass(String name)
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。 |
protected boolean |
inClassLoader()
已过时。 建议不使用该类安全检查。建议使用 checkPermission 调用。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
@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
。inCheck
protected Class[] getClassContext()
数组的长度是执行堆栈中的方法数。索引 0
指定的元素是当前执行方法的类,索引 1
指定的元素是该方法调用方的类,依此类推。
@Deprecated protected ClassLoader currentClassLoader()
checkPermission
调用。
ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。
在以下三种情况中,此方法将返回 null
:
AccessController.doPrivileged(java.security.PrivilegedAction)
)为止的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
java.security.AllPermission
调用 checkPermission
不会导致 SecurityException。
getSystemClassLoader
,
checkPermission
@Deprecated protected Class<?> currentLoadedClass()
checkPermission
调用。
ClassLoader.getSystemClassLoader()
返回)或其祖先之一的类加载器。
在以下三种情况中,此方法将返回 null
:
AccessController.doPrivileged(java.security.PrivilegedAction)
)为止的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
java.security.AllPermission
调用 checkPermission
不会导致 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)
)为止的所有方法都来自于使用系统类加载器或其祖先之一所定义的类。
java.security.AllPermission
调用 checkPermission
不会导致 SecurityException。
getSystemClassLoader
,
checkPermission
@Deprecated protected boolean inClass(String name)
checkPermission
调用。
name
- 该类的完全限定名。
true
;否则返回 false
。@Deprecated protected boolean inClassLoader()
checkPermission
调用。
currentClassLoader
具有非 null 的返回值,则返回 true
。currentClassLoader
public Object getSecurityContext()
checkConnect
方法和带有两参数的 checkRead
方法使用。这些方法是必需的,因为一个受信任的方法可能代表另一方法被调用,以读取一个文件或打开一个套接字。受信任的方法需要确定是否允许另一个方法(可能不受信任)独自执行该操作。
此方法的默认实现是返回 AccessControlContext
对象。
checkConnect
,
checkRead
,
AccessControlContext
public void checkPermission(Permission perm)
SecurityException
。
此方法使用给定的权限调用 AccessController.checkPermission
。
perm
- 请求的权限。
SecurityException
- 如果根据当前的安全策略不允许进行访问。
NullPointerException
- 如果 permission 参数为 null
。public void checkPermission(Permission perm, Object context)
SecurityException
。该上下文必须是一个通过以前调用 getSecurityContext
所返回的安全上下文,并且应该根据为该安全上下文所配置的安全策略来作出访问控制决策。
如果 context
是 AccessControlContext
的一个实例,则用指定的权限调用 AccessControlContext.checkPermission
方法。
如果 context
不是 AccessControlContext
的一个实例,则抛出 SecurityException
。
perm
- 指定的权限。context
- 一个取决于系统的安全上下文。
SecurityException
- 如果指定的安全上下文不是 AccessControlContext
的一个实例(如为 null
),或者访问由给定权限所指定的资源时被拒绝。
NullPointerException
- 如果权限参数为 null
。getSecurityContext()
,
AccessControlContext.checkPermission(java.security.Permission)
public void checkCreateClassLoader()
SecurityException
。
此方法用 RuntimePermission("createClassLoader")
权限调用 checkPermission
。
如果重写此方法,那么应该在已重写方法通常将要抛出异常时调用 super.checkCreateClassLoader
。
SecurityException
- 如果调用线程没有创建新类加载器的权限。ClassLoader.ClassLoader()
,
checkPermission
public void checkAccess(Thread t)
SecurityException
。
由 Thread
类的 stop
、suspend
、resume
、setPriority
、setName
和 setDaemon
方法为当前的安全管理器调用此方法。
如果 thread 参数是一个系统线程(属于具有一个 null
父线程的线程组),那么此方法使用 RuntimePermission("modifyThread")
权限调用 checkPermission
。如果 thread 参数不 是一个系统线程,则此方法不执行任何操作。
希望具有更为严格策略的应用程序应该重写此方法。如果重写此方法,那么重写它的方法应该进行额外的检查,查看调用线程是否具有 RuntimePermission("modifyThread")
权限,如果是,则此方法不执行任何操作。这样做是为了确保允许那些被授予该权限的代码(如 JDK 本身)能够操作所有线程。
如果重写此方法,那么应该由已重写方法中的第一条语句调用 super.checkAccess
,或者应该在已重写方法中放入等效的安全检查代码。
t
- 要检查的线程。
SecurityException
- 如果调用线程没有修改线程的权限。
NullPointerException
- 如果线程参数为 null
。resume
,
setDaemon
,
setName
,
setPriority
,
stop
,
suspend
,
checkPermission
public void checkAccess(ThreadGroup g)
SecurityException
。
当创建新的子线程或子线程组时,由 ThreadGroup
类的 setDaemon
、setMaxPriority
、stop
、suspend
、resume
和 destroy
方法为当前的安全管理器调用此方法。
如果该线程组是一个系统线程组(具有 null
父线程),那么此方法使用 RuntimePermission("modifyThreadGroup")
权限调用 checkPermission
。如果该线程组不 是一个系统线程组,则此方法不执行任何操作。
希望具有更为严格策略的应用程序应该重写此方法。如果重写此方法,那么重写它的方法应该进行额外的检查,查看调用线程是否具有 RuntimePermission("modifyThreadGroup")
权限,如果是,则此方法不执行任何操作。这样做是为了确保允许那些被授予该权限的代码(如 JDK 本身)能够操作所有线程。
如果重写此方法,那么应该由已重写方法中的第一条语句调用 super.checkAccess
,或者应该在已重写方法中放入等效的安全检查。
g
- 要检查的线程组。
SecurityException
- 如果调用线程没有修改线程组的权限。
NullPointerException
- 如果线程组参数为 null
。destroy
,
resume
,
setDaemon
,
setMaxPriority
,
stop
,
suspend
,
checkPermission
public void checkExit(int status)
SecurityException
。
由 Runtime
类的 exit
方法为当前的安全管理器调用此方法。状态 0
表示成功,其他值则表示各种错误。
此方法用 RuntimePermission("exitVM")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkExit
。
status
- 退出状态。
SecurityException
- 如果调用线程没有用指定的状态暂停 Java 虚拟机的权限。exit
,
checkPermission
public void checkExec(String cmd)
SecurityException
。
由 Runtime
类的 exec
方法为当前的安全管理器调用此方法。
如果 cmd 是绝对路径,那么此方法使用 FilePermission(cmd,"execute")
权限调用 checkPermission
,否则用 FilePermission("<<ALL FILES>>","execute")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 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
。此方法中的参数可以是一个简单的库名,或者是一个完整的文件名。
由 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
public void checkRead(FileDescriptor fd)
SecurityException
。
此方法用 RuntimePermission("readFileDescriptor")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkRead
。
fd
- 取决于系统的文件描述符。
SecurityException
- 如果调用线程没有访问指定文件描述符的权限。
NullPointerException
- 如果文件描述符参数为 null
。FileDescriptor
,
checkPermission
public void checkRead(String file)
SecurityException
。
此方法用 FilePermission(file,"read")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkRead
。
file
- 取决于系统的文件名。
SecurityException
- 如果调用线程没有访问指定文件的权限。
NullPointerException
- 如果 file
参数为 null
。checkPermission
public void checkRead(String file, Object context)
SecurityException
。该上下文必须是以前调用 getSecurityContext
所返回的安全上下文。
如果 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)
public void checkWrite(FileDescriptor fd)
SecurityException
。
此方法用 RuntimePermission("writeFileDescriptor")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkWrite
。
fd
- 取决于系统的文件描述符。
SecurityException
- 如果调用的方法没有访问指定文件描述符的权限。
NullPointerException
- 如果文件描述符参数为 null
。FileDescriptor
,
checkPermission
public void checkWrite(String file)
SecurityException
。
此方法用 FilePermission(file,"write")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkWrite
。
file
- 取决于系统的文件名。
SecurityException
- 如果调用线程没有访问指定文件的权限。
NullPointerException
- 如果 file
参数为 null
。checkPermission
public void checkDelete(String file)
SecurityException
。
由 File
类的 delete
方法为当前的安全管理器调用此方法。
此方法用 FilePermission(file,"delete")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkDelete
。
file
- 取决于系统的文件名。
SecurityException
- 如果调用线程没有删除文件的权限。
NullPointerException
- 如果 file
参数为 null
。File.delete()
,
checkPermission
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
public void checkConnect(String host, int port, Object context)
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
。getSecurityContext()
,
AccessControlContext.checkPermission(java.security.Permission)
public void checkListen(int port)
SecurityException
。
如果端口号不是 0,则此方法用 SocketPermission("localhost:"+port,"listen")
调用 checkPermission
。如果端口号是 0,则此方法用 SocketPermission("localhost:1024-","listen")
调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkListen
。
port
- 本地端口。
SecurityException
- 如果调用的方法没有侦听指定端口的权限。checkPermission
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
public void checkMulticast(InetAddress maddr)
SecurityException
。
此方法使用 java.net.SocketPermission(maddr.getHostAddress(), "accept,connect")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkMulticast
。
maddr
- 要使用的 Internet 组地址。
SecurityException
- 如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播。
NullPointerException
- 如果地址参数为 null
。checkPermission
@Deprecated public void checkMulticast(InetAddress maddr, byte ttl)
SecurityException
。
此方法用 java.net.SocketPermission(maddr.getHostAddress(), "accept,connect")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkMulticast
。
maddr
- 要使用的 Internet 组地址。ttl
- 正在使用的值,如果是用多路广播发送的话。注:此特定实现不使用 ttl 参数。
SecurityException
- 如果不允许调用线程使用(加入/离开/发送/接收)IP 多路广播。
NullPointerException
- 如果地址参数为 null
。checkPermission
public void checkPropertiesAccess()
SecurityException
。
由 System
类的 getProperties
和 setProperties
方法使用此方法。
此方法用 PropertyPermission("*", "read,write")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkPropertiesAccess
。
SecurityException
- 如果调用线程没有访问或修改系统属性的权限。System.getProperties()
,
System.setProperties(java.util.Properties)
,
checkPermission
public void checkPropertyAccess(String key)
key
名的系统属性,则抛出 SecurityException
。
由 System
类的 getProperty
方法使用此方法。
此方法用 PropertyPermission(key, "read")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkPropertyAccess
。
key
- key 系统属性。
SecurityException
- 如果调用线程没有访问指定系统属性的权限。
NullPointerException
- 如果 key
参数为 null
。
IllegalArgumentException
- 如果 key
为空。System.getProperty(java.lang.String)
,
checkPermission
public boolean checkTopLevelWindow(Object window)
window
参数指出的顶层窗口,则返回 false
。在这种情况下,调用方仍然可以决定显示窗口,但窗口应包括某些可视的警告。如果此方法返回 true
,则窗口的显示没有任何特殊的限制。
有关受信任和不受信任窗口的更多信息,请参见 Window
类。
此方法用 AWTPermission("showWindowWithoutWarningBanner")
权限调用 checkPermission
,并且如果未抛出 SecurityException,则返回 true
,否则返回 false
。
如果重写此方法,那么通常应该在已重写方法将要返回 false
时调用 super.checkTopLevelWindow
,并且应该返回 super.checkTopLevelWindow
值。
window
- 所创建的新窗口。
true
,否则返回 false
。
NullPointerException
- 如果 window
参数为 null
。Window
,
checkPermission
public void checkPrintJobAccess()
SecurityException
。
此方法用 RuntimePermission("queuePrintJob")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkPrintJobAccess
。
SecurityException
- 如果调用线程没有发起打印作业请求的权限。checkPermission
public void checkSystemClipboardAccess()
SecurityException
。
此方法用 AWTPermission("accessClipboard")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkSystemClipboardAccess
。
SecurityException
- 如果调用线程没有访问系统剪贴板的权限。checkPermission
public void checkAwtEventQueueAccess()
SecurityException
。
此方法用 AWTPermission("accessEventQueue")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkAwtEventQueueAccess
。
SecurityException
- 如果调用线程没有访问 AWT 事件队列的权限。checkPermission
public void checkPackageAccess(String pkg)
SecurityException
。
由类加载器的 loadClass
方法使用此方法。
此方法首先获得受限制包的列表,方法是从对 java.security.Security.getProperty("package.access")
的调用中获取一个逗号分隔的列表,并查看受限制包是否以 pkg
开头或等于该字符。如果是,则用 RuntimePermission("accessClassInPackage."+pkg)
权限调用 checkPermission
。
如果重写了此方法,则应在已重写方法的首行调用 super.checkPackageAccess
。
pkg
- 包名。
SecurityException
- 如果调用线程没有访问指定包的权限。
NullPointerException
- 如果包名参数为 null
。loadClass
,
getProperty
,
checkPermission
public void checkPackageDefinition(String pkg)
SecurityException
。
由类加载器的 loadClass
方法使用此方法。
此方法首先获得受限制包的列表,方法是从对 java.security.Security.getProperty("package.definition")
的调用中获取一个逗号分隔的列表,并查看受限制包是否以 pkg
开头或等于该字符。如果是,则用 RuntimePermission("defineClassInPackage."+pkg)
权限调用 checkPermission
。
如果重写了此方法,则应在已重写方法的首行调用 super.checkPackageDefinition
。
pkg
- 包名。
SecurityException
- 如果调用线程没有在指定包中定义类的权限。ClassLoader.loadClass(java.lang.String, boolean)
,
getProperty
,
checkPermission
public void checkSetFactory()
ServerSocket
或 Socket
使用的套接字工厂,或者由 URL
使用的流处理程序工厂,则抛出 SecurityException
。
此方法用 RuntimePermission("setFactory")
权限调用 checkPermission
。
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkSetFactory
。
SecurityException
- 如果调用线程没有指定套接字工厂或流处理程序工厂的权限。setSocketFactory
,
setSocketImplFactory
,
setURLStreamHandlerFactory
,
checkPermission
public void checkMemberAccess(Class<?> clazz, int which)
SecurityException
。
默认的策略是允许访问 PUBLIC 成员,以及访问具有与调用方相同类加载器的类。在所有其他情况下,此方法用 RuntimePermission("accessDeclaredMembers")
权限调用 checkPermission
。
如果重写此方法,则不能调用 super.checkMemberAccess
,因为 checkMemberAccess
的默认实现依赖于堆栈深度为 4 时检查的代码。
clazz
- 要执行反射的类。which
- 访问类型,PUBLIC 或 DECLARED。
SecurityException
- 如果调用方没有访问成员的权限。
NullPointerException
- 如果 clazz
参数为 null
。Member
,
checkPermission
public void checkSecurityAccess(String target)
如果允许请求的权限,则此方法不执行任何操作。如果拒绝,则引发 SecurityException。
此方法为给定权限的目标名创建一个 SecurityPermission
对象并用该对象调用 checkPermission
。
有关可用权限目标名的列表,请参阅
的文档。
SecurityPermission
如果重写此方法,那么通常应该在已重写方法将要抛出异常时调用 super.checkSecurityAccess
。
target
- SecurityPermission
的目标名。
SecurityException
- 如果调用线程没有所请求访问的权限。
NullPointerException
- 如果 target
为 null。
IllegalArgumentException
- 如果 target
为空。checkPermission
public ThreadGroup getThreadGroup()
ThreadGroup
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。