Integração de Java com Microsoft Active Directory

Ola,

Gostaria de saber se o java integra com active directory ou ldap.
Se ele o faz se alguem tem algun link bacana sobre.

Procurei no google mas só achei lixo.

Vê se isto ajuda: http://java.sun.com/products/jndi/tutorial/ldap/

Ajuda + -, estava precisando mesmo é de integrar com AD, o LDAP seria segunda opção, mas mesmo assim valeu .
Obrigado.

[quote=alissoneloi]Ajuda + -, estava precisando mesmo é de integrar com AD, o LDAP seria segunda opção, mas mesmo assim valeu .
Obrigado.[/quote]

AD é um tipo simplificado de servidor LDAP.

Sim eu sei que o AD é filhote do LDAP mas ele tem funções que no LDAP não tem.
Hoje faço com php via comando do dos

<?php
###################################################################################################################################

# ------------------------------------------------------------------------
# CONEXÃO COM AS TABELAS DOS BANCOS DE DADOS
# ------------------------------------------------------------------------
	include "conecta.php";
	include "configuration.php";
	$tabela_importacao = "SELECT Icodigo, Inome_aluno, Icurso, Inum_periodo, Iturno, Iunidade, Isituacao_aluno, Icodigo_barras FROM tb_importacao";
	$consulta_tb_importacao = mysql_query($tabela_importacao);

# ------------------------------------------------------------------------
# CONEXÃO COM AS TABELAS DOS BANCOS DE DADOS
# ------------------------------------------------------------------------	
	$fp = fopen("./arquivo.bat", "w");
# ------------------------------------------------------------------------
# ------------------------------------------------------------------------
# FAZ LEITURA DO BANCO DE IMPORTAÇÃO
# ------------------------------------------------------------------------
	while ($array = mysql_fetch_array ($consulta_tb_importacao, MYSQL_ASSOC) ) 
	{

		$cmd_codigo = $array["Icodigo"];
		$cmd_nome_aluno = $array["Inome_aluno"];
		$cmd_num_periodo = $array["Inum_periodo"];
		$cmd_turno = $array["Iturno"];
		$cmd_situacao_aluno = $array["Isituacao_aluno"];
		$cmd_codigo_barras = $array["Icodigo_barras"];
		$codigo_unidade = $array["Iunidade"];
		$codigo_curso = $array["Icurso"];
		# ------------------------------------------------------------------------
		# BUSCA O NOME DO CURSO NA TABELA DE CURSOS RELATIVO AO CODIGO DA LISTA DE IMPORTAÇÃO
		# ------------------------------------------------------------------------

		$tabela_curso = "SELECT Ccurso, Cnomecurso, Cgrupo FROM tb_curso WHERE Ccurso = $codigo_curso LIMIT 1";
		$consulta_tb_curso = mysql_query ($tabela_curso);

		while ($array_1 = mysql_fetch_array ($consulta_tb_curso, MYSQL_ASSOC) )
		{
			$codigo_do_curso = $array_1["Ccurso"];
			$nome_do_curso = $array_1["Cnomecurso"];
			$grupo_seguranca = $array_1["Cgrupo"];
		}
		
		# ------------------------------------------------------------------------
		# BUSCA O NOME DA UNIDADE NA TABELA DE UNIDADES RELATIVO AO CODIGO DA LISTA DE IMPORTAÇÃO
		# ------------------------------------------------------------------------

		$tabela_unidades = "SELECT Uunidade, Ucampus FROM tb_unidade WHERE Uunidade = $codigo_unidade LIMIT 1";
		$consulta_tb_unidade = mysql_query ($tabela_unidades);
	
		while ($array_2 = mysql_fetch_array ($consulta_tb_unidade, MYSQL_ASSOC) )
		{
			$nome_da_unidade = $array_2["Ucampus"];
		}		
		# ------------------------------------------------------------------------
		# GERA O ARQUIVO HTML/BAT PARA IMPORTAÇÃO DOS ALUNOS.
		# ------------------------------------------------------------------------
		echo &quot;<br />&quot;;
		if ($cmd_situacao_aluno == 1)
		{

			echo &quot;Usuario: &quot; . $cmd_codigo . &quot; do curso &quot; . $nome_do_curso . &quot; criado com sucesso&quot;;
			$arquivobat = &quot;md \\\\&quot; . $servidor_de_arquivos_alunos . &quot;\\&quot; . $grupo_seguranca . &quot;\\&quot; . $cmd_codigo;
			shell_exec($arquivobat);
			fwrite($fp, &quot;$arquivobat&quot;);
			$arquivobat = (&quot;dsadd user \&quot;CN=&quot; . $cmd_codigo . &quot;,OU=&quot; . $nome_do_curso . &quot;,OU=Usuarios,OU=&quot; . $nome_da_unidade . &quot;,OU=Unidades,DC=&quot; . $dominio . &quot;,DC=&quot; . $ext_dominio . &quot;\&quot; -samid &quot; . $cmd_codigo . &quot; -upn &quot; . $cmd_codigo . &quot;@&quot; . $dominio . &quot;.&quot; . $ext_dominio . &quot; -display \&quot;&quot; . $cmd_nome_aluno . &quot;\&quot; -pwd &quot; . $cmd_codigo . &quot; -fn \&quot;&quot; . $cmd_nome_aluno .&quot;\&quot; -title &quot; . $cmd_codigo_barras . &quot; -desc \&quot;Curso: &quot;. $nome_do_curso . &quot; Periodo: &quot; . $cmd_num_periodo . &quot; Turno: &quot; . $cmd_turno . &quot;\&quot; -office \&quot;NUCLEO UNIV &quot; . $nome_da_unidade . &quot;\&quot; -profile &quot; . $caminho_perfil . &quot; -loscr &quot; . $script_logon . &quot; -dept &quot; . $grupo_seguranca . &quot; -memberof \&quot;CN=&quot; . $grupo_seguranca . &quot;,OU=Grupos,OU=&quot; . $nome_da_unidade . &quot;,OU=Unidades,DC=&quot; . $dominio . &quot;,DC=&quot; . $ext_dominio . &quot;\&quot; -mustchpwd yes -hmdrv Z -hmdir \&quot;\\\\&quot; . $servidor_de_arquivos_alunos . &quot;\\&quot; . $grupo_seguranca . &quot;\\&quot; . $cmd_codigo . &quot;\&quot;&quot;);
			shell_exec($arquivobat);
			fwrite($fp, &quot;$arquivobat&quot;);
		}
		elseif ($cmd_situacao_aluno &gt; 2)
		{
			echo &quot;Usuario: &quot; . $cmd_codigo . &quot; do curso &quot; . $nome_do_curso . &quot; excluido com sucesso&quot;;
			$arquivobat =  &quot;\ndsrm \&quot;CN=&quot; . $cmd_codigo . &quot;,OU=&quot; . $nome_do_curso . &quot;,OU=Usuarios,OU=&quot; . $nome_da_unidade . &quot;,OU=Unidades,DC=&quot; . $dominio . &quot;,DC=&quot; . $ext_dominio . &quot;\&quot; -noprompt&quot;;
			shell_exec($arquivobat);
			fwrite($fp, &quot;$arquivobat&quot;);
		}
		elseif ($cmd_situacao_aluno == 2 || $cmd_situacao_aluno == 0)
		{
			echo &quot;Usuario: &quot; . $cmd_codigo . &quot; do curso &quot; . $nome_do_curso . &quot; bloqueado com sucesso&quot;;
			$arquivobat = &quot;dsmod user \&quot;CN=&quot; . $cmd_codigo . &quot;,OU=&quot; . $nome_do_curso . &quot;,OU=Usuarios,OU=&quot; . $nome_da_unidade . &quot;,OU=Unidades,DC=&quot; . $dominio . &quot;,DC=&quot; . $ext_dominio . &quot;\&quot; -disabled yes&quot;;
			shell_exec($arquivobat);
			fwrite($fp, &quot;$arquivobat&quot;);
			$arquivobat = &quot;rd \\\\&quot; . $servidor_de_arquivos_alunos . &quot;\\&quot; . $grupo_seguranca . &quot;\\&quot; . $cmd_codigo;
			shell_exec($arquivobat);
			fwrite($fp, &quot;$arquivobat&quot;);
		}

/*

0 	Não matriculado 	 Bloqueado  ======OK
1 	Matriculado 		 Liberado   ======OK
2 	Trancado 			 Bloqueado  ======OK
3 	Cancelado 			 Excluído   ======OK
4 	Transferido 		 Excluído   ======OK
5 	Formado 			 Excluído   ======OK
6 	Calouro Desistente 	 Excluído   ======OK
7 	Desligado 			 Excluído   ======OK

*/		
	}
