LDAP 认证问题,连接微软的AD.急急???
因我公司总部有所有员工的信息,内部email用户和密码是AD服务器,现在我们想用email的用户和密码来认证,以进入我们的一个应用平台。也就是用户只要有邮箱,并用邮箱帐号就可以进入我们的一个应用,我们的应用就不需建用户了。 
 服务器地址是一个域名“ptr.petrochina”,ping   可以通,但地址好像是动态变的, 
 想用java   的LDAP连接微软的AD服务器。在goole里面搜索了一下。找到一段代码:   
    public   boolean   checkAd(String   id,String   pwd){ 
 env   =   new   Hashtable(); 
                         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory "); 
                         env.put(Context.PROVIDER_URL,    "ldap://ptr.petrochina:389/cn=users,DC=ptr,DC=petrochina "); 
                         env.put(Context.SECURITY_AUTHENTICATION, "Simple ");                  
                         env.put(Context.SECURITY_PRINCIPAL, "cn= "+id+ ",cn=users,DC=ptr,DC=petrochina "); 
                         env.put(Context.SECURITY_CREDENTIALS   ,   pwd   ); 
 try{ 
             		System.out.println( "-----ddd-------- "); 
             		ctx=(DirContext)   new   InitialContext(env); 
             		System.out.println( "-------eee------ "); 
             		islogin=true; 
 }catch(AuthenticationException   aue) 
             	{ 
             		aue.printStackTrace(); 
             	      	islogin=false;              		 
             	}   catch   (NamingException   e)   { 
 			e.printStackTrace(); 
 		}finally{ 
 			try   { 
 				ctx.close(); 
 			}   catch   (Exception   ie)   {  				  				 
 			}  			  			 
 		}              	 
             	return   islogin; 
             }   
 但运行不成功,出现错误: 
 [LDAP:   error   code   49   -   80090308:   LdapErr:   DSID-0C090334,   comment:   AcceptSecurityContext   error,   data   525, 
 不知道是不是我的env写的不对,还是什么原因?有没有哪位大大做过这方面的东西,帮忙看看啊。
------解决方案--------------------public static DirContext getConnection(String bindUser, String bindUserPassword) throws Exception {           
         Hashtable env = new Hashtable(); 
         env.put( "java.naming.factory.initial ", Config.JNDI_FACTORY); //必须这样写,无论用什么LDAP服务器 
         env.put( "java.naming.provider.url ",Config.JNDI_URL); 
         env.put( "java.naming.security.principal ", bindUser); 
         env.put( "java.naming.security.credentials ", bindUserPassword);           
         return new InitialLdapContext(env, null);           
     }   
 我项目里面是这样,这个方法在open ldap ,sun的ad下都通过。 
 仔细检查一下?
------解决方案--------------------搂主是在给油田做东西吧?
这样就可以了:
  env.put(Context.SECURITY_PRINCIPAL, "cn= "+id+ ",cn=users,DC=ptr,DC=petrochina ");  
改为: env.put(Context.SECURITY_PRINCIPAL, id+ "@ptr.petrochina");  
我已经测试过了