2017-04-25 138 views
0

我正在嘗試在Windows Active Directory中添加新用戶。Java,將新用戶添加到Active Directory中啓用用戶

我能夠在AD中成功創建新用戶。但是此用戶作爲已禁用用戶添加到AD中,因此我想在AD中添加新用戶作爲已啓用用戶

對於這個我使用下面的代碼

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; 
     } 
    } 
} 

當我運行它,它給了我下面的錯誤:

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' 

我使用Java(jdk1.8.0_60)和Windows活動目錄。

+0

我覺得你的問題是重複的看到這個鏈接http://stackoverflow.com/questions/4322243/adding-a-user-with-a-password-in-active-directory-ldap – Manesh

+0

@Manesh我不是要求設置密碼。 – user3441151

+0

@Manesh我只想在AD中添加新用戶作爲啓用用戶。 – user3441151

回答

0

一般情況下,當您使用創建用戶帳戶,新帳戶被禁用,並且不能被啓用,除非發生以下任一操作:

  • 有效的密碼已設置的帳戶。
  • UF_PASSWD_NOTREQD參數已設置爲true。

如果您在創建用戶後設置了密碼和UF_NORMAL_ACCOUNT,它似乎工作得最好。

-Jim

+0

你想說的是,首先我必須在AD中創建用戶,而不是必須使用「0x0200」值更新'userAccountControl'屬性? – user3441151

相關問題