2017-04-10 12 views
1

LDAPで認証できるクラスがあります。私はこのコードを(テストの理由から)1つのクラスだけのプロジェクトで実行すると問題はなく、期待通りのブール値を返しますが、私が作業しているプロジェクトで実行すると、次のエラー:LDAP認証の問題:java.lang.IncompatibleClassChangeError

public static void autenticarUsuario(String usuar, String password) throws LdapException, CursorException{  

    Dn user = Dn.EMPTY_DN; 
    try{ 
     BasicConfigurator.configure(); 
    LdapConnectionConfig config = new LdapConnectionConfig(); 
    config.setLdapHost(SERVER_IP); 
    config.setLdapPort(PORT); 
    config.setName("uid=ldapsearch,ou=System,ou=Users,dc=fiec,dc=espol,dc=edu,dc=ec"); 
    config.setCredentials(CREDENTIALS);   
    conn = new LdapNetworkConnection(config); 
    }catch(Exception e){    
    } 
    String s1 = usuar; 
    String s2 = password; 

    //System.out.println("Nombre: "+s1+" Contra: "+s2); 
    try { 
     conn.bind(); 
     System.out.println(conn.isAuthenticated());    
     // Create the SearchRequest object 
     SearchRequest req = new SearchRequestImpl(); 
     req.setScope(SearchScope.SUBTREE); 
     req.addAttributes("*"); 
     req.setTimeLimit(0); 
     req.setBase(new Dn("ou=Users,dc=fiec,dc=espol,dc=edu,dc=ec")); 
     req.setFilter("(uid="+ s1 +")"); 

     // Process the request 
     SearchCursor searchCursor = conn.search(req); 

     while (searchCursor.next()) 
     { 
      Response r = searchCursor.get(); 
      if(r instanceof SearchResultEntry){ 
       Entry re = ((SearchResultEntry) r).getEntry(); 
       user = re.getDn(); 
      } 
     } 

     conn.bind(user, s2); 
     //return(conn.isAuthenticated()); 
     inLDAP = conn.isAuthenticated();    
    } catch (InvalidConnectionException ex) { 
     //System.out.println(ex); 
    }   
    catch (LdapException e) {  
     e.printStackTrace(); 
    } catch (CursorException e) {   
     e.printStackTrace();   
    } 
    inLDAP = false; 
} 

私が働いているプロジェクトがJavaFXのアプリケーションですが、このメソッドはクラスに呼び出されます。

java.lang.IncompatibleClassChangeError: Class org.apache.mina.filter.codec.ProtocolCodecFilter does not implement the requested interface org.apache.mina.core.filterchain.IoFilter 

これはインクルードは私が認証することを可能にする方法であり、アプリケーションから拡張されません(ユーザー資格情報を確認するためのJavaコードのみ)。

これはスタックトレースです:

Exception in thread "pool-1-thread-1" java.lang.IncompatibleClassChangeError: Class org.apache.mina.filter.codec.ProtocolCodecFilter does not implement the requested interface org.apache.mina.core.filterchain.IoFilter 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.register(DefaultIoFilterChain.java:267) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.addLast(DefaultIoFilterChain.java:174) 
at org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder.buildFilterChain(DefaultIoFilterChainBuilder.java:436) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.addNow(AbstractPollingIoProcessor.java:528) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.handleNewSessions(AbstractPollingIoProcessor.java:501) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:67) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1116) 
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

これらの私が働いているライブラリです:なぜこれが起こっている私にはわからない

import org.apache.directory.api.ldap.model.cursor.CursorException; 
import org.apache.directory.api.ldap.model.cursor.SearchCursor; 
import org.apache.directory.api.ldap.model.entry.Entry; 
import org.apache.directory.api.ldap.model.exception.LdapException; 
import org.apache.directory.api.ldap.model.message.Response; 
import org.apache.directory.api.ldap.model.message.SearchRequest; 
import org.apache.directory.api.ldap.model.message.SearchRequestImpl; 
import org.apache.directory.api.ldap.model.message.SearchResultEntry; 
import org.apache.directory.api.ldap.model.message.SearchScope; 
import org.apache.directory.api.ldap.model.name.Dn; 
import org.apache.directory.ldap.client.api.LdapConnection; 
import org.apache.directory.ldap.client.api.LdapConnectionConfig; 
import org.apache.mina.*; 
import org.apache.directory.ldap.client.api.LdapNetworkConnection; 
import org.apache.directory.ldap.client.api.exception.InvalidConnectionException; 
import org.apache.log4j.BasicConfigurator; 

、私は事前に任意の助けを感謝します

答えて

1

バージョンの問題です。 Mina 1.0とMina 2.0の間で、彼らはorg.apache.mina.filterchainからorg.apache.mina.core.filterchainに(特に)IoFilterインターフェイスを移動しました。 Mina 2.0用にコンパイルされたコードをMina 1.0の実装で使用しようとしていると思います。

解決方法:ビルドとランタイムのクラスパスと依存関係を調べて、これがどのようになったのか把握し、不一致を修正します。