Java 在AD LDS中创建时激活用户帐户
所以,我正在编写代码,将在AD LDS中创建用户帐户。我可以创建用户,但帐户已禁用 我希望用户处于活动状态,并能够更改其密码。我已经尝试了其中的一些建议,但对我没有帮助 这是我的密码:Java 在AD LDS中创建时激活用户帐户,java,active-directory,Java,Active Directory,所以,我正在编写代码,将在AD LDS中创建用户帐户。我可以创建用户,但帐户已禁用 我希望用户处于活动状态,并能够更改其密码。我已经尝试了其中的一些建议,但对我没有帮助 这是我的密码: ctx = getConnection(adminUser, adminPassword); // Create attributes for the new user Attributes attributes = new BasicAttributes(true); //
ctx = getConnection(adminUser, adminPassword);
// Create attributes for the new user
Attributes attributes = new BasicAttributes(true);
// Main attributes for user
attributes.put("objectClass", "user");
attributes.put("name", user.getFullName());
attributes.put("ms-DS-User-Account-Control-Computed",
Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWORD_EXPIRED));
try {
ctx.createSubcontext(getDistinguishedName(user.getFullName()),
attributes);
System.out.println("User successfully added!");
} catch (NamingException e) {
e.printStackTrace();
}
当我运行此操作时,会出现以下错误:
javax.naming.directory.NoSuchAttributeException:[LDAP:错误代码16
-00000057:LDAPPER:DSID-0C090D11,注释:属性转换操作中出错,数据0,V23F0剩余名称'CN=0
King,CN=用户,CN=代理,DC=CHESA,DC=local'at
com.sun.jndi.ldap.LdapCtx.mapErrorCode(未知源代码)位于
com.sun.jndi.ldap.LdapCtx.processReturnCode(未知源代码)位于
com.sun.jndi.ldap.LdapCtx.processReturnCode(未知源代码)位于
com.sun.jndi.ldap.LdapCtx.c_createSubcontext(未知源)位于
com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(未知
来源)在
com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知
来源)在
com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知
来源)在
javax.naming.directory.InitialDirContext.createSubcontext(未知
来源)在
com.ceick.ActiveDirectory.createUserAccount(ActiveDirectory.java:114)
位于com.ceick.TestAD.main(TestAD.java:24)
如果我将更新ms DS用户帐户控制的行更改为:
attributes.put("ms-DS-User-Account-Control-Computed", UF_NORMAL_ACCOUNT
+ UF_PASSWORD_EXPIRED);
我得到以下错误:
javax.naming.directory.InvalidateTributeValueException:格式不正确
“ms DS用户帐户控制已计算”属性值;剩余名称
“CN=Samuel King,CN=Users,CN=Agents,DC=CHESA,DC=local”在
位于的com.sun.jndi.ldap.LdapClient.encodeAttribute(未知源)
com.sun.jndi.ldap.LdapClient.add(未知源)位于
com.sun.jndi.ldap.LdapCtx.c_createSubcontext(未知源)位于
com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(未知
来源)在
com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知
来源)在
com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知
来源)在
javax.naming.directory.InitialDirContext.createSubcontext(未知
来源)在
com.ceick.ActiveDirectory.createUserAccount(ActiveDirectory.java:116)
位于com.ceick.TestAD.main(TestAD.java:24)
那么,我做错了什么?这是激活帐户的正确方式吗?有人有代码帮我吗
谢谢!NuAlphaMan
我认为,这个异常与以下事实有关:您使用CN作为属性的名称,而不是Ldap显示名称,Ldap显示名称是msDS用户帐户控制计算出来的
至于如何激活帐户的第二个问题,我发现有一个属性userAccountControl()和一个值0x00000002(ADS_UF_ACCOUNTDISABLE)可以禁用帐户。我唯一想到的是尝试读取该值并翻转位
关于,DmitryNoSuchAttributeException:“表示在修改或比较操作中指定的属性在条目中不存在。”
格式错误的“ms DS用户帐户控制计算”属性值:表示属性类型错误
下面是我的工作示例,我使用ActiveDirectory 2008进行检查:
public void mapToContext(int userAccountControl, DirContextAdapter context) {
context.setAttributeValue("userAccountControl", disableAccount(userAccountControl));
}
private String disableAccount(int userAccountControl) {
userAccountControl |= AccountControlFlags.ACCOUNTDISABLE;
return String.valueOf(userAccountControl);
}