`

java.lang.SecurityManager (api文档)

 
阅读更多

安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行一个可能不安全或敏感的操作前确定该操作是什么,以及是否是在允许执行该操作的安全上下文中执行它。应用程序可以允许或不允许该操作。

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 方法使用一个上下文对象,以及根据该上下文而不是当前执行线程的上下文作出访问决策的权限。因此另一个上下文中的代码可以调用此方法,传递权限和以前保存的上下文对象。下面是一个示例调用,它使用了以前示例中获得的 SecurityManagersm

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.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 权限。该权限是为了简化系统管理员的工作而存在的,因为管理员可能需要执行很多需要所有(或许多)权限的任务。


分享到:
评论

相关推荐

    jdk6_api文档 中文版

    总结,JDK6 API文档中文版是Java开发者的重要参考资料,它详细阐述了Java类库的使用方法,帮助开发者更好地理解和利用Java平台的功能,提升编程效率和代码质量。无论你是初学者还是经验丰富的程序员,深入研读JDK6 ...

    Java2 API帮助文档

    Java2 API帮助文档是一个极其重要的资源,对于初学者和经验丰富的开发者来说都是不可或缺的参考工具。 该文档详细地阐述了Java2 API中的各个类库,包括基础类、集合框架、IO流、网络编程、多线程、异常处理、反射...

    JDK API 1.6.0 中文版.7z

    JDK API 1.6.0 中文版是针对Java 6平台的开发者文档,包含了详细的类库说明和方法解释,方便中国开发者理解和使用。 在Java 6版本中,JDK API包括了许多核心类库,如`java.lang`、`java.util`、`java.io`等。这些...

    jdk20-security-developer-guide.pdf

    7. **Java安全经理**:通过`java.lang.SecurityManager`,开发者可以实现自定义的安全策略,控制程序的行为。安全经理负责检查敏感操作并决定是否允许执行。 8. **密钥管理**:`java.security.KeyStore`类提供了...

    JAVA.2核心技术.卷II.高级特性7th(part1)

    2. **网络编程**:Java提供了丰富的API来进行网络通信,如`Socket`和`ServerSocket`用于TCP连接,`DatagramSocket`和`DatagramPacket`用于UDP通信。`URL`和`URLConnection`类则用于访问和操作网络资源。 3. **I/O流...

    Jdk+api+1.6+英文原版 CHM格式

    《Jdk+api+1.6+英文原版 CHM格式》是针对Java开发者的一份重要参考资料,它包含了Java Development Kit (JDK) 1.6版本的API文档,以CHM(Compiled Help Manual)格式呈现。CHM是一种微软开发的帮助文件格式,允许...

    JDK1.6 API帮助文档.CHM

    《JDK1.6 API帮助文档.CHM》是Java开发者的重要参考资料,它包含了Java Development Kit (JDK) 1.6版本的所有公共类、接口、枚举和异常的详细说明。这个CHM(Microsoft Compiled HTML Help)文件是Windows平台上的...

    JAVA2 SDK 类库.rar_java 类库

    而"javasdk"可能是一个解压后的目录,包含了Java SDK的具体内容,如bin目录下的编译器(javac)、解释器(java)和其他工具,lib目录下的类库文件,以及doc目录下的API文档等。 综上所述,这个压缩包对Java开发者来...

    JAVA JDK_API 1.6 官方中文版 CHM格式

    这份官方中文版API文档,无论对于初学者还是经验丰富的开发者,都是一个宝贵的资源。通过深入研究每个类和接口,开发者可以更好地理解Java的内部工作原理,提升代码质量,同时也能提高开发效率。因此,掌握《JAVA ...

    JDK_API_1_6_zh_CN.zip

    《JDK 1.6 API 中文文档》是Java开发者不可或缺的重要参考资料,它详细阐述了JDK 1.6版本中的各种类库、接口、方法和异常等核心内容。这份文档以CHM(Compiled Help Manual)格式提供,方便在个人计算机上离线查阅,...

    核心Java 2 第2卷(第7版)

    Java.lang.Thread类和Runnable接口是实现多线程的基础,而synchronized关键字、wait()、notify()和notifyAll()方法则用于线程间的协作。 2. **网络编程**:Java的java.net包提供了丰富的类和接口来处理网络通信。...

    jdk_API_1.6中文版本

    这个中文版本的API文档为中国的开发者提供了一个方便的语言环境,便于理解和查阅Java编程的相关知识点。 1. **基础类库** - **java.lang**: 这是最基础的包,包含所有Java程序都会自动导入的类,如`Object`、`...

    ProfilingSecurityManager

    Java中的安全管理器是一个类,通常是`java.lang.SecurityManager`的子类。当JVM启动时,可以通过`System.setSecurityManager()`方法设置安全管理器。一旦设置,安全管理器会介入到各种敏感操作中,例如文件读写、...

Global site tag (gtag.js) - Google Analytics