java安全管理器类SecurityManager简单剖析:

javadoc介绍:

SecurityManager是一个允许应用实现一种安全策略的类。它允许一个应用去明确,在执行一个可能安全或者敏感的操作之前,此操作是否允许在一个安全的上下文中被执行。 应用可以同意或者拒绝执行操作。 SecurityManager类包含许多以check开头命名的方法。java库中的各种方法在执行一些敏感的操作时可以调用这些方法。对check方法典型的调用如下:SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkXXX(argument); } SecurityManager通过抛出异常来阻止没有权限或敏感操作的完成。 如果操作被允许执行,则简单的返回,如果操作被拒绝,则抛出一个SecurityException。 对于这种处理方式唯一的例外就是checkTopLevelWindow方法,此方法返回boolean值。 当前安全管理器被设置通过System类的setSecurityManager方法。获取当前安全管理器用System类的getSecurityManager方法。 SecurityManager中特定的方法checkPermission(java.security.Permission)负责明确允许还是拒绝由指定权限所指示的访问请求,默认的实现是: AccessController.checkPermission(perm); 若果一个请求访问被允许,则checkPermission安静的返回,如果被拒绝,则抛出一个SecurityException异常。 从Java 2 SDK v1.2 开始,SecurityManager 中其他所有 check 方法的默认实现都是调用 SecurityManager checkPermission 方法来确定调用线程是否具有执行所请求操作的权限。 注意,只带有单个权限参数的 checkPermission 方法总是在当前执行的线程上下文中执行安全检查。 有时,应该在给定上下文中进行的安全检查实际上需要在不同 的上下文(例如,在一个辅助线程中)中进行。 Java 为这种情况提供了包含有上下文参数的 getSecurityContext方法和 checkPermission方法。 getSecurityContext 方法返回当前调用上下文的一个“快照”(默认的实现返回一个 AccessControlContext 对象)。