Java 在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); //

所以,我正在编写代码,将在AD LDS中创建用户帐户。我可以创建用户,但帐户已禁用

我希望用户处于活动状态,并能够更改其密码。我已经尝试了其中的一些建议,但对我没有帮助

这是我的密码:

    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)可以禁用帐户。我唯一想到的是尝试读取该值并翻转位

关于,Dmitry

NoSuchAttributeException:“表示在修改或比较操作中指定的属性在条目中不存在。”

格式错误的“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);
}