在AD LDS中创建时激活用户帐户

时间:2013-10-01 22:15:14

标签: java active-directory

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

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

这是我的代码:

    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:LdapErr:DSID-0C090D11,注释:属性转换操作出错,数据0,v23f0保留名称'CN = Samuel   King,CN = Users,CN = Agents,DC = CHESA,DC = local'at   com.sun.jndi.ldap.LdapCtx.mapErrorCode(未知来源)at   com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源)at at   com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源)at at   com.sun.jndi.ldap.LdapCtx.c_createSubcontext(未知来源)at at   com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(未知   来源)at   com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知   来源)at   com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知   来源)at   javax.naming.directory.InitialDirContext.createSubcontext(未知   来源)at   com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:114)     在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'属性值;剩下的名字   'CN = Samuel King,CN = Users,CN = Agents,DC = CHESA,DC = local'at   com.sun.jndi.ldap.LdapClient.encodeAttribute(未知来源)at   com.sun.jndi.ldap.LdapClient.add(未知来源)at   com.sun.jndi.ldap.LdapCtx.c_createSubcontext(未知来源)at at   com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(未知   来源)at   com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知   来源)at   com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知   来源)at   javax.naming.directory.InitialDirContext.createSubcontext(未知   来源)at   com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:116)     在com.ceiwc.TestAD.main(TestAD.java:24)

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

谢谢!

2 个答案:

答案 0 :(得分:0)

NuAlphaMan,

我认为,该异常与您使用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)可以禁用帐户。我唯一想到的就是尝试读取值并翻转一下。

问候,德米特里

答案 1 :(得分: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);
}