- java.lang.Object
-
- com.sun.security.auth.module.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 = 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
,并与相关UnixNumericGroupPrincipalsSubject
。此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.
-
-
Field Summary
Fields Modifier and Type Field 描述 String
GROUP_PROVIDER
String
USER_PROVIDER
JNDI提供商
-
构造方法摘要
构造方法 Constructor 描述 JndiLoginModule()
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
abort()
如果LoginContext的整体身份验证失败,则调用此方法。boolean
commit()
提交认证过程的抽象方法(阶段2)。void
initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
初始化LoginModule
。boolean
login()
提示用户名和密码。boolean
logout()
注销用户。
-
-
-
字段详细信息
-
USER_PROVIDER
public final String USER_PROVIDER
JNDI提供商- 另请参见:
- Constant Field Values
-
GROUP_PROVIDER
public final String GROUP_PROVIDER
- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
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自己的身份验证尝试成功(通过检索由
login
和commit
方法保存的私有状态进行检查),则此方法将清除最初保存的任何状态。- Specified by:
-
abort
在接口LoginModule
- 结果
- 如果此LoginModule自己的登录和/或提交尝试失败,则为false,否则为true。
- 异常
-
LoginException
- 如果中止失败。
-
logout
public boolean logout() throws LoginException
注销用户。此方法将删除由
commit
方法添加的commit
。- Specified by:
-
logout
在接口LoginModule
- 结果
-
在所有情况下都是这样,因为这个
LoginModule
不应该被忽略。 - 异常
-
LoginException
- 如果注销失败。
-
-