Class JndiLoginModule

  • All Implemented Interfaces:
    LoginModule


    public class JndiLoginModule
    extends Object
    implements LoginModule
    模块提示输入用户名和密码,然后根据存储在JNDI下配置的目录服务中的密码验证密码。

    LoginModule与任何一致的JNDI服务提供商进行互操作。 为了指导这个LoginModule使用特定的JNDI服务提供商,有两个选项必须在登录指定Configuration这个LoginModule

      user.provider.url=name_service_url
          group.provider.url=name_service_url 
    name_service_url指定此LoginModule可以访问相关用户和组信息的目录服务和路径。 由于LoginModule仅执行一级搜索以查找相关用户信息,因此URL必须指向目录服务中存储用户和组信息的一级以上的目录。 例如,要指示此LoginModule联系NIS服务器,必须指定以下URL:
      user.provider.url="nis://NISServerHostName/NISDomain/user"
        group.provider.url="nis://NISServerHostName/NISDomain/system/group" 
    NISServerHostName指定NIS服务器的服务器主机名(例如, , NISDomain指定该NIS服务器的域)(例如, jaas.sun.com 。要联系LDAP服务器,以下URL必须为规定:
      user.provider.url="ldap://LDAPServerHostName/LDAPName"
        group.provider.url="ldap://LDAPServerHostName/LDAPName" 
    LDAPServerHostName指定LDAP服务器,其可包括一个端口号(例如的服务器的主机名,并且LDAPName在LDAP目录指定条目名称(例如,OU =人,O = Sun,c = USou = Groups,o = Sun,c = US分别为用户和组信息)。

    用户信息必须存储在目录服务中的格式在RFC 2307中指定。具体来说,该LoginModule将使用用户的uid属性(其中uid = username)搜索目录服务中的用户条目。 如果搜索成功,该LoginModule将使用userPassword属性从检索到的条目获取用户的加密密码。 这个LoginModule假设密码存储为字节数组,当转换为String ,具有以下格式:

      "{crypt}encrypted_password" 
    必须将LDAP目录服务器配置为允许对userPassword属性的读取访问。 如果用户输入有效的用户名和密码,这LoginModule相关联的UnixPrincipalUnixNumericUserPrincipal ,并与相关UnixNumericGroupPrincipals Subject

    此LoginModule还会识别以下Configuration选项:

      debug          if, true, debug messages are output to System.out.
    
        useFirstPass   if, true, this LoginModule retrieves the
                       username and password from the module's shared state,
                       using "javax.security.auth.login.name" and
                       "javax.security.auth.login.password" as the respective
                       keys.  The retrieved values are used for authentication.
                       If authentication fails, no attempt for a retry is made,
                       and the failure is reported back to the calling
                       application.
    
        tryFirstPass   if, true, this LoginModule retrieves the
                       the username and password from the module's shared state,
                       using "javax.security.auth.login.name" and
                       "javax.security.auth.login.password" as the respective
                       keys.  The retrieved values are used for authentication.
                       If authentication fails, the module uses the
                       CallbackHandler to retrieve a new username and password,
                       and another attempt to authenticate is made.
                       If the authentication fails, the failure is reported
                       back to the calling application.
    
        storePass      if, true, this LoginModule stores the username and password
                       obtained from the CallbackHandler in the module's
                       shared state, using "javax.security.auth.login.name" and
                       "javax.security.auth.login.password" as the respective
                       keys.  This is not performed if existing values already
                       exist for the username and password in the shared state,
                       or if authentication fails.
    
        clearPass     if, true, this LoginModule clears the
                      username and password stored in the module's shared state
                      after both phases of authentication (login and commit)
                      have completed. 
    • 构造方法详细信息

      • JndiLoginModule

        public JndiLoginModule​()
    • 方法详细信息

      • initialize

        public void initialize​(Subject subject,
                               CallbackHandler callbackHandler,
                               Map<String,?> sharedState,
                               Map<String,?> options)
        初始化 LoginModule
        Specified by:
        initialize在接口 LoginModule
        参数
        subject - 要验证的 Subject
        callbackHandler - 用于与最终用户通信的 CallbackHandler (例如提示用户名和密码)。
        sharedState - 共享 LoginModule状态。
        options - 在特定 LoginModule的登录 Configuration指定的选项。
      • login

        public boolean login​()
                      throws LoginException
        提示用户名和密码。 根据相关名称服务验证密码。
        Specified by:
        login在接口 LoginModule
        结果
        真的永远,因为这 LoginModule不应该被忽视。
        异常
        FailedLoginException - 如果认证失败。
        LoginException - 如果这个 LoginModule无法执行认证。
      • commit

        public boolean commit​()
                       throws LoginException
        提交认证过程的抽象方法(阶段2)。

        如果LoginContext的整体身份验证成功(相关的请求,REQUISITE,SUPPICIENT和可选LoginModules成功),则调用此方法。

        如果此LoginModule自己的身份验证尝试成功(通过检索通过login方法保存的私有状态进行检查),则此方法将UnixPrincipal与位于Subject中的LoginModule相关联。 如果此LoginModule自身的身份验证尝试失败,则此方法将删除原始保存的任何状态。

        Specified by:
        commit在接口 LoginModule
        结果
        如果此LoginModule自己的登录和提交尝试成功,则为true,否则为false。
        异常
        LoginException - 如果提交失败
      • abort

        public boolean abort​()
                      throws LoginException
        如果LoginContext的整体身份验证失败,则调用此方法。 (相关要求,必要,有效和可选的LoginModules没有成功)。

        如果此LoginModule自己的身份验证尝试成功(通过检索由logincommit方法保存的私有状态进行检查),则此方法将清除最初保存的任何状态。

        Specified by:
        abort在接口 LoginModule
        结果
        如果此LoginModule自己的登录和/或提交尝试失败,则为false,否则为true。
        异常
        LoginException - 如果中止失败。
      • logout

        public boolean logout​()
                       throws LoginException
        注销用户。

        此方法将删除由commit方法添加的commit

        Specified by:
        logout在接口 LoginModule
        结果
        在所有情况下都是这样,因为这个 LoginModule不应该被忽略。
        异常
        LoginException - 如果注销失败。