-
- 所有已知实现类:
-
JndiLoginModule,KeyStoreLoginModule,Krb5LoginModule,LdapLoginModule,NTLoginModule,SolarisLoginModule,UnixLoginModule
public interface LoginModule用于认证技术提供商的服务提供者接口。 LoginModules插入应用程序以提供特定类型的身份验证。
当应用程序写入
LoginContextAPI时,认证技术提供商实现了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 方法 描述 booleanabort()中止认证过程的方法(阶段2)。booleancommit()提交认证过程的方法(阶段2)。voidinitialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)初始化此LoginModule。booleanlogin()验证Subject(第1阶段)的方法。booleanlogout()注销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中的私有状态。- 结果
-
如果认证成功,
LoginModuletrue;如果忽略此值,LoginModulefalse。 - 异常
-
LoginException- 如果身份验证失败
-
commit
boolean commit() throws LoginException提交认证过程的方法(阶段2)。如果LoginContext的整体身份验证成功(相关的请求,REQUISITE,SUPPICIENT和可选LoginModules成功),则调用此方法。
如果此LoginModule自己的身份验证尝试成功(通过检索由
login方法保存的私有状态进行检查),则此方法将相关主体和凭据与位于Subject中的LoginModule。 如果此LoginModule自身的身份验证尝试失败,则此方法将删除/销毁最初保存的任何状态。- 结果
-
如果此方法成功,
LoginModuletrue,如果此LoginModule应该被忽略,LoginModulefalse。 - 异常
-
LoginException- 如果提交失败
-
abort
boolean abort() throws LoginException中止认证过程的方法(阶段2)。如果LoginContext的整体身份验证失败,则调用此方法。 (相关要求,必要,有效和可选的LoginModules没有成功)。
如果此LoginModule自己的身份验证尝试成功(通过检索由
login方法保存的私有状态检查),则此方法将清除最初保存的任何状态。- 结果
-
如果此方法成功,
LoginModuletrue,如果此LoginModule应该被忽略,LoginModulefalse。 - 异常
-
LoginException- 如果中止失败
-
logout
boolean logout() throws LoginException注销一个Subject。此方法的实现可能会删除/销毁主题的主体和凭据。
- 结果
-
如果此方法成功,
LoginModuletrue,如果此LoginModule应该被忽略,LoginModulefalse。 - 异常
-
LoginException- 如果注销失败
-
-