模块  java.base

Class Configuration

  • 已知直接子类:
    ConfigFile

    public abstract class Configuration
    extends Object
    Configuration对象负责指定应该为特定应用程序使用哪些LoginModule,以及应该以何种顺序调用LoginModule。

    登录配置包含以下信息。 请注意,此示例仅表示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列表。 每个LoginModule都通过其完全限定的类名指定。 身份验证按照指定的确切顺序沿模块列表继续进行。 如果应用程序没有特定条目,则默认为“ 其他 ”的特定条目。

    当身份验证沿着堆栈向下进行时, Flag值控制整体行为。 以下表示Flag的有效值及其各自语义的说明:

      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并且成功, LoginModule需要足够的 LoginModule之前的必需必需的 LoginModule成功完成整个身份验证。 如果没有为应用程序配置必需必需的 LoginModule,则必须至少有一个SufficientOptional LoginModule成功。

    ModuleOptions是一个以空格分隔的LoginModule特定值列表,它们直接传递给底层的LoginModule。 选项由LoginModule本身定义,并控制其中的行为。 例如, LoginModule可以定义支持调试/测试功能的选项。 Configuration指定选项的正确方法是使用以下键值配对: debug =“true” 键和值应该用'等于'符号分隔,值应该用双引号括起来。 如果表单中出现$ {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 ,因此只有在UnixLoginModuleRequired )成功时,整体身份验证才会成功。

    另请注意,特定于LoginModule的选项useTicketCache =“true”ticketCache = $ {user.home} $ {/} ticket“将传递给Krb5LoginModule 。这些选项指示Krb5LoginModule在指定位置使用票证缓存该系统属性user.home/(文件分割符),被扩展为它们各自的值。

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

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

    应用程序代码可以直接子类化Configuration以提供自定义实现。 此外,可以通过使用标准类型调用其中一个getInstance工厂方法来构造Configuration对象的实例。 默认策略类型是“JavaLoginConfig”。 有关标准配置类型的列表,请参阅Java Security Standard Algorithm Names Specification中的“配置”部分。

    从以下版本开始:
    1.4
    另请参见:
    LoginContextsecurity properties
    • 构造方法详细信息

      • Configuration

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

      • setConfiguration

        public static void setConfiguration​(Configuration configuration)
        设置登录 Configuration
        参数
        configuration - 新的 Configuration
        异常
        SecurityException - 如果当前线程没有权限设置 Configuration
        另请参见:
        getConfiguration()
      • 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。

        结果
        配置参数,或null。
        从以下版本开始:
        1.6
      • getAppConfigurationEntry

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

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

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

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

        异常
        SecurityException - if the caller does not have permission to refresh its Configuration.