2017-04-25 2 views
0

Ich versuche, einen neuen Benutzer in Windows Active Directory hinzuzufügen.Java, neuen Benutzer in Active Directory als aktivierten Benutzer hinzufügen

Ich bin in der Lage, neue Benutzer in AD erfolgreich zu erstellen. Aber dieser Benutzer wird in AD als ein deaktivierter Benutzer hinzugefügt, also Ich möchte neuen Benutzer in AD als aktivierten Benutzer hinzufügen.

Hierzu ich Code unten bin mit

import java.util.Hashtable; 
import javax.naming.Context; 
import javax.naming.NamingException; 
import javax.naming.directory.Attribute; 
import javax.naming.directory.Attributes; 
import javax.naming.directory.BasicAttribute; 
import javax.naming.directory.BasicAttributes; 
import javax.naming.ldap.InitialLdapContext; 

public class Test { 
    final static String DOMAIN_NAME = "TEST.local"; 
    final static String User_Context = "CN=Users,DC=TEST,DC=local"; 
    final static String DOMAIN_URL = "ldap://192.168.1.100:389"; 
    final static String ADMIN_NAME = "CN=Administrator,CN=Users,DC=TEST,DC=local"; 
    final static String ADMIN_PASS = "Awesdew321"; 
    final static String SEC_AUTH = "simple"; 
    final static String CON_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; 

    public static void main(String[] args) { 
     UserObjects userObj = new UserObjects(); 
     userObj.sAMAccountName = "tuser01"; 
     userObj.givenName = "Test"; 
     userObj.sn = "User01"; 
     userObj.password = "Terdar123"; 
     userObj.organisationUnit = ""; 

     try { 
      addUser(userObj); 
     } catch (NamingException e) { 
     } 
    } 

    public static boolean addUser(UserObjects userObj) throws NamingException { 
     int UF_NORMAL_ACCOUNT = 0x0200; 

     InitialLdapContext context = null; 
     Hashtable<String, String> env = new Hashtable<String, String>(); 
     try { 
      env.put(Context.INITIAL_CONTEXT_FACTORY, CON_FACTORY); 
      env.put(Context.SECURITY_AUTHENTICATION, SEC_AUTH); 
      env.put(Context.SECURITY_PRINCIPAL, ADMIN_NAME); 
      env.put(Context.SECURITY_CREDENTIALS, ADMIN_PASS); 
      env.put(Context.PROVIDER_URL, DOMAIN_URL); 
      context = new InitialLdapContext(env, null); 

      Attribute objClasses = new BasicAttribute("objectClass"); 
      objClasses.add("top"); 
      objClasses.add("person"); 
      objClasses.add("organizationalPerson"); 
      objClasses.add("user"); 

      String cnValue = new StringBuffer(userObj.givenName).append(" ").append(userObj.sn).toString(); 
      Attribute cn = new BasicAttribute("cn", cnValue); 
      Attribute sAMAccountName = new BasicAttribute("sAMAccountName", userObj.sAMAccountName); 
      Attribute principalName = new BasicAttribute("userPrincipalName", 
        userObj.sAMAccountName + "@" + DOMAIN_NAME); 
      Attribute givenName = new BasicAttribute("givenName", userObj.givenName); 
      Attribute sn = new BasicAttribute("sn", userObj.sn); 
      Attribute uid = new BasicAttribute("uid", userObj.sAMAccountName); 
      Attribute userAccountControl = new BasicAttribute("userAccountControl", 
        Integer.toString(UF_NORMAL_ACCOUNT)); 
      Attribute userPassword = new BasicAttribute("userpassword", userObj.password); 

      Attributes container = new BasicAttributes(); 
      container.put(objClasses); 
      container.put(sAMAccountName); 
      container.put(principalName); 
      container.put(cn); 
      container.put(sn); 
      container.put(givenName); 
      container.put(uid); 
      container.put(userAccountControl); 
      container.put(userPassword); 

      String userDN = "cn=" + cnValue + "," + User_Context; 
      context.createSubcontext(userDN, container); 
      return true; 
     } catch (Exception e) { 
      return false; 
     } 
    } 
} 

Als ich das laufen, Es gibt mir die folgende Fehlermeldung:

javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000052D: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0 
remaining name 'cn=Test User01,CN=Users,DC=TEST,DC=local' 

Ich bin mit Java (jdk1.8.0_60) und Windows Active Directory.

+0

Ich glaube, Sie doppelte Frage auf diesen Link wird sehen http://stackoverflow.com/questions/4322243/adding-a-user-with-a-password-in-active-directory-ldap – Manesh

+0

@Manesh Ich frage nicht nach Passwort gesetzt. – user3441151

+0

@Manesh Ich möchte nur neue Benutzer in AD als aktiviert Benutzer hinzufügen. – user3441151

Antwort

0

Im Allgemeinen, wenn Sie ein Benutzerkonto verwenden, erstellen, ist das neue Konto deaktiviert und kann nicht aktiviert werden kann, wenn eine der folgenden aufgetreten:

  • Ein gültiges Passwort für das Konto festgelegt wurde.
  • Der Parameter UF_PASSWD_NOTREQD wurde auf "true" gesetzt.

Es scheint am besten zu funktionieren, wenn Sie das Kennwort und UF_NORMAL_ACCOUNT nach der Erstellung des Benutzers festlegen.

-Jim

+0

Sie versuchen zu sagen, dass ich zuerst Benutzer in AD erstellen muss, als ich Attribut 'userAccountControl' mit "0x0200" Wert aktualisieren muss? – user3441151

Verwandte Themen