2016-06-02 10 views
-2

にjava.lang.Stringでにキャストすることはできません。[Bは、LDAP検索

public class selectEntry { 

     DirContext ldapContext = null; 

     public selectEntry() { 
      try { 
       Hashtable<String, String> environment = new Hashtable<String, String>(); 

       environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
       environment.put(Context.PROVIDER_URL, url); 
       environment.put(Context.SECURITY_AUTHENTICATION, conntype); 
       environment.put(Context.SECURITY_PRINCIPAL, AdminDn); 
       environment.put(Context.SECURITY_CREDENTIALS, password); 

       ldapContext = new InitialDirContext(environment); 

       System.out.println("Bind successful"); 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 

     public void getEntry() { 
      try { 
       SearchControls searcCon = new SearchControls(); 
       searcCon.setSearchScope(SearchControls.SUBTREE_SCOPE); 
       NamingEnumeration results 
         = ldapContext.search("uid=aruhat.aruhat,ou=openzki,dc=aruhat,dc=co,dc=in", "(uid=aruhat.aruhat)", searcCon); 
       if (results != null) { 
        while (results.hasMore()) { 
         SearchResult res = (SearchResult) results.next(); 
         Attributes atbs = res.getAttributes(); 
         Attribute atb = atbs.get("userPassword"); 
         String name = (String) atb.get(); 
         System.out.println("Name is :=> " + name); 
        } 
       } else { 
        System.out.println("fail"); 
       } 
      } catch (Exception e) { 
       System.out.println("Exception Type:=> "+e); 
       System.out.println("Exception Message:=> "+e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 

     public static void main(String[] args) { 
      new selectEntry().getEntry(); 
     } 
    } 

+0

ユーザパスワードが 'byte []'として保存されているようです。あなたは何とかそれをStringに変換する必要があります。たぶん '新しい文字列(バイト、" UTF - 8 ")'。 – Thilo

+0

または、間違った属性を見ているだけです。あなたは '' userName ''を望んでいませんか? – Thilo

+0

いいえ私はユーザー名ではなくユーザーのパスワードを探していますが、属性は正しくありません – Sagar

答えて

-1

バイリング属性を取得するには、末尾に;binaryという接尾辞が必要です(例:userCertificate;binary)。次に、Attributeオブジェクトがあります。

byte[] bytes = (byte[]) attr.get() 

を実行すると完了です。 toString()または(String)キャストでは動作しません。

+0

'; binary'は' String'属性を 'byte []'として返します。これはすでにバイナリです。 – EJP

+0

@EJP回答が編集されました。 –

+0

まだ間違っています。この値は '; binary'がなくてもすでに' byte [] 'であり、' toString() 'は使用していません。 – EJP

0

LDAPのパスワードはハッシュではなく、文字列として格納されます。それは

java.lang.ClassCastException: [B cannot be cast to java.lang.String 

コードをスローします。例外のように、属性値はbyte[]として返されます。

ただし、最初にハッシュパスワード属性を取得する理由はありません。それはあなたに良いことではありません。要件を確認します。古いパスワードを使用しているユーザーとして、有効であるかどうかをテストし、パスワードを読み取ろうとしないでください。これは取得できません。

+0

おかげで多くのエラーが解決されました – Sagar

関連する問題