//===================================================================================
fclose($fp); // fecha o arquivo
//===================================================================================
$output = shell_exec('arquivo.bat');
echo &quot;&lt;pre&gt;$output&lt;/pre&gt;&quot;;
//===================================================================================
echo &quot;TERMINOU&quot;;
?&gt; 

Hoje o meu PHP faz uso o dsadd e dsmod (Ferramentas de linha de comando do windows server 2003).

shell_exec('arquivo.bat');

Queria portar isso pra java, pois estou com um mini projeto para fazer o seguinte;
Fazer a importação que o PHP faz acima;

E agora é que o bicho pega;
Os usuarios podem logar somente uma maquina por vez, quando o mesmo usuario tentar logar em outra maquina não consseguira;

O sistema tem que rodar no tray da maquina cliente (Windows XP SP3) do laboratorio, de minuto em minuto ele vai mandar para um banco de dados (bd_logados) o usuario que esta logado e a maquina;
Ex: usuario123 logado em maquina4lab1

quando o usuario123 tentar logar em outra maquina (maquina5lab1) por exemplo o software que esta rodando no tray desta maquina vai mandar para o banco;
usuario123 logado em maquina5lab1

====================================
No servidor ficará rodando o software na versão de verificação
ele vai ficar procurando no banco se exsitem usuarios duplicados
quando ele encontrar 2 X o usuario (No caso usuario123) ele manda uma mensagem do tipo "Usuario logado em duas maquinas" e manda fazer logof (Pode ate usar o recurso nativo do windows

shutdown -l -f -t 10 -c &quot;Usuario logado em duas maquinas&quot;

Vai funcionar mais ou menos como o limitlogin da microsoft, ( http://support.microsoft.com/kb/237282/pt )depois tem outras funcionalidades, tipo;

instalação de softares,
monitoramento remoto,
e por ai vai;

=================================

Por isso a questão de usar diretamente o AD e não o LDAP, pois o AD trata de forma diferente alguns atributos do usuario;
Isso impossibilita algumas de nossas tarefas pois usamos quase todas as guias preenchidas da propiedade do usuario;

=================================
Como eu havia dito,
LDAP ajuda mas o ideal é trabalhar direto no AD.

Atts,
Alisson Eloi

Alisson,

você conseguiu fazer a integração, estou enfrentando a mesma demanda…

Abs,

Carlos