2016-04-14 319 views
0

我必須連接到LDAP,但我無法使用Java代碼進行連接,並且使用LDAPAdmin工具正在進行連接。LDAP身份驗證問題

String url = "ldap://host name:389"; 
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
ldapEnv.put(Context.PROVIDER_URL, url); 
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=username"); 
ldapEnv.put(Context.SECURITY_CREDENTIALS, "#1223"); 

ERROR

Search error: javax.naming.AuthenticationException: [LDAP: error code 49 - 
    80090308: LdapErr: DSID-0C0903CF, comment: AcceptSecurityContext error, data 52e, v2580 
+0

是因爲我有密碼特殊字符? – JavaC

+1

安全主體應該是整個DN,而不僅僅是一個RDN。 – EJP

回答

1

一旦看到這一個..這對我來說很好,這可能會幫助你。 謝謝..

import java.util.Hashtable; 
import javax.naming.Context; 
import javax.naming.NamingException; 
import javax.naming.directory.Attribute; 
import javax.naming.directory.Attributes; 
import javax.naming.directory.BasicAttribute; 
import javax.naming.directory.BasicAttributes; 
import javax.naming.ldap.InitialLdapContext; 
import javax.naming.ldap.LdapContext; 
public class LdapContextCreation { 
    public static void main(String[] args) { 
     LdapContextCreation ldapContxCrtn = new LdapContextCreation(); 
     LdapContext ctx = ldapContxCrtn.getLdapContext(); 
    } 
     public LdapContext getLdapContext(){ 
      LdapContext ctx = null; 
      Hashtable env = new Hashtable(); 
      env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
      env.put(Context.SECURITY_AUTHENTICATION, "Simple"); 
      env.put(Context.SECURITY_PRINCIPAL, "cn=company,dc=example,dc=com");   
      env.put(Context.SECURITY_CREDENTIALS, "pasword");   
      env.put(Context.PROVIDER_URL, "ldap://localhost:389"); 
      try{ 
      ctx = new InitialLdapContext(env, null);   
      System.out.println("Connection Successful."); 
      }catch(NamingException nex){  
       System.out.println("LDAP Connection: FAILED");  
       nex.printStackTrace(); 
       }  
      return ctx; 
       } 

     }