Exemplo de utilização de LDAP com java (Login)

Bom dia a todos.

Alguem tem um exemplo ou sabe me dizer como faço para logar em uma aplicação web JAVA utilizando o LDAP?

Abraços a todos, obrigado :grin:

Armando

espero q ajude :joia:

http://www.google.com.br/search?hl=pt-BR&q=JNDI+%2B+LDAP&btnG=Pesquisa+Google&meta=

Utilizo sempre algo assim:

package loginldap;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class LoginLDAP {

	private LdapContext ctx;
	private final String URL_LDAP = "ldap://192.168.0.1:389";
	   
	/**
	 * Efetua o login do usuário
	 * Se login inválido, lança uma exceção do tipo AuthenticationException
	 */
	public boolean login(String dn, String password) throws NamingException {
		Hashtable env = new Hashtable(11);		

		env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
		env.put(Context.PROVIDER_URL, URL_LDAP);
		env.put(Context.SECURITY_AUTHENTICATION, "simple");
		env.put(Context.SECURITY_PRINCIPAL, dn);
		env.put(Context.SECURITY_CREDENTIALS, password);
		
		// Tenta criar o contexto com os dados de login
		try {
			ctx = new InitialLdapContext(env,null);
			return true;
		
		} catch (javax.naming.AuthenticationException e) {
			// Login inválido
			return false;
		}
		
	}
	
	public static void main(String[] args) {
		LoginLDAP l = new LoginLDAP();
		try {
			if (l.login("cn=Antonio Henriques,ou=Desenvolvimento,o=Portal Java,dc=com,dc=br","1234")) {
				System.out.println("Login válido");
			} else {
				System.out.println("Login inválido");
			}
			
		} catch (NamingException n) {
			n.printStackTrace();
		}
	}
}

Você pode tratar o objeto ctx como se fosse o Connection do JDBC, fazendo um Singleton para que apenas uma instância seja criada. Devo lembrar também que a forma de autenticação e o formato do DN pode variar de LDAP para LDAP. Este código funciona com OpenLDAP e IBM Directory Server.

Valeu amhfilho, obrigado pela força.

Grande Abraço :grin:

Armando

Bom dia,

Segui o exemplo que o amhfilho passou para autenticação em ldap e usei com o AD do Windows 2000 e funcionou legal…
O problema que encontrei é que o AD que estou conectando possui varios OU´s(Unidades Organizacionais), sendo assim eu preciso indicar o local exato do usuário para autenticar… Ex.:
if (l.login(“CN=testeldap,OU=Users,OU=Fabrica,DC=empresa,DC=com,DC=br”,“testeldap”)) {

Vc sabe me dizer se existe uma maneira em que eu não precise especificar isso? ou seja, que faça uma procura desde a raiz do diretório??

Agradeço antecipadamente,
Obrigado
Jayme Sanches

Pessoal, consegui fazer a busca no diretorio do AD usando as classes:
javax.naming.directory.SearchControls;
javax.naming.directory.SearchResult;

Agora meu problema é outro:
O LDAP que estou acessando é do Windows 2000 (Active Directory),

Esse domínio do windows foi migrado do Windows NT 4.0, as contas criadas depois da migração consigo autenticar sem problemas, já as contas migradas não são reconhecidas…
Alguém tem alguma idéia?
Obrigado.