`
刘公子家的煮妇
  • 浏览: 15019 次
社区版块
存档分类
最新评论

android 平台使用ldap服务

阅读更多

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" />权限。

 

参考文档:

https://www.unboundid.com/products/ldapsdk/

 

 

分享到:
评论

相关推荐

    Lock-Google.Android,使用google和lock for android进行本地登录.zip

    这个项目是基于Auth0平台构建的,Auth0是一个全面的身份验证服务,它允许开发者轻松地集成各种身份验证机制,包括社交身份提供商(如Google、Facebook等)和企业身份提供商(如Active Directory、LDAP、Google Apps...

    android 基于openfire服务器搭建的xmpp即时聊天客户端

    在Android平台上构建基于Openfire服务器的XMPP即时聊天客户端是一个涉及多方面技术的项目。首先,让我们深入了解每个关键组件: 1. **XMPP (Extensible Messaging and Presence Protocol)** - XMPP是一种开放标准...

    curl 全平台静态库,包括 android,ios ,win,mac,linux

    在您提供的压缩包中包含的全平台静态库意味着您将能够为 Android、iOS、Windows、Mac 和 Linux 平台的项目集成 `curl` 功能。 1. **curl 的主要功能**: - 支持多种网络协议:HTTP、HTTPS、FTP、FTPS、TFTP、SMTP...

    vcard2ldap:将 Vcard 文件(由 Android 生成)导入 LDAP 树

    vcard2ldap 该项目旨在将 vcard 导出 (vcf) 作为参数,并填充 LDAP 树。 要求 需要那些 python 包: ...一位法国博主,他提供了一段代码,我用作使用 python-ldap 库的灵感。 我暂时找不到链接,但非常感谢他。

    LDAP2VCard:将 LDAP 数据转换为 VCard 文件的 Python 脚本

    LDAP (Lightweight Directory Access Protocol) 是一种用于存储和检索用户信息的标准协议,广泛应用于企业级的身份管理和目录服务中。VCard,另一方面,是一种通用的电子名片格式,允许用户在各种设备和应用程序...

    Android代码-Lock-Facebook.Android

    Auth0 is an authentication broker that supports social identity providers as well as enterprise identity providers such as Active Directory, LDAP, Google Apps and Salesforce. Lock-Facebook helps you ...

    AD_Test.zip

    ADSI使用LDAP与AD服务器进行通信,执行查询、添加、删除和修改操作。例如,查找特定用户可能涉及到构造一个适当的LDAP查询过滤器,然后使用ADSI接口发送该请求到AD服务器。 3. **用户遍历**:在AD中,遍历用户意味...

    数据安全管理平台 (2).pdf

    这种灵活性支持多平台(如Windows、Linux、iOS、Android、Win Phone)和多层次(业务层、系统层、硬件设备层)的集成,并提供了包括4A(认证、授权、审计、账户)、LDAP、SSO和CA在内的多种接口。 最后,平台强调对...

    华为视讯录播服务器RSE6500白皮书.pdf

    它具有性能强大、使用方便、稳定可靠、易于集成等优点,为各行业用户提供全高清视讯录播服务。 解决方案 华为视讯录播服务器RSE6500提供了一个完善的解决方案,满足各行业用户的需求。它支持单点、点到点和多点...

    android_external_curl

    1. **构建和配置**:Android 项目中添加 curl 库需要将源码编译为适合 Android 平台的静态库或动态库,并且要确保与 Android NDK 和目标 API 级别兼容。 2. **权限管理**:使用网络功能时,需要在 AndroidManifest....

    强大的 FTP 服务器软件 Wing FTP Server Corporate 6.4.0.rar

    Wing FTP Server 是一款专业的跨平台 FTP 服务器端, 支持可伸缩的处理器架构并采用异步IO处理, 所以在速度和效率方面领先于其他同类产品。当然他还非常稳定可靠, 在高负载的情况下也能持续地正常运行, 非常适合企业...

    企业移动互联平台解决方案.pdf

    通过LDAP、证书服务(如CEP/CAP证书)、电子邮件和应用安全服务,MobileIron构建了一个强大的移动安全网络,保护企业免受潜在威胁。 总结来说,企业移动互联平台解决方案是现代企业应对移动化趋势的关键工具,它...

    基于Spring Boot和Spring Cloud实现微服务架构学习(一).pdf

    Spring for Android则是Spring框架在Android平台上的扩展,方便与REST服务交互。 Spring Web Flow管理Web应用的页面流程,使页面跳转逻辑更加清晰。Spring LDAP简化了LDAP目录服务的访问。Spring Session提供了一种...

    DelphiXE2DataSnap开发实战篇_李维

    8. **跨平台支持**:Delphi XE2开始,DataSnap支持创建iOS和Android应用,使得开发者能够构建真正的多平台分布式系统。 书中《Chapter01》至《Chapter08》分别涵盖了DataSnap的基础概念、安装配置、服务器和客户端...

    精典源码之AdXmpp(Openfire+asmack+spark).rar

    Openfire的核心功能包括用户认证、群聊、私聊、文件传输等,并且提供了与企业级应用集成的能力,例如与LDAP目录服务的整合。 【asmack】是一个专门为Android平台优化的XMPP客户端库,它是Smack库的分支。Smack是一...

    基于SpringBoot和SpringCloud实现微服务架构学习(一).pdf

    Spring Web Flow关注Web应用的页面流程管理,Spring LDAP简化了对LDAP目录服务的访问。Spring Session提供了跨集群的会话管理,Spring Web Services专注于SOAP服务的开发。Spring Shell和Spring Roo则提供了命令行...

    省心运维,远程接入混合网络环境解决方案.docx

    3. Web控制台(SaaS端):网络管理员在此平台上管理所有V**网关、网络连接及接入用户,提供自助服务和人工服务。 4. 接入用户端:用户通过Web控制台进行自助服务,如提交工单,获取技术支持。 该解决方案的一大亮点...

    代码审计文档(包括修复方案)

    JNDI (Java Naming and Directory Interface) 是Java平台的标准API,用于访问命名服务。如果程序使用不受信任的数据作为JNDI查找的地址,可能会导致攻击者远程执行任意Java代码。 **3.3.2 危险代码示例** ```java ...

    AppCan开发指南

    3. AppCan平台使用了MAS(Mobile Application Server 移动应用服务器)技术,可能为移动应用提供后端服务和解决方案。 ### 关键技术点: 1. **AppCan SDK**:软件开发工具包,包含了开发AppCan应用所需的库、API等...

Global site tag (gtag.js) - Google Analytics