欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

LoginModule

最编程 2024-07-28 10:24:42
...

身份验证技术提供商的服务提供商界面。 LoginModule插入应用程序下以提供特定类型的身份验证。

当应用程序写入LoginContext API时,身份验证技术提供程序会实现LoginModule接口。 A Configuration指定要与特定登录应用程序一起使用的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成功),则调用LoginModulecommit方法。 用于LoginModulecommit方法检查其私有保存状态以查看其自身的身份验证是否成功。 如果整体LoginContext身份验证成功并且LoginModule自己的身份验证成功,则commit方法将相关主体(经过身份验证的身份)和凭据(身份验证数据,如加密密钥)与位于Subject内的LoginModule

如果LoginContext的整体身份验证失败(相关的REQUIRED,REQUISITE,SUFFICIENT和OPTIONAL LoginModule未成功),则会调用每个LoginModuleabort方法。 在这种情况下, LoginModule会删除/销毁最初保存的任何身份验证状态。

注销Subject只涉及一个阶段。 LoginContext调用LoginModule的logout方法。 logout的方法LoginModule然后执行退出过程,诸如从除去校长或凭证Subject或记录会话信息。

LoginModule实现必须具有不带参数的构造函数。 这允许加载LoginModule类实例化它。

推荐阅读