模块 java.base

接口 LoginModule

所有已知的实现类:
JndiLoginModule , KeyStoreLoginModule , Krb5LoginModule , LdapLoginModule , NTLoginModule , UnixLoginModule

public interface LoginModule

身份验证技术提供商的服务提供者接口。 LoginModules 在应用程序下插入以提供特定类型的身份验证。

当应用程序写入 LoginContext API 时,身份验证技术提供商会实现 LoginModule 接口。 Configuration 指定要与特定登录应用程序一起使用的登录模块。因此,可以在应用程序下插入不同的登录模块,而无需对应用程序本身进行任何修改。

LoginContext 负责读取 Configuration 并实例化适当的登录模块。每个 LoginModule 都使用 SubjectCallbackHandler 、共享 LoginModule 状态和特定于 LoginModule 的选项进行初始化。

Subject 表示当前正在验证的 Subject,如果验证成功,则会使用相关凭证进行更新。 LoginModules 使用CallbackHandler 与用户进行通信。例如,CallbackHandler 可用于提示输入用户名和密码。请注意,CallbackHandler 可能是 null。绝对需要 CallbackHandler 来验证 Subject 的登录模块可能会抛出 LoginException。 LoginModule 可选择使用共享状态在它们之间共享信息或数据。

LoginModule 特定的选项表示管理员或用户在登录 Configuration 中为此 LoginModule 配置的选项。选项由 LoginModule 本身定义并控制其中的行为。例如,LoginModule 可以定义支持调试/测试功能的选项。选项使用键值语法定义,例如调试=真LoginModule 将选项存储为 Map,以便可以使用密钥检索值。请注意,LoginModule 选择定义的选项数量没有限制。

调用应用程序将身份验证过程视为单个操作。然而,LoginModule 中的身份验证过程分两个不同的阶段进行。在第一阶段,LoginModule 的 login 方法被 LoginContext 的 login 方法调用。 LoginModulelogin 方法随后执行实际身份验证(例如提示并验证密码)并将其身份验证状态保存为私有状态信息。完成后,LoginModule 的 login 方法要么返回 true(如果成功)或 false(如果应该忽略),要么抛出 LoginException 以指定失败。在失败的情况下,LoginModule 不得重试身份验证或引入延迟。此类任务的责任属于应用程序。如果应用程序尝试重试身份验证,则将再次调用 LoginModule 的 login 方法。

在第二阶段,如果 LoginContext 的整体身份验证成功(相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 成功),则调用 LoginModulecommit 方法。 LoginModulecommit 方法检查其私人保存的状态,以查看其自身的身份验证是否成功。如果整体 LoginContext 身份验证成功并且 LoginModule 自己的身份验证成功,则 commit 方法将相关的主体(经过身份验证的身份)和凭证(身份验证数据,例如加密密钥)与位于 LoginModule 中的 Subject 相关联。

如果 LoginContext 的整体身份验证失败(相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModule 未成功),则调用每个 LoginModuleabort 方法。在这种情况下,LoginModule 会删除/销毁最初保存的任何身份验证状态。

注销 Subject 仅涉及一个阶段。 LoginContext 调用 LoginModule 的 logout 方法。 LoginModulelogout 方法然后执行注销过程,例如从 Subject 或记录会话信息中删除主体或凭据。

LoginModule 实现必须有一个不带参数的构造函数。这允许加载 LoginModule 的类对其进行实例化。

自从:
1.4
参见:
  • 方法总结

    修饰符和类型
    方法
    描述
    boolean
    中止身份验证过程(第 2 阶段)的方法。
    boolean
    提交身份验证过程(第 2 阶段)的方法。
    void
    initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
    初始化这个 LoginModule
    boolean
    验证 Subject 的方法(第 1 阶段)。
    boolean
    注销 Subject 的方法。
  • 方法详情

    • initialize

      void initialize(Subject  subject, CallbackHandler  callbackHandler, Map <String ,?> sharedState, Map <String ,?> options)
      初始化这个 LoginModule

      在这个 LoginModule 被实例化之后,这个方法被 LoginContext 调用。这个方法的目的是用相关信息初始化这个LoginModule。如果此 LoginModule 不理解存储在 sharedStateoptions 参数中的任何数据,则可以忽略它们。

      参数:
      subject - 要验证的 Subject
      callbackHandler - 一个 CallbackHandler 用于与最终用户通信(例如,提示输入用户名和密码)。
      sharedState - 与其他配置的登录模块共享的状态。
      options - 在登录 Configuration 中为此特定的 LoginModule 指定的选项。
    • login

      boolean login() throws LoginException
      验证 Subject 的方法(第 1 阶段)。

      此方法的实现对 Subject 进行身份验证。例如,它可能会提示输入用户名和密码等 Subject 信息,然后尝试验证密码。此方法将身份验证尝试的结果保存为 LoginModule 中的私有状态。

      返回:
      true 如果认证成功,或者 false 如果这个 LoginModule 应该被忽略。
      抛出:
      LoginException - 如果身份验证失败
    • commit

      boolean commit() throws LoginException
      提交身份验证过程(第 2 阶段)的方法。

      如果 LoginContext 的整体身份验证成功(相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 成功),则调用此方法。

      如果此 LoginModule 自己的身份验证尝试成功(通过检索 login 方法保存的私有状态进行检查),则此方法将相关的主体和凭证与位于 LoginModule 中的 Subject 相关联。如果此 LoginModule 自己的身份验证尝试失败,则此方法会删除/销毁最初保存的任何状态。

      返回:
      true 如果此方法成功,或 false 如果应忽略此 LoginModule
      抛出:
      LoginException - 如果提交失败
    • abort

      boolean abort() throws LoginException
      中止身份验证过程(第 2 阶段)的方法。

      如果 LoginContext 的整体身份验证失败,则调用此方法。 (相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 没有成功)。

      如果此 LoginModule 自己的身份验证尝试成功(通过检索 login 方法保存的私有状态进行检查),则此方法会清除最初保存的任何状态。

      返回:
      true 如果此方法成功,或 false 如果应忽略此 LoginModule
      抛出:
      LoginException - 如果中止失败
    • logout

      boolean logout() throws LoginException
      注销 Subject 的方法。

      此方法的实现可能会删除/销毁 Subject 的 Principals 和 Credentials。

      实现注意事项:
      在将变量从 Subject 的 Principals 或 Credentials 集合中移除之前,实现应该检查变量是否为 null,否则 NullPointerException 将作为这些集合 禁止空元素 被抛出。如果在登录失败后调用此方法,这一点尤其重要。
      返回:
      true 如果此方法成功,或 false 如果应忽略此 LoginModule
      抛出:
      LoginException - 如果注销失败