java.lang.Object
com.sun.security.auth.module.JndiLoginModule
- 所有已实现的接口:
-
LoginModule
该模块提示用户输入用户名和密码,然后根据在JNDI下配置的目录服务中存储的密码验证密码。
这个LoginModule与任何符合JNDI服务提供者进行交互。要指示这个LoginModule使用特定的JNDI服务提供者,必须在此LoginModule的登录Configuration中指定两个选项。
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服务器的服务器主机名(例如,nis.sun.com),NISDomain指定了该NIS服务器的域(例如,jaas.sun.com)。要联系LDAP服务器,必须指定以下URL:
user.provider.url="ldap://LDAPServerHostName/LDAPName"
group.provider.url="ldap://LDAPServerHostName/LDAPName"
LDAPServerHostName指定了LDAP服务器的服务器主机名,可能包括端口号(例如,ldap.sun.com:389),LDAPName指定了LDAP目录中的条目名称(例如,ou=People,o=Sun,c=US和ou=Groups,o=Sun,c=US分别用于用户和组信息)。
用户信息必须按照RFC 2307规定的格式存储在目录服务中。具体来说,这个LoginModule将使用用户的uid属性在目录服务中搜索用户条目,其中uid=username。如果搜索成功,这个LoginModule将从检索到的条目中使用userPassword属性获取用户的加密密码。这个LoginModule假定密码存储为字节数组,转换为String后的格式如下:
"{crypt}encrypted_password"
LDAP目录服务器必须配置为允许读取userPassword属性。如果用户输入了有效的用户名和密码,这个LoginModule将将UnixPrincipal、UnixNumericUserPrincipal和相关的UnixNumericGroupPrincipals与Subject关联。
这个LoginModule还识别以下Configuration选项:
debug 如果为true,则将调试消息输出到System.out。
useFirstPass 如果为true,此LoginModule从模块的共享状态中检索用户名和密码,
使用"javax.security.auth.login.name"和
"javax.security.auth.login.password"作为相应的键进行身份验证。
如果身份验证失败,则不会尝试重试,
并将失败报告给调用应用程序。
tryFirstPass 如果为true,此LoginModule从模块的共享状态中检索用户名和密码,
使用"javax.security.auth.login.name"和
"javax.security.auth.login.password"作为相应的键进行身份验证。
如果身份验证失败,则模块使用
CallbackHandler检索新的用户名和密码,
并尝试进行另一次身份验证。
如果身份验证失败,则将失败报告给调用应用程序。
storePass 如果为true,此LoginModule将从CallbackHandler获取的用户名和密码存储在模块的
共享状态中,使用"javax.security.auth.login.name"和
"javax.security.auth.login.password"作为相应的键。
如果共享状态中已经存在用户名和密码的现有值,
或者身份验证失败,则不执行此操作。
clearPass 如果为true,此LoginModule将清除
存储在模块的共享状态中的用户名和密码
在身份验证(登录和提交)的两个阶段完成后。
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanabort()如果LoginContext的整体身份验证失败,则调用此方法。booleancommit()提交身份验证过程的抽象方法(第2阶段)。voidinitialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) 初始化这个LoginModule。booleanlogin()提示输入用户名和密码。booleanlogout()注销用户。
-
Field Details
-
USER_PROVIDER
模块可以访问相关用户信息的目录服务/路径。- 参见:
-
GROUP_PROVIDER
模块可以访问相关组信息的目录服务/路径。- 参见:
-
-
Constructor Details
-
JndiLoginModule
public JndiLoginModule()创建一个JndiLoginModule。
-
-
Method Details
-
initialize
public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) 初始化这个LoginModule。- 指定者:
-
initialize在接口LoginModule中 - 参数:
-
subject- 要进行身份验证的Subject。 -
callbackHandler- 用于与最终用户进行通信的CallbackHandler(例如,提示用户名和密码)。 -
sharedState- 共享的LoginModule状态。 -
options- 在此特定LoginModule的登录Configuration中指定的选项。
-
login
提示输入用户名和密码。验证密码与相关名称服务的密码。- 指定者:
-
login在接口LoginModule中 - 返回:
-
始终为true,因为不应忽略这个
LoginModule。 - 抛出:
-
FailedLoginException- 如果身份验证失败。 -
LoginException- 如果这个LoginModule无法执行身份验证。
-
commit
提交身份验证过程的抽象方法(第2阶段)。如果LoginContext的整体身份验证成功(相关的REQUIRED、REQUISITE、SUFFICIENT和OPTIONAL LoginModules成功),则调用此方法。
如果这个LoginModule自己的身份验证尝试成功(通过
login方法保存的私有状态进行检查),则此方法将UnixPrincipal与LoginModule中的Subject关联。如果这个LoginModule自己的身份验证尝试失败,则此方法将删除最初保存的任何状态。- 指定者:
-
commit在接口LoginModule中 - 返回:
- 如果这个LoginModule自己的登录和提交尝试成功,则为true,否则为false。
- 抛出:
-
LoginException- 如果提交失败
-
abort
如果LoginContext的整体身份验证失败,则调用此方法(相关的REQUIRED、REQUISITE、SUFFICIENT和OPTIONAL LoginModules未成功)。如果这个LoginModule自己的身份验证尝试成功(通过
login和commit方法保存的私有状态进行检查),则此方法将清理最初保存的任何状态。- 指定者:
-
abort在接口LoginModule中 - 返回:
- 如果这个LoginModule自己的登录和/或提交尝试失败,则为false,否则为true。
- 抛出:
-
LoginException- 如果中止失败。
-
logout
注销用户。此方法将删除由
commit方法添加的Principal。- 指定者:
-
logout在接口LoginModule中 - 返回值:
-
在所有情况下都返回true,因为这个
LoginModule不应该被忽略。 - 抛出:
-
LoginException- 如果注销失败。
-