我的代码有问题。我想为一个应用程序进行身份验证,我遇到了同样的问题。
我有ldap服务器的URL。以及LDAP中用户的用户名和密码。现在我向我们展示我使用的类:
public final class ldapAuth {
private String usuario;
private String clave;
private String servidor;
private String dn;
private String tipoAuth;
private boolean autenticado;
DirContext dc;
/**
* Constructor de la conexion con el Motor de LDAP
*
* @param server Servidor en donde se encuentra el LDAP
* @param dn Directoria del arbol del LDAP
* @param ta Tipo de Autenticacion
* @param usuario Usuario que desea realizar la conexion
* @param clave Clave del usuario
*
*/
public ldapAuth(String server, String dn, String ta,String usuario,String clave) {
this.servidor = server;
this.dn = dn;
this.tipoAuth = ta;
this.usuario=usuario;
this.clave=clave;
inicializarConexion();
}
public void inicializarConexion() {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, servidor);
env.put(Context.SECURITY_AUTHENTICATION, tipoAuth);
env.put(Context.SECURITY_PRINCIPAL, dn);
env.put(Context.SECURITY_CREDENTIALS, clave);
try {
dc = new InitialDirContext(env);
setAutenticado(true);
} catch (NamingException ex) {
System.out.println("Error Autenticando mediante LDAP, Error causado por : " + ex.toString());
setAutenticado(false);
}
}
/**
* Retorna el Atributo de la conexion con LDAP actual
*
* @param atributo Nombre del Atributo que se desea obtener
* @return Attribute con la informacion correspondiente
*/
public Attribute cargarPropiedadConexion(String atributo) {
Attribute propiedad = null;
try {
Attributes attrs = dc.getAttributes(dn);
if (attrs == null) {
propiedad = null;
} else {
propiedad = attrs.get(atributo);
}
} catch (Exception e) {
propiedad = null;
}
return propiedad;
}
/*Get's y Set's*/
public boolean isAutenticado() {
return autenticado;
}
public void setAutenticado(boolean autenticado) {
this.autenticado = autenticado;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
}
现在我向我们展示调用此函数的主要代码:
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
public class main {
public static void main(String[] args) throws NamingException{
System.out.println("Iniciando Autenticacion");
String server="ldap://10.201.69.xxx"; // servidor de LDAP
String usuario="CN =user, OU=Generic Users,OU=Ofimatica, OU=User Organizations, DC=mycompany, DC=vwg; // Usuario de Autenticacion
String dn="ou=users,ou=ofimatica,ou=user organizations,dc=mycompany,dc=vwg"; // Ruta del Arbol LDAP
String tipoAth="simple";//tipo de autentuicacion simple o por SSL
String clave="mypassword";
ldapAuth ldapAuth=new ldapAuth(server,dn,tipoAth,usuario,clave);
if(ldapAuth.isAutenticado()){
System.out.println("Usuario "+ldapAuth.getUsuario()+" Autenticado Correctamente");
}
else{
System.out.println("Usuario "+ldapAuth.getUsuario()+" No se Puedo Autenticar");
}
}
}
当我执行时,我看到错误代码49数据52e,我谷歌它,我通过无效凭据看到它,所以我不明白如何解决这个问题。
稍后我做了一些更改,如果我退出用户和密码,则错误无法显示。
谢谢:)
答案 0 :(得分:0)
您未提供绑定帐户的正确凭据。您的DC不允许匿名LDAP查找。因此,您需要提供凭据才能传递请求。我们必须提供类似domainShortName \ administrator password等的东西。或者你可以配置你的DC以允许匿名LDAP绑定。