0

因此,我正在编写将在 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: error code 16 - 00000057: LdapErr: DSID-0C090D11, comment: Error in attribute conversion operation, data 0, v23f0remaining name 'CN=Samuel King,CN=Users,CN=Agents, DC=CHESA,DC=local' at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source) at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) at com.sun.jndi.ldap.LdapCtx .processReturnCode(Unknown Source) at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx .PartialCompositeDirContext.createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source) at javax.naming.directory.InitialDirContext。createSubcontext(Unknown Source) at com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:114) at com.ceiwc.TestAD.main(TestAD.java:24)

如果我将更新 ms-DS-User-Account-Control-Computed 的行更改为:

attributes.put("ms-DS-User-Account-Control-Computed", UF_NORMAL_ACCOUNT
                + UF_PASSWORD_EXPIRED);

我收到以下错误:

javax.naming.directory.InvalidAttributeValueException:格式错误的“ms-DS-User-Account-Control-Computed”属性值;com.sun.jndi.ldap.LdapClient.encodeAttribute(Unknown Source) at com.sun.jndi.ldap.LdapClient 的剩余名称 'CN=Samuel King,CN=Users,CN=Agents,DC=CHESA,DC=local' .add(Unknown Source) at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx .PartialCompositeDirContext.createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source) at javax.naming.directory.InitialDirContext.createSubcontext(Unknown Source) at com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory .java:116) 在 com.ceiwc。

那么,我做错了什么?这是激活帐户的正确方法吗?有人有任何代码可以帮助我吗?

谢谢!

4

2 回答 2

0

努阿尔法人,

我认为,该异常与您使用 CN 作为属性名称而不是 Ldap-Display-Name(即 msDS-User-Account-Control-Computed)这一事实有关。可以在此处找到说明http://msdn.microsoft.com/en-us/library/windows/desktop/ms677840(v=vs.85).aspx

关于如何激活帐户的第二个问题,我发现有一个属性 userAccountControl ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms680832(v=vs.85 ).aspx#win_2008_r2 ) 和可以禁用帐户的值 0x00000002 (ADS_UF_ACCOUNTDISABLE)。我唯一想到的是尝试读取值并翻转位。

问候, 德米特里

于 2014-01-31T10:40:51.097 回答
0

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

格式错误的“ms-DS-User-Account-Control-Computed”属性值:表示错误的属性类型。

这是我的工作示例,我使用 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);
}
于 2018-01-25T10:58:03.707 回答