- 所有已知的实现类:
JndiLoginModule,KeyStoreLoginModule,Krb5LoginModule,LdapLoginModule,NTLoginModule,UnixLoginModule
身份验证技术提供商的服务提供者接口。 LoginModules 在应用程序下插入以提供特定类型的身份验证。
当应用程序写入 LoginContext API 时,身份验证技术提供商会实现 LoginModule 接口。 Configuration 指定要与特定登录应用程序一起使用的登录模块。因此,可以在应用程序下插入不同的登录模块,而无需对应用程序本身进行任何修改。
LoginContext 负责读取 Configuration 并实例化适当的登录模块。每个 LoginModule 都使用 Subject 、 CallbackHandler 、共享 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 方法调用。 LoginModule 的 login 方法随后执行实际身份验证(例如提示并验证密码)并将其身份验证状态保存为私有状态信息。完成后,LoginModule 的 login 方法要么返回 true(如果成功)或 false(如果应该忽略),要么抛出 LoginException 以指定失败。在失败的情况下,LoginModule 不得重试身份验证或引入延迟。此类任务的责任属于应用程序。如果应用程序尝试重试身份验证,则将再次调用 LoginModule 的 login 方法。
在第二阶段,如果 LoginContext 的整体身份验证成功(相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 成功),则调用 LoginModule 的 commit 方法。 LoginModule 的 commit 方法检查其私人保存的状态,以查看其自身的身份验证是否成功。如果整体 LoginContext 身份验证成功并且 LoginModule 自己的身份验证成功,则 commit 方法将相关的主体(经过身份验证的身份)和凭证(身份验证数据,例如加密密钥)与位于 LoginModule 中的 Subject 相关联。
如果 LoginContext 的整体身份验证失败(相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModule 未成功),则调用每个 LoginModule 的 abort 方法。在这种情况下,LoginModule 会删除/销毁最初保存的任何身份验证状态。
注销 Subject 仅涉及一个阶段。 LoginContext 调用 LoginModule 的 logout 方法。 LoginModule 的 logout 方法然后执行注销过程,例如从 Subject 或记录会话信息中删除主体或凭据。
LoginModule 实现必须有一个不带参数的构造函数。这允许加载 LoginModule 的类对其进行实例化。
- 自从:
- 1.4
- 参见:
-
方法总结
-
方法详情
-
initialize
void initialize(Subject subject, CallbackHandler callbackHandler, Map <String , ?> sharedState, Map <String , ?> options) 初始化这个LoginModule。在这个
LoginModule被实例化之后,这个方法被LoginContext调用。这个方法的目的是用相关信息初始化这个LoginModule。如果此LoginModule不理解存储在sharedState或options参数中的任何数据,则可以忽略它们。- 参数:
subject- 要验证的Subject。callbackHandler- 一个CallbackHandler用于与最终用户通信(例如,提示输入用户名和密码)。sharedState- 与其他配置的登录模块共享的状态。options- 在登录Configuration中为此特定的LoginModule指定的选项。
-
login
验证Subject的方法(第 1 阶段)。此方法的实现对
Subject进行身份验证。例如,它可能会提示输入用户名和密码等Subject信息,然后尝试验证密码。此方法将身份验证尝试的结果保存为LoginModule中的私有状态。- 返回:
true如果认证成功,或者false如果这个LoginModule应该被忽略。- 抛出:
LoginException- 如果身份验证失败
-
commit
提交身份验证过程(第 2 阶段)的方法。如果 LoginContext 的整体身份验证成功(相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 成功),则调用此方法。
如果此 LoginModule 自己的身份验证尝试成功(通过检索
login方法保存的私有状态进行检查),则此方法将相关的主体和凭证与位于LoginModule中的Subject相关联。如果此 LoginModule 自己的身份验证尝试失败,则此方法会删除/销毁最初保存的任何状态。- 返回:
true如果此方法成功,或false如果应忽略此LoginModule。- 抛出:
LoginException- 如果提交失败
-
abort
中止身份验证过程(第 2 阶段)的方法。如果 LoginContext 的整体身份验证失败,则调用此方法。 (相关的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 没有成功)。
如果此 LoginModule 自己的身份验证尝试成功(通过检索
login方法保存的私有状态进行检查),则此方法会清除最初保存的任何状态。- 返回:
true如果此方法成功,或false如果应忽略此LoginModule。- 抛出:
LoginException- 如果中止失败
-
logout
注销Subject的方法。此方法的实现可能会删除/销毁 Subject 的 Principals 和 Credentials。
- 实现注意事项:
-
在将变量从
Subject的 Principals 或 Credentials 集合中移除之前,实现应该检查变量是否为null,否则NullPointerException将作为这些集合 禁止空元素 被抛出。如果在登录失败后调用此方法,这一点尤其重要。 - 返回:
true如果此方法成功,或false如果应忽略此LoginModule。- 抛出:
LoginException- 如果注销失败
-