android sdk并没有提供ldap 的接口,看到网上有封装好的jar包。
ldap sdk下载地址:https://www.unboundid.com/products/ldap-sdk/files/unboundid-ldapsdk-2.3.4-se.zip
将unboundid-ldapsdk-se.jar引用到项目中。
MainAcitvity.java
package com.example.flashcall; import java.util.LinkedList; import android.app.Activity; import android.os.Bundle; import com.example.flashcall.SearchThread.OnSearchFinishedListener; import com.unboundid.ldap.sdk.Filter; import com.unboundid.ldap.sdk.LDAPException; import com.unboundid.ldap.sdk.SearchResult; import com.unboundid.ldap.sdk.SearchResultEntry; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Make sure that the filter is valid. String filterString = "(cn=test)"; Filter filter = null; try { filter = Filter.create(filterString); } catch (LDAPException le) { } // Create a thread to process the search. if (filter != null) { final SearchThread searchThread = new SearchThread(filter); searchThread.setResultListner(new OnSearchFinishedListener() { @Override public void onFinished(SearchResult result) { final int entryCount = result.getEntryCount(); if (entryCount == 0) { } else if (entryCount == 1) { SearchResultEntry ret = result.getSearchEntries() .get(0); ToolUtil.log(ret.toString()); } else { final LinkedList<SearchResultEntry> entries = new LinkedList<SearchResultEntry>( result.getSearchEntries()); } } }); searchThread.start(); } else { } } }
LdapServer.java
package com.example.flashcall; import com.unboundid.ldap.sdk.LDAPConnection; public class LdapServer { // The port number of the directory server. private static final int PORT = 389; // The base DN to use when searching the server. public static final String BASE_DN = "dc=example,dc=com"; // The address of the directory server. private static final String HOST = "127.0.0.1"; private static final String BIND_DN = "domain\\username"; private static final String BIND_PW = "123456"; private static LDAPConnection conn; public static LDAPConnection getConnection() { if (conn == null) { try { conn = new LDAPConnection(HOST, PORT, BIND_DN, BIND_PW); } catch (Exception e) { } } return conn; } }
SearchThread.java
package com.example.flashcall; import com.unboundid.ldap.sdk.Filter; import com.unboundid.ldap.sdk.LDAPConnection; import com.unboundid.ldap.sdk.LDAPException; import com.unboundid.ldap.sdk.LDAPSearchException; import com.unboundid.ldap.sdk.ResultCode; import com.unboundid.ldap.sdk.SearchRequest; import com.unboundid.ldap.sdk.SearchResult; import com.unboundid.ldap.sdk.SearchScope; final class SearchThread extends Thread { /** * The size limit that will be used for searches. */ static final int SIZE_LIMIT = 100; /** * The time limit (in seconds) that will be used for searches. */ static final int TIME_LIMIT_SECONDS = 30; // The filter to use for the search. private final Filter filter; public OnSearchFinishedListener l; public void setResultListner(OnSearchFinishedListener ml) { l = ml; }; SearchThread(final Filter filter) { ToolUtil.log(filter); this.filter = filter; } @Override() public void run() { SearchResult result = null; LDAPConnection conn = null; try { conn = LdapServer.getConnection(); final SearchRequest request = new SearchRequest(LdapServer.BASE_DN, SearchScope.SUB, filter); request.setSizeLimit(SIZE_LIMIT); request.setTimeLimitSeconds(TIME_LIMIT_SECONDS); result = conn.search(request); } catch (LDAPException lse) { } finally { if (conn != null) { conn.close(); } } if (result != null) { final ResultCode resultCode = result.getResultCode(); if (resultCode != ResultCode.SUCCESS) { } else { if (l != null) { l.onFinished(result); } } } } public interface OnSearchFinishedListener { public void onFinished(SearchResult ret); } }
注意事项:
1、若包引用无效,在“Order and Export”中将jar文件勾上,clean一下。
2、在manifest中添加<uses-permission android:name="android.permission.INTERNET" />权限。
参考文档: