Java + ACtive Directory criação de contas e usuarios via script
2 respostas
P
philype
Bom Dia a todos,
É o seguinte, estou tendo que criar conta e usuarios sempre no active directory, goataria de fazer isso via formulario (JAVA-JSP), goataria de saber se é possivel fazer isso, ou melhor, se pode ser implementado via java…
Acho que em algum daqueles livrões da Microsoft (Resource Kit) deve haver um script em VBScript que faça isso. Uma vez feito isso, chame-o pela sua aplicação Java.
R
Rafael_Nunes
Um exemplo:
importjava.util.Hashtable;importjavax.naming.ldap.*;importjavax.naming.directory.*;importjavax.naming.*;importjavax.net.ssl.*;importjava.io.*;publicclassCreateUser{publicstaticvoidmain(String[]args){Hashtableenv=newHashtable();StringadminName="cn=admin,dc=ims,dc=EDU,dc=DTI";StringadminPassword="123";StringuserName="CN=usuario1,ou=Usuarios,dc=ims,dc=EDU,dc=DTI";StringgroupName="CN=grupoTeste,ou=app1,ou=Sistemas,dc=ims,dc=EDU,dc=DTI";env.put(Context.SECURITY_AUTHENTICATION,"simple");env.put(Context.SECURITY_PRINCIPAL,"cn=admin,dc=ims,dc=EDU,dc=DTI");env.put(Context.SECURITY_CREDENTIALS,"123");env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.PROVIDER_URL,"ldaps://ipDoServidor:636");env.put(Context.SECURITY_PROTOCOL,"ssl");try{LdapContextctx=newInitialLdapContext(env,null);Attributesattrs=newBasicAttributes(true);BasicAttributeocattr=newBasicAttribute("objectclass");ocattr.add("top");ocattr.add("person");ocattr.add("organizationalPerson");ocattr.add("user");attrs.put(ocattr);attrs.put("cn",userName);intUF_ACCOUNTDISABLE=0x0002;intUF_PASSWD_NOTREQD=0x0020;intUF_PASSWD_CANT_CHANGE=0x0040;intUF_NORMAL_ACCOUNT=0x0200;intUF_DONT_EXPIRE_PASSWD=0x10000;intUF_PASSWORD_EXPIRED=0x800000;attrs.put("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT+UF_PASSWD_NOTREQD+UF_PASSWORD_EXPIRED+UF_ACCOUNTDISABLE));Contextresult=ctx.createSubcontext(userName,attrs);System.out.println("Created disabled account for: "+userName);//Para modificar a senha de um usuário no AD, a conexão //deve ser SSL e a senha em UnicodeStartTlsResponsetls=(StartTlsResponse)ctx.extendedOperation(newStartTlsRequest());tls.negotiate();ModificationItem[]mods=newModificationItem[2];StringnewQuotedPassword="\"321\"";byte[]newUnicodePassword=newQuotedPassword.getBytes("UTF-16LE");mods[0]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("unicodePwd",newUnicodePassword));mods[1]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT+UF_PASSWORD_EXPIRED)));ctx.modifyAttributes(userName,mods);System.out.println("Set password & updated userccountControl");try{ModificationItemmember[]=newModificationItem[1];member[0]=newModificationItem(DirContext.ADD_ATTRIBUTE,newBasicAttribute("member",userName));ctx.modifyAttributes(groupName,member);System.out.println("Added user to group: "+groupName);}catch(NamingExceptione){System.err.println("Problem adding user to group: "+e);}tls.close();ctx.close();System.out.println("Successfully created User: "+userName);}catch(NamingExceptione){System.err.println("Problem creating object: "+e);}catch(IOExceptione){System.err.println("Problem creating object: "+e);}}}
Ps: Vá nos fóruns da Sun, na área de JNDI e procure pelos posts do usuário ‘adler_steven’. Tudo que você precisa fazer fazer com AD praticamente o cara postou exemplos lá.