模块 java.base

类 Configuration

java.lang.Object
javax.security.auth.login.Configuration
已知子类:
ConfigFile

public abstract class Configuration extends Object
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,并包含为该应用程序配置的登录模块列表。每个 LoginModule 都是通过其完全限定的类名指定的。身份验证按照指定的确切顺序在模块列表中向下进行。如果应用程序没有特定条目,则默认为“其他".

旗帜value 控制整个行为,因为身份验证在堆栈中进行。以下代表对有效值的描述旗帜以及它们各自的语义:

   1) Required   - The LoginModule is required to succeed.
           If it succeeds or fails, authentication still continues
           to proceed down the LoginModule list.

   2) Requisite  - The LoginModule is required to succeed.
           If it succeeds, authentication continues down the
           LoginModule list. If it fails,
           control immediately returns to the application
           (authentication does not proceed down the
           LoginModule list).

   3) Sufficient  - The LoginModule is not required to
           succeed. If it does succeed, control immediately
           returns to the application (authentication does not
           proceed down the LoginModule list).
           If it fails, authentication continues down the
           LoginModule list.

   4) Optional   - The LoginModule is not required to
           succeed. If it succeeds or fails,
           authentication still continues to proceed down the
           LoginModule list.
 

整体认证只有当全部成功必需的必要的登录模块成功。如果一个充足的LoginModule配置成功,那么只有必需的必要的在此之前的登录模块充足的LoginModule 需要成功才能使整体身份验证成功。如果不必需的或者必要的LoginModules 是为一个应用程序配置的,那么至少有一个充足的或者OptionalLoginModule 必须成功。

ModuleOptions是一个以空格分隔的 LoginModule 特定值列表,这些值直接传递给底层的登录模块。选项由 LoginModule 本身定义,并控制其中的行为。例如,LoginModule 可以定义支持调试/测试功能的选项。在 Configuration 中指定选项的正确方法是使用以下键值对:调试=“真”.键和值应该用“等号”分隔,值应该用双引号括起来。如果值中出现 ${system.property} 形式的字符串,它将扩展为系统属性的值。请注意,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 (必需的) 成功。

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

在任何给定时间,运行时中只安装了一个配置对象。可以通过调用 setConfiguration 方法来安装配置对象。安装的Configuration对象可以通过调用getConfiguration方法获取。

如果运行时未安装配置对象,则调用 getConfiguration 将安装默认配置实现的实例(此抽象类的默认子类实现)。通过将login.configuration.providersecurity 属性的值设置为所需Configuration 子类实现的完全限定名称,可以更改默认Configuration 实现。

应用程序代码可以直接子类化 Configuration 以提供自定义实现。此外,可以通过调用具有标准类型的 getInstance 工厂方法之一来构造 Configuration 对象的实例。默认策略类型是“JavaLoginConfig”。有关标准配置类型的列表,请参阅 Java 安全标准算法名称规范 中的配置部分。

