spring集成ldap


  BasicAttribute ocattr = new BasicAttribute("objectClass");
        ocattr.add("top");
        ocattr.add("person");
        ocattr.add("organizationalPerson");
        //ocattr.add("user");
        // 用户属性
        Attributes attrs = new BasicAttributes();
        attrs.put(ocattr);
        //用户登录名
        attrs.put("userPrincipalName", user.getLoginName());
        //用户登录名 windows 2000以前的版本
        attrs.put("sAMAccountName", user.getLoginName());
        //用户正式名
        attrs.put("cn", user.getUserName());
        //姓
        attrs.put("sn", user.getSn());
        //名
        attrs.put("givenname", user.getGivenName());
        //显示名称
        attrs.put("displayName", user.getDisplayName());
        //邮件
        attrs.put("mail", user.getEmail());
        //下次登录修改密码
        //attrs.put("pwdLastSet", "0");
        //启用账户
        //attrs.put("userAccountControl","544");
        //密码
        attrs.put("userPassword", "123456");
        ldapTemplate.bind(LdapNameBuilder.newInstance("").add("ou","user").add("CN", user.getUserName()).build(), null, attrs);

ldap创建用户时报错。

Caused by: javax.naming.directory.InvalidAttributeIdentifierException: [LDAP: error code 17 - userPrincipalName: attribute type undefined]; remaining name 'CN=H00002,ou=user'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3223)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3100)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2891)
    at com.sun.jndi.ldap.LdapCtx.c_bind(LdapCtx.java:423)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_bind(ComponentDirContext.java:299)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:217)
    at javax.naming.directory.InitialDirContext.bind(InitialDirContext.java:182)
    at org.springframework.ldap.core.LdapTemplate$21.executeWithContext(LdapTemplate.java:996)
    at org.springframework.ldap.core.LdapTemplate.executeWithContext(LdapTemplate.java:821)
    ... 71 more