JavaTM 2 Platform
Standard Ed. 5.0

javax.security.auth.login
类 Configuration

java.lang.Object
  继承者 javax.security.auth.login.Configuration

public abstract class Configuration
extends Object

这是用于表示应用程序中 LoginModules 的配置的抽象类。Configuration 指定应该将哪一个 LoginModules 用于某一特定应用程序,以及应该以什么样的顺序调用 LoginModules。需要为此抽象类创建子类,以提供能够读取和加载实际 Configuration 的实现。

登录配置包含以下信息。注意,此示例仅表示 Configuration 的默认语法。此类的子类实现可以实现替代语法,也可以从任何源(比如文件、数据库或服务器)中检索 Configuration

      Name {
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
      };
      Name {
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
      };
other {
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
      };
 

Configuration 中的每个条目都是通过应用程序名(Name)进行索引的,并且每个条目都包含为该应用程序配置的 LoginModules 的列表。每个 LoginModule 都是通过其完全限定类名来指定的。身份验证是按指定的具体顺序沿着模块列表向下进行。如果应用程序没有特定条目,则验证的条目默认为用于“其他方面”的特定条目。

当顺着堆栈往下进行身份验证时,Flag 值控制整个行为。下面是 Flag 的有效值的描述和它们各自的语义:

1) Required - 要求 LoginModule 成功。
              不管它成功或失败,身份验证都将沿着 LoginModule 列表继续向下进行。
2) Requisite - 要求 LoginModule 成功。
               如果它成功,则身份验证沿着 LoginModule 列表继续向下进行。
               如果它失败,则该控制立即返回给应用程序(身份验证不再沿着 LoginModule 列表继续向下进行)。
3) Sufficient - 不要求 LoginModule 成功。
               如果成功,则控制立即返回到应用程序(身份验证不再沿着 LoginModule 列表继续向下进行)。
               如果失败,则身份验证沿着 LoginModule 列表继续向下进行。
4) Optional - 不要求 LoginModule 成功。
              不管它成功或失败,身份验证都将沿着 LoginModule 列表继续向下进行。

仅在所有 RequiredRequisite LoginModules 成功时,整个身份验证才成功。如果配置了 Sufficient LoginModule 并且获得成功,则只要 Sufficient LoginModule 之前的 RequiredRequisite LoginModules 是成功的,整个身份验证就会成功。如果没有为应用程序配置 RequiredRequisite LoginModules,那么至少有一个 SufficientOptional LoginModule 必须成功。

ModuleOptions 是特定于 LoginModule 的值的空格隔开列表,这些值被直接传递给基础 LoginModules。这些选项由 LoginModule 自身定义,并在其自身中控制它的行为。例如,LoginModule 可以定义一些选项,以便支持调试/测试功能。在 Configuration 中指定选项的正确方法是使用如下的键-值对:debug="true"。键和值应该用等号分隔,值应该用双引号括起来。如果在值中出现 ${system.property} 形式的 String,则将它扩展为系统属性值。注意,对 LoginModule 可以定义的选项个数的没有限制。

下面展示基于以上语法的示例 Configuration 条目:

 Login {
   com.sun.security.auth.module.UnixLoginModule required;
   com.sun.security.auth.module.Krb5LoginModule optional
                   useTicketCache="true"
                   ticketCache="${user.home}${/}tickets";
 };
 

Configuration 指定一个名称为 "Login" 的应用程序,要求用户首先对 com.sun.security.auth.module.UnixLoginModule 进行身份验证,该验证必须成功。即使 UnixLoginModule 身份验证失败,com.sun.security.auth.module.Krb5LoginModule 仍将被调用。这有助于隐藏失败源。由于 Krb5LoginModuleOptional,所以仅在 UnixLoginModule (Required) 成功时,整个身份验证才获得成功。

还要注意的是,特定于 LoginModule 的选项 useTicketCache="true"ticketCache=${user.home}${/}tickets" 被传递到 Krb5LoginModule。这些选项指示 Krb5LoginModule 使用指定位置处缓存的票据。系统属性 user.home/ (file.separator) 扩展成它们各自的值。

通过将 "login.configuration.provider" 的安全属性(在 Java 安全属性文件中)的值设置为所需的 Configuration 实现类的完全限定名,可以更改默认的 Configuration 实现。Java 安全属性文件位于名称为 <JAVA_HOME>/lib/security/java.security 文件中,其中 <JAVA_HOME> 是指安装 JDK 的目录。

另请参见:
LoginContext

构造方法摘要
protected Configuration()
          唯一的构造方法。
 
方法摘要
abstract  AppConfigurationEntry[] getAppConfigurationEntry(String name)
          为此 Configuration 中的 name 检索 AppConfigurationEntries。
static Configuration getConfiguration()
          获取 Login Configuration。
abstract  void refresh()
          刷新和重新加载 Configuration。
static void setConfiguration(Configuration configuration)
          设置 Login Configuration
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

Configuration

protected Configuration()
唯一的构造方法。(由子类构造方法调用,通常是隐式的)。

方法详细信息

getConfiguration

public static Configuration getConfiguration()
获取 Login Configuration。

返回:
登录 Configuration。如果 Configuration 对象是由 Configuration.setConfiguration 方法设置的,则返回该对象。否则返回默认的 Configuration 对象。
抛出:
SecurityException - 如果调用方没有检索此 Configuration 的权限。
另请参见:
setConfiguration(javax.security.auth.login.Configuration)

setConfiguration

public static void setConfiguration(Configuration configuration)
设置 Login Configuration

参数:
configuration - 新的 Configuration
抛出:
SecurityException - 如果当前线程没有设置 Configuration 的 Permission。
另请参见:
getConfiguration()

getAppConfigurationEntry

public abstract AppConfigurationEntry[] getAppConfigurationEntry(String name)
为此 Configuration 中的 name 检索 AppConfigurationEntries。

参数:
name - 用于索引 Configuration 的名称。
返回:
对应于此 Configuration 中指定 name 的 AppConfigurationEntries 数组,如果不存在指定的 name 条目,则返回 null。

refresh

public abstract void refresh()
刷新和重新加载 Configuration。

此方法导致此 Configuration 对象以与实现有关的方式刷新/重新加载其内容。例如,如果此 Configuration 对象将其条目存储在文件中,则调用 refresh 可能导致重新读取该文件。

抛出:
SecurityException - 如果调用方没有刷新此 Configuration 的权限。

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策