《docker》docker安装LDAP

1.OpenLDAP简介

LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现,且支持众多系统版本,被广大互联网公司所采用。

 

2.下载镜像 

# docker pull  osixia/openldap:1.2.2

3.启动容器

# docker run -p 389:389 -p 689:689 --name my-openldap \
 --env LDAP_ORGANISATION="my-company" \
--env LDAP_DOMAIN="my-company.com" \
--env LDAP_ADMIN_PASSWORD="123456" \
--detach osixia/openldap:1.2.2

4.测试

# docker ps |grep ldap

通过 LdapAdmin 连接

《docker》docker安装LDAP_第1张图片

  dc=my-company,dc=com  //base

  cn=admin,dc=my-company,dc=com   // 用户名
  123456  // 密码

通过java连接测试

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

import org.springframework.ldap.NamingException;

public class LdapDemo {

	public static void main(String[] args) {
		try {
			connetLDAP();
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (javax.naming.NamingException e) {
			e.printStackTrace();
		}
	}

	
	// 这个是连接我本机的ldap服务。实际使用中需要更改ldapUrl,ldapAccount,ldapPwd 三个参数
	public static LdapContext connetLDAP() throws NamingException, javax.naming.NamingException {
		// 连接Ldap需要的信息
		String ldapFactory = "com.sun.jndi.ldap.LdapCtxFactory";
		String ldapUrl = "ldap://192.168.3.205/dc=my-company,dc=com";// url
		String ldapAccount = "cn=admin,dc=my-company,dc=com"; // 用户名
		String ldapPwd = "123456";// 密码
		Hashtable env = new Hashtable();
		env.put(Context.INITIAL_CONTEXT_FACTORY, ldapFactory);
		// LDAP server
		env.put(Context.PROVIDER_URL, ldapUrl);
		env.put(Context.SECURITY_AUTHENTICATION, "simple");
		env.put(Context.SECURITY_PRINCIPAL, ldapAccount);
		env.put(Context.SECURITY_CREDENTIALS, ldapPwd);
		env.put("java.naming.referral", "follow");
		
		LdapContext ctxTDS = null;
		try {
			ctxTDS = new InitialLdapContext(env, null);
			System.out.println("认证成功");
		} catch (javax.naming.AuthenticationException e) {
			e.printStackTrace();
			System.out.println("认证失败");
		} catch (Exception e) {
			System.out.println("认证出错:");
			e.printStackTrace();
		}
		if (ctxTDS != null) {
			try {
				ctxTDS.close();
			} catch (NamingException e) {
				// ignore
			}
		}
		return ctxTDS;
	}

}

 

你可能感兴趣的:(java,docker)