自从:
1.4
参见:
  • 构造方法详细信息

    • Configuration

      protected Configuration()
      唯一的构造方法。 (对于子类构造方法的调用,通常是隐式的。)
  • 方法详情

    • getConfiguration

      public static Configuration  getConfiguration()
      获取已安装的登录配置。
      返回:
      登录配置。如果通过 Configuration.setConfiguration 方法设置了 Configuration 对象,则返回该对象。否则,将返回默认配置对象。
      抛出:
      SecurityException - 如果调用者没有检索配置的权限。
      参见:
    • setConfiguration

      public static void setConfiguration(Configuration  configuration)
      设置登录名Configuration
      参数:
      configuration - 新的 Configuration
      抛出:
      SecurityException - 如果当前线程没有设置 Configuration 的权限。
      参见:
    • getInstance

      public static Configuration  getInstance(String  type, Configuration.Parameters  params) throws NoSuchAlgorithmException
      返回指定类型的配置对象。

      此方法遍历已注册的安全提供者列表,从最喜欢的提供者开始。返回一个新的 Configuration 对象,该对象封装了第一个支持指定类型的 Provider 的 ConfigurationSpi 实现。

      请注意,可以通过 Security.getProviders() 方法检索已注册提供商的列表。

      实现注意事项:
      JDK 参考实现还使用 jdk.security.provider.preferred Security 属性来确定指定算法的首选提供程序顺序。这可能与 Security.getProviders() 返回的提供商顺序不同。
      参数:
      type - 指定的配置类型。有关标准配置类型的列表,请参阅 Java 安全标准算法名称规范 中的配置部分。
      params - 配置参数,可能为空。
      返回:
      新的 Configuration 对象
      抛出:
      IllegalArgumentException - 如果选定的 ProviderConfigurationSpi 实现不理解指定的参数
      NoSuchAlgorithmException - 如果没有 Provider 支持指定类型的 ConfigurationSpi 实现
      NullPointerException - 如果 typenull
      SecurityException - 如果调用者无权获取指定类型的 Configuration 实例
      自从:
      1.6
      参见:
    • getInstance

      public static Configuration  getInstance(String  type, Configuration.Parameters  params, String  provider) throws NoSuchProviderException , NoSuchAlgorithmException
      返回指定类型的配置对象。

      返回一个新的 Configuration 对象,该对象封装了来自指定提供程序的 ConfigurationSpi 实现。指定的提供者必须在提供者列表中注册。

      请注意,可以通过 Security.getProviders() 方法检索已注册提供商的列表。

      参数:
      type - 指定的配置类型。有关标准配置类型的列表,请参阅 Java 安全标准算法名称规范 中的配置部分。
      params - 配置参数,可能为空。
      provider - 提供商。
      返回:
      新的 Configuration 对象
      抛出:
      IllegalArgumentException - 如果指定的提供者是 null 或为空,或者如果指定的参数不被来自指定提供者的 ConfigurationSpi 实现所理解
      NoSuchProviderException - 如果指定的提供者没有在安全提供者列表中注册
      NoSuchAlgorithmException - 如果指定的提供者不支持指定类型的 ConfigurationSpi 实现
      NullPointerException - 如果 typenull
      SecurityException - 如果调用者无权获取指定类型的 Configuration 实例
      自从:
      1.6
      参见:
    • getInstance

      public static Configuration  getInstance(String  type, Configuration.Parameters  params, Provider  provider) throws NoSuchAlgorithmException
      返回指定类型的配置对象。

      返回一个新的 Configuration 对象,封装了来自指定 Provider 对象的 ConfigurationSpi 实现。请注意,指定的提供者对象不必在提供者列表中注册。

      参数:
      type - 指定的配置类型。有关标准配置类型的列表,请参阅 Java 安全标准算法名称规范 中的配置部分。
      params - 配置参数,可能为空。
      provider - 提供者。
      返回:
      新的 Configuration 对象
      抛出:
      IllegalArgumentException - 如果指定的 Providernull ,或者指定的 Provider 的 ConfigurationSpi 实现不理解指定的参数
      NoSuchAlgorithmException - 如果指定的 Provider 不支持指定类型的 ConfigurationSpi 实现
      NullPointerException - 如果 typenull
      SecurityException - 如果调用者无权获取指定类型的 Configuration 实例
      自从:
      1.6
      参见:
    • getProvider

      public Provider  getProvider()
      返回此配置的提供者。

      只有通过调用 Configuration.getInstance 获得的配置实例才会有一个提供者。否则,此方法返回 null。

      返回:
      此配置的提供者,或 null。
      自从:
      1.6
    • getType

      public String  getType()
      返回此配置的类型。

      只有通过调用 Configuration.getInstance 获得的配置实例才会有类型。否则,此方法返回 null。

      返回:
      此配置的类型,或 null。
      自从:
      1.6
    • getParameters

      public Configuration.Parameters  getParameters()
      返回配置参数。

      只有通过调用 Configuration.getInstance 获得的配置实例才会有参数。否则,此方法返回 null。

      返回:
      配置参数,或空。
      自从:
      1.6
    • getAppConfigurationEntry

      public abstract AppConfigurationEntry [] getAppConfigurationEntry(String  name)
      从此配置中检索指定 name 的 AppConfigurationEntries。
      参数:
      name - 用于索引配置的名称。
      返回:
      此配置中指定 name 的 AppConfigurationEntries 数组,如果没有指定 name 的条目,则为 null
    • refresh

      public void refresh()
      刷新并重新加载配置。

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

      此方法的默认实现不执行任何操作。如果实现支持刷新操作,则应重写此方法。

      抛出:
      SecurityException - 如果调用者没有刷新其配置的权限。