java - identificar - quimica hibridacion sp sp2 sp3
LDAP: código de error 49-Error de enlace simple: NT_STATUS_LOGON_FAILURE (3)
Estoy intentando autenticar al usuario pero arroja una Exception
Puede haber un problema en la configuración.
public class LdapApplication {
private static final String INITIAL_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private static final String SECURITY_AUTHENTICATION ="simple";
private static final String NAMED_CONTEXT = "CN=Users";
private static final String SAM_ACCOUNT_NAME = "sAMAccountName=";
public static void main(String[] args) {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,INITIAL_CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, "ldap://ip:portNo/dc=organisation,dc=in");
env.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION);
env.put(Context.SECURITY_PRINCIPAL, "cn=userName,cn=Users");
env.put(Context.SECURITY_CREDENTIALS, "password" );
DirContext context = null;
NamingEnumeration namingEnumeration = null;
try {
context = new InitialDirContext(env);
namingEnumeration = context.search(NAMED_CONTEXT, SAM_ACCOUNT_NAME+ userName, null);
while (namingEnumeration.hasMore()) {
SearchResult searchResult = (SearchResult) namingEnumeration.next();
Attributes attributes = searchResult.getAttributes();
System.out.println(" Person Common Name = " + attributes.get("cn"));
System.out.println(" Person Display Name = " + attributes.get("displayName"));
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (namingEnumeration != null) {
try {
namingEnumeration.close();
} catch (Exception e) {
}
}
if (context != null) {
try {
context.close();
} catch (Exception e) {
}
}
}
}
}
pero si menciono Context.SECURITY_PRINCIPAL
como "organisation//userName"
lugar de "cn=userName,cn=Users"
funciona perfectamente bien. Sugiero amablemente una posible solución porque mi requisito es darle algo de SECURITY_PRINCIPAL usando cn o dc.
Está utilizando un nombre completo relativo que no funcionará.
Cambia tu código para usar
env.put(Context.SECURITY_PRINCIPAL, "cn=userName,cn=Users,dc=organisation,dc=in");
y también cambie su contexto de búsqueda a:
private static final String NAMED_CONTEXT = "CN=Users,dc=organisation,dc=in";
Siempre use nombres completos completos con LDAP.
Estábamos teniendo el mismo problema en nuestro código y lo solucionamos agregando el nombre de dominio antes del nombre de usuario. En lugar de ingresar user:password
, ingrese domain/user:password
.
Espero que esto ayude.
Para hacer un enlace LDAP necesitará usar uno de los retornos únicos para una de las entradas de Resolución de nombres ambiguos. Normalmente, uno usaría el nombre Fully Distinguished.
Tenemos un Ejemplo JNDI que muestra cómo se podría hacer esto.
-jim