Module  java.base

Interface LoginModule

  • 所有已知实现类:
    JndiLoginModuleKeyStoreLoginModuleKrb5LoginModuleLdapLoginModuleNTLoginModuleSolarisLoginModuleUnixLoginModule


    public interface LoginModule

    用于认证技术提供商的服务提供者接口。 LoginModules插入应用程序以提供特定类型的身份验证。

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

    如果LoginContext的整体认证失败(相关的REQUIRED,REQUISITE,SUPPICIENT和可选LoginModules没有成功),那么每个LoginModuleabort方法都LoginModule被调用。 在这种情况下, LoginModule会删除/销毁最初保存的任何验证状态。

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

    一个LoginModule实现必须有一个没有参数的构造函数。 这允许加载LoginModule类实例化它。

    从以下版本开始:
    1.4
    另请参见:
    LoginContextConfiguration
    • 方法详细信息

      • initialize

        void initialize​(Subject subject,
                        CallbackHandler callbackHandler,
                        Map<String,?> sharedState,
                        Map<String,?> options)
        初始化此LoginModule。

        此方法由被叫LoginContext此之后LoginModule已经被实例化。 该方法的目的是初始化这个LoginModule的相关信息。 如果这个LoginModule不了解任何存储在sharedStateoptions数据,可以忽略它们。

        参数
        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 - 如果注销失败