public interface LoginModule
LoginModule
描述了认证技术提供商实现的接口。 LoginModules插入应用程序以提供特定类型的身份验证。
当应用程序写入LoginContext
API时,认证技术提供商实现了LoginModule
接口。 A Configuration
指定要与特定登录应用程序一起使用的LoginModule。 因此,可以在应用程序下插入不同的LoginModules,而不需要对应用程序本身进行任何修改。
该LoginContext
是负责读取Configuration
和实例相应的LoginModules。 每个LoginModule
初始化为Subject
,一个CallbackHandler
,共享LoginModule
状态,并且特定LoginModule的选项。 该Subject
表示Subject
目前正在认证,如果认证成功,则与相关证书更新。 LoginModule的使用CallbackHandler
与用户沟通。 例如, CallbackHandler
可以用于提示用户名和密码。 请注意, CallbackHandler
可能为null。 LoginModules绝对需要一个CallbackHandler
认证Subject
可能会抛出一个LoginException
。 LoginModules可以选择使用共享状态来在它们之间共享信息或数据。
具体LoginModule的选项表示被配置为这个选项LoginModule
通过在登录管理员或用户Configuration
。 这些选项由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,充分,可选的LoginModule成功),然后是commit
的方法LoginModule
被调用。 该commit
的方法LoginModule
检查其私有保存状态,看看自己的身份验证成功。 如果整个LoginContext
认证成功,并且LoginModule自己的认证成功,则commit
方法将相关主体(认证身份)和凭据(加密密钥等认证数据)与Subject
中的LoginModule
。
如果LoginContext的整体身份验证失败(相关的REQUIRED,REQUISITE,SUPPICIENT和可选LoginModules没有成功),那么每个LoginModule
的abort
方法都LoginModule
被调用。 在这种情况下, LoginModule
会删除/销毁最初保存的任何身份验证状态。
注销一个Subject
只涉及一个阶段。 LoginContext
调用LoginModule的logout
方法。 该logout
的方法LoginModule
然后执行退出过程,诸如从除去校长或凭证Subject
或记录会话信息。
一个LoginModule
实现必须有一个没有参数的构造函数。 这允许加载LoginModule
类实例化它。
LoginContext
, Configuration
Modifier and Type | Method and Description |
---|---|
boolean |
abort()
中止认证过程的方法(阶段2)。
|
boolean |
commit()
提交认证过程的方法(阶段2)。
|
void |
initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
初始化此LoginModule。
|
boolean |
login()
验证
Subject (第1阶段)的方法。
|
boolean |
logout()
注销一个
Subject 。
|
void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
此方法由LoginContext
调用,此后LoginModule
已被实例化。 这种方法的目的是初始化这个LoginModule
的相关信息。 如果此LoginModule
存储在sharedState
或options
参数中的任何数据,则可以忽略它们。
subject
-在
Subject
进行身份验证。
callbackHandler
-一个
CallbackHandler
用于与最终用户进行通信(提示用户名和密码,例如)。
sharedState
- 与其他配置的LoginModules共享的状态。
options
- 在特定LoginModule的登录
Configuration
中指定的
LoginModule
。
boolean login() throws LoginException
Subject
(第1阶段)的方法。
该方法的实现验证了一个Subject
。 例如,它可能会提示输入用户名和密码等Subject
信息,然后尝试验证密码。 该方法将认证尝试的结果保存在LoginModule中的私有状态。
LoginModule
。
LoginException
- 如果身份验证失败
boolean commit() throws LoginException
如果LoginContext的整体身份验证成功(相关的请求,REQUISITE,SUPPICIENT和可选LoginModules成功),则调用此方法。
如果此LoginModule自己的身份验证尝试成功(通过检索通过login
方法保存的私有状态检查),则此方法将相关主体和凭据与位于Subject
中的LoginModule
。 如果此LoginModule自身的身份验证尝试失败,则此方法将删除/销毁最初保存的任何状态。
LoginModule
应该被忽略。
LoginException
- 如果提交失败
boolean abort() throws LoginException
如果LoginContext的整体身份验证失败,则调用此方法。 (相关要求,必要,有效和可选的LoginModules没有成功)。
如果此LoginModule自己的身份验证尝试成功(通过检索由login
方法保存的私有状态进行检查),则此方法将清除最初保存的任何状态。
LoginModule
应该被忽略。
LoginException
- 如果中止失败
boolean logout() throws LoginException
Subject
。
此方法的实现可能会删除/销毁主题的主体和凭据。
LoginModule
应该被忽略。
LoginException
- 如果注销失败