-
- 所有已知实现类:
-
JndiLoginModule
,KeyStoreLoginModule
,Krb5LoginModule
,LdapLoginModule
,NTLoginModule
,SolarisLoginModule
,UnixLoginModule
public interface LoginModule
用于认证技术提供商的服务提供者接口。 LoginModules插入应用程序以提供特定类型的身份验证。
当应用程序写入
LoginContext
API时,认证技术提供商实现了LoginModule
接口。 AConfiguration
指定要与特定登录应用程序一起使用的LoginModule。 因此,可以在应用程序下插入不同的LoginModules,而不需要对应用程序本身进行任何修改。LoginContext
负责阅读Configuration
并实例化相应的LoginModules。 每个LoginModule
都用Subject
,一个CallbackHandler
,共享的LoginModule
状态和LoginModule特定的选项进行初始化。Subject
表示当前正在身份验证的Subject
,如果身份验证成功,则会使用相关凭证进行更新。 LoginModules使用CallbackHandler
与用户进行通信。 例如,CallbackHandler
可能用于提示用户名和密码。 请注意,CallbackHandler
可能为null。CallbackHandler
绝对需要一个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
,那么将会再次调用LoginModule的login
方法。在第二个阶段,如果LoginContext的整个身份验证成功(相关的REQUIRED,REQUISITE,充分,可选的LoginModule成功),则
commit
的方法LoginModule
被调用。 一个LoginModule
的commit
方法检查其私人保存的状态,看看自己的身份验证是否成功。 如果整个LoginContext
身份验证成功,并且LoginModule自己的身份验证成功,则commit
方法将相关主体(身份验证身份)和凭据(加密密钥等身份验证数据)与Subject
中的LoginModule
。如果LoginContext的整体认证失败(相关的REQUIRED,REQUISITE,SUPPICIENT和可选LoginModules没有成功),那么每个
LoginModule
的abort
方法都LoginModule
被调用。 在这种情况下,LoginModule
会删除/销毁最初保存的任何验证状态。注销一个
Subject
只涉及一个阶段。LoginContext
调用LoginModule的logout
方法。 该logout
的方法LoginModule
然后执行退出过程,诸如从除去校长或凭证Subject
或记录会话信息。一个
LoginModule
实现必须有一个没有参数的构造函数。 这允许加载LoginModule
类实例化它。- 从以下版本开始:
- 1.4
- 另请参见:
-
LoginContext
,Configuration
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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
。
-
-
-
方法详细信息
-
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
- 与其他配置的LoginModules共享的状态。 -
options
- 在特定LoginModule
的登录Configuration
指定的选项。
-
login
boolean login() throws LoginException
认证一个Subject
(第一阶段)的方法。该方法的实现验证了一个
Subject
。 例如,它可能会提示输入Subject
信息,如用户名和密码,然后尝试验证密码。 该方法将认证尝试的结果保存在LoginModule中的私有状态。- 结果
-
如果认证成功,
LoginModule
true;如果忽略此值,LoginModule
false。 - 异常
-
LoginException
- 如果身份验证失败
-
commit
boolean commit() throws LoginException
提交认证过程的方法(阶段2)。如果LoginContext的整体身份验证成功(相关的请求,REQUISITE,SUPPICIENT和可选LoginModules成功),则调用此方法。
如果此LoginModule自己的身份验证尝试成功(通过检索由
login
方法保存的私有状态进行检查),则此方法将相关主体和凭据与位于Subject
中的LoginModule
。 如果此LoginModule自身的身份验证尝试失败,则此方法将删除/销毁最初保存的任何状态。- 结果
-
如果此方法成功,
LoginModule
true,如果此LoginModule
应该被忽略,LoginModule
false。 - 异常
-
LoginException
- 如果提交失败
-
abort
boolean abort() throws LoginException
中止认证过程的方法(阶段2)。如果LoginContext的整体身份验证失败,则调用此方法。 (相关要求,必要,有效和可选的LoginModules没有成功)。
如果此LoginModule自己的身份验证尝试成功(通过检索由
login
方法保存的私有状态检查),则此方法将清除最初保存的任何状态。- 结果
-
如果此方法成功,
LoginModule
true,如果此LoginModule
应该被忽略,LoginModule
false。 - 异常
-
LoginException
- 如果中止失败
-
logout
boolean logout() throws LoginException
注销一个Subject
。此方法的实现可能会删除/销毁主题的主体和凭据。
- 结果
-
如果此方法成功,
LoginModule
true,如果此LoginModule
应该被忽略,LoginModule
false。 - 异常
-
LoginException
- 如果注销失败
-
-