2011-09-29 14 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो उपयोगकर्ताओं को लॉग इन करने के लिए एलडीएपी और सरल डेटाबेस प्रमाणीकरण दोनों का उपयोग करता है। केवल अगर उपयोगकर्ता एलडीएपी संदर्भ में मौजूद नहीं है, तो एप्लिकेशन जांचता है कि वह डेटाबेस में मौजूद है या नहीं। तो मुझे पासवर्ड जानने के बिना एलडीएपी में मौजूद उपयोगकर्ता जांचने के लिए एक तरीका चाहिए। मैं उल्लेख करता हूं कि उपयोगकर्ता नाम अद्वितीय हैं।मैं कैसे देख सकता हूं कि दिया गया उपयोगकर्ता नाम मौजूद है या नहीं?

मैं इस कोड का उपयोग करता हूं, जो काम करता है यदि मेरे पास सही उपयोगकर्ता नाम और पासवर्ड है। यदि पासवर्ड या उपयोगकर्ता नाम गलत है, तो मुझे अपवाद मिलता है। यह आदर्श होगा यदि मैं अलग-अलग अपवाद प्राप्त कर सकता हूं, यदि उपयोगकर्ता नाम मौजूद नहीं है, तो अन्य यदि पासवर्ड प्रदान किया गया है तो गलत है।

String username = "test"; 
    String password = "pass"; 
    Hashtable<String, String> environment = new Hashtable<String, String>(); 
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    environment.put(Context.PROVIDER_URL, "ldap://server.example.com:389"); 
    environment.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    String user = username + "@example.com"; 
    environment.put(Context.SECURITY_PRINCIPAL, user); 
    environment.put(Context.SECURITY_CREDENTIALS, password); 
    try 
    { 
     DirContext context = new InitialDirContext(environment); 

     String searchBase = "DC=server,DC=example,DC=COM"; 
     String FILTER = "(&(objectClass=user)(objectCategory=person)((sAMAccountName=" + username + ")))"; 
     SearchControls ctls = new SearchControls(); 
     ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
     NamingEnumeration<SearchResult> answer = context.search(searchBase, FILTER, ctls); 
     SearchResult result = answer.next(); 
     Attribute email = result.getAttributes().get("mail"); 
     Attribute cn = result.getAttributes().get("cn"); 
     System.out.println(cn + " : " + email); 
     context.close(); 
    } 
    catch (AuthenticationException a) 
    { 
     Logger.getLogger().info("Authentication failed: " + a.getExplanation()); 

    } 
    catch (NamingException e) 
    { 
     Logger.getLogger().info("Failed to bind to LDAP: " + e.getExplanation()); 
    } 

उत्तर

3

आप केवल अपने उपयोगकर्ता नाम का उपयोग कर एलडीएपी में उपयोगकर्ता की तलाश कर रहे हैं। लेकिन एलडीएपी को प्रमाणित करने के लिए, आप खोजे गए उपयोगकर्ता नाम और उसका पासवर्ड उपयोग कर रहे हैं।

प्रमाणीकरण के लिए बस एक और (व्यवस्थापक) उपयोगकर्ता और पासवर्ड का उपयोग करें, और यदि उपयोगकर्ता की खोज कुछ लौटाती है तो सत्य वापस लौटें।

+0

धन्यवाद। यही एकमात्र रास्ता है? खोज करने के लिए लॉग इन करना अनिवार्य है? – radonys

+0

शायद नहीं, मुझे नहीं पता। मैं सिर्फ यह समझा रहा हूं कि * आपके * कोड को उपयोगकर्ता के पासवर्ड की आवश्यकता है ताकि यह जांच सके कि यह एलडीएपी में मौजूद है या नहीं। –

+1

कुछ व्यवस्थापक अज्ञात खोज की अनुमति देंगे। अपने निर्देशिका सर्वर व्यवस्थापक के साथ जांचें। –

संबंधित मुद्दे

 संबंधित मुद्दे