Desenvolvi uma aplicação web e ela esta funcionando normal,
realiza uma conexao LDAP para autenticação do usuario e isso funciona
sem nenhum problema, mas quando passa de um dia para o outro, lembrando
que o servidor não eh desligado, ele nao consegue realizar a conexão com o LDAP,
verifiquei que o LDAP valida a data para ter acesso, se trocar a data do sistema ele
não conecta, seria isso alguma coisa.
mas quando realizo um reload na aplicação ela conecta.
Alguem??
Obrigado
Qual é o erro que acontece??
entao, no log nao acusa erro, vi no log do
apache tomcat e nele fla q tentou conectar e nao obteve sucesso,
eu coloquei um reconnect=true, e msmo assim nao funcionol
acho que é por causa da data msm, ele realiza a conexao, mas
aqui na minha empresa se a data do computador esta diferente do AD (Active Directory)
ele nao conecta. logo pensei q poderia ser isso q o servidor tbm estivesse passando.
Exemplo, se a aplicação ficar ativa de ontem e eu for tentar conectar hj, ele busca a data da aplicação
que foi ontem, logo nao conecta no ad
seria isso??
Que coisa maluca!
Só alguns pontos para dar uma idéia melhor do que está acontecendo:
- Essa conexão com LDAP é da própria aplicação (vocês programaram) ou está usando o JAAS do próprio Tomcat?
- Qual é a mensagem de erro do log do tomcat?
- Precisa ver bem se o problema acontece pela virada do dia propriamente dita ou se é pelo tempo que a aplicação está no ar. Para ter certeza só fazendo testes à noite para saber que hora exatamente para de funcionar, mas se na empresa não ficar ninguém à noite nem tiver acesso remoto, tente reiniciar no fim do dia (o mais tarde possível, o último a ir embora faz isso) e ver como está no outro dia bem cedo.
O horário acredito que não tenha nada a ver, porque mesmo se houver essa restrição das datas iguais o tempo continuará passando igual no tomcat e no LDAP.
(Mas eu que não sou doido de mandar descartar totalmente a possibilidade hehe)
eu mesmo programa a conexão, me flaram para realizar a conexão via Spring security
vou dar uma pesquisada no JAAS
quem sabe me ajuda a resolver, se for o tempo
o que vc me aconselharia a fazer?
essa é minha classe que realiza a conexao com o AD via LDAP
package util;
//classe responsável pela conexão com o Servidor AD
import java.io.Serializable;
import java.util.Hashtable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
@ManagedBean(name="ldap")
@SessionScoped
public class LDAP implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@SuppressWarnings({ "unchecked", "unused", "rawtypes" })
public boolean verificaAd(String nome, String password){
String userName = nome+"@arrb.com.br";
String newPassword = password;
Hashtable authEnv = new Hashtable(11);
authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, "ldap://192.168.1.15:389");
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, userName);
authEnv.put(Context.SECURITY_CREDENTIALS, newPassword);
try
{
DirContext authContext = new InitialDirContext(authEnv);
System.out.println("Autenticado!");
return true;
}
catch (AuthenticationException authEx)
{
System.out.println("Erro na autenticação! ");
//authEx.printStackTrace();
return false;
}
catch (NamingException namEx)
{
System.out.println("Problemas na conexão! ");
//namEx.getCause().printStackTrace();
return false;
}
}
}
Duas coisinhas que eu mudaria nesse código:
-
Quando tiver sucesso, antes de retornar feche a conexão usando authContext.close(); . Esse é um ponto altamente suspeito, vc pode estar com muitas conexões presas até que o servidor não aceita mais.
-
Deixe o printStackTrace() nas exceções, as informações sobre o erro vão ficar MUITO mais evidentes.
authEx.printStackTrace();
namEx.printStackTrace(); // -> Pode tirar o getCause(). que tinha aí, pois a causa raiz vai junto automaticamente
E coloca mais um bloco catch capturando Exception, e também imprimindo o stack trace… esse é só pra garantir que não vai passar nada.
Com essas alterações com certeza haverá novidades! Mesmo que seja apenas um log mais detalhes sobre o erro