-
- 所有已知实现类:
-
JndiLoginModule
,KeyStoreLoginModule
,Krb5LoginModule
,LdapLoginModule
,NTLoginModule
,UnixLoginModule
public interface LoginModule
身份验证技术提供商的服务提供商界面。 LoginModule插入应用程序下以提供特定类型的身份验证。
当应用程序写入
LoginContext
API时,身份验证技术提供程序会实现LoginModule
接口。 AConfiguration
指定要与特定登录应用程序一起使用的LoginModule。 因此,可以在应用程序下插入不同的LoginModule,而无需对应用程序本身进行任何修改。LoginContext
负责读取Configuration
并实例化相应的LoginModule。 每个LoginModule
初始化为Subject
,一个CallbackHandler
,共享LoginModule
状态,并且特定LoginModule的选项。Subject
表示当前正在进行身份验证的Subject
,如果身份验证成功,则会使用相关凭据进行更新。 LoginModules使用CallbackHandler
与用户进行通信。 例如,CallbackHandler
可用于提示用户名和密码。 请注意,CallbackHandler
可能为null。 LoginModules绝对需要CallbackHandler
来验证Subject
可能会抛出LoginException
。 LoginModules可选择使用共享状态来相互共享信息或数据。LoginModule特定选项表示管理员或用户在登录
Configuration
为此LoginModule
配置的选项。 这些选项由LoginModule
本身定义,并控制其中的行为。 例如,LoginModule
可以定义支持调试/测试功能的选项。 使用键值语法定义选项,例如debug = true 。LoginModule
将选项存储为Map
以便可以使用密钥检索值。 请注意,LoginModule
选择定义的选项数量没有限制。调用应用程序将身份验证过程视为单个操作。 但是,
LoginModule
的身份验证过程LoginModule
两个不同的阶段。 在第一个阶段,LoginModule的login
方法得到由LoginContext的调用login
方法。 该login
的方法LoginModule
然后执行实际的身份验证(提示和验证例如密码),并保存为私有状态信息其认证状态。 完成后,LoginModule的login
方法返回true
(如果成功)或false
(如果应该忽略),或者抛出LoginException
指定失败。 在失败的情况下,LoginModule
不得重试身份验证或引入延迟。 此类任务的责任属于该应用程序。 如果应用程序尝试重试身份验证,则将再次调用LoginModule的login
方法。在第二阶段,如果LoginContext的整体认证成功(相关的REQUIRED,REQUISITE,SUFFICIENT和OPTIONAL LoginModules成功),则调用
LoginModule
的commit
方法。 用于LoginModule
的commit
方法检查其私有保存状态以查看其自身的身份验证是否成功。 如果整体LoginContext
身份验证成功并且LoginModule自己的身份验证成功,则commit
方法将相关主体(经过身份验证的身份)和凭据(身份验证数据,如加密密钥)与位于Subject
内的LoginModule
。如果LoginContext的整体身份验证失败(相关的REQUIRED,REQUISITE,SUFFICIENT和OPTIONAL LoginModule未成功),则会调用每个
LoginModule
的abort
方法。 在这种情况下,LoginModule
会删除/销毁最初保存的任何身份验证状态。注销
Subject
只涉及一个阶段。LoginContext
调用LoginModule的logout
方法。 该logout
的方法LoginModule
然后执行退出过程,诸如从除去校长或凭证Subject
或记录会话信息。LoginModule
实现必须具有不带参数的构造函数。 这允许加载LoginModule
类实例化它。- 从以下版本开始:
- 1.4
- 另请参见:
-
LoginContext
,Configuration
-
-
方法详细信息
-
initialize
void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
初始化此LoginModule。此方法由被叫
LoginContext
这之后LoginModule
已经被实例化。 此方法的目的是使用相关信息初始化此LoginModule
。 如果此LoginModule
不了解存储在sharedState
或options
参数中的任何数据,则可以忽略它们。- 参数
-
subject
- 要经过身份验证的Subject
。 -
callbackHandler
- 用于与最终用户通信的CallbackHandler
(例如,提示输入用户名和密码)。 -
sharedState
- 与其他已配置的LoginModule共享状态。 -
options
- 为此特定LoginModule
登录Configuration
指定的选项。
-
login
boolean login() throws LoginException
验证Subject
方法(阶段1)。此方法的实现验证
Subject
。 例如,它可能会提示输入用户名和密码等Subject
信息,然后尝试验证密码。 此方法将身份验证尝试的结果保存为LoginModule中的私有状态。- 结果
- 如果验证成功,
LoginModule
true;如果应忽略此LoginModule
false。 - 异常
-
LoginException
- 如果身份验证失败
-
commit
boolean commit() throws LoginException
提交认证过程的方法(阶段2)。如果LoginContext的整体身份验证成功(相关的REQUIRED,REQUISITE,SUFFICIENT和OPTIONAL LoginModules成功),则调用此方法。
如果此LoginModule自己的身份验证尝试成功(通过检索
login
方法保存的私有状态进行检查),则此方法将相关的Principal和Credentials与位于Subject
中的LoginModule
。 如果此LoginModule自己的身份验证尝试失败,则此方法将删除/销毁最初保存的任何状态。- 结果
- 如果此方法成功,则
LoginModule
true;如果应忽略此LoginModule
,则LoginModule
false。 - 异常
-
LoginException
- 如果提交失败
-
abort
boolean abort() throws LoginException
中止身份验证过程的方法(阶段2)。如果LoginContext的整体身份验证失败,则调用此方法。 (相关的必需,要求,充足和可选的LoginModule没有成功)。
如果此LoginModule自己的身份验证尝试成功(通过检索
login
方法保存的私有状态进行检查),则此方法将清除最初保存的任何状态。- 结果
- 如果此方法成功,则
LoginModule
true;如果应忽略此LoginModule
,则LoginModule
false。 - 异常
-
LoginException
- 如果中止失败
-
logout
boolean logout() throws LoginException
注销Subject
。此方法的实现可能会删除/销毁Subject的Principals和Credentials。
- 结果
- 如果此方法成功,则
LoginModule
true;如果应忽略此LoginModule
,则LoginModule
false。 - 异常
-
LoginException
- 如果注销失败
-
-