精华内容
下载资源
问答
  • ldap样例数据文件

    2019-12-02 14:22:17
    ldap样例数据,可用来导入。
  • LDAP查询数据(JAVA)

    千次阅读 2020-08-30 10:57:05
    公司让从ldap中查询对应得数据,去验证用户得信息,以前没接触过ldap,找了找网上其他人写得也不太全,经过几天得研究整理最后完成了,特写下这个方便自己以后来看 提示:以下是本篇文章正文内容,下面案例可供参考 ...

     

    文章目录

     


    前言

    公司让从ldap中查询对应得数据,去验证用户得信息,以前没接触过ldap,找了找网上其他人写得也不太全,经过几天得研究整理最后完成了,特写下这个方便自己以后来看


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、LDAP是什么?

    • 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。
    • 首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。
      那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。
    • 而我们通常说的LDAP是指运行这个数据库的服务器。
    • 可以简单理解AD =LDAP服务器+LDAP应用。

    那LDAP这种数据库有什么特殊的呢?

    • 我们知道,像MySQL数据库,数据都是按记录一条条记录存在表中。而LDAP数据库,是树结构的,数据存储在叶子节点上。 
    总结一下LDAP树形数据库如下:
    dn :一条记录的详细位置
    dc :一条记录所属区域    (哪一颗树)
    ou :一条记录所属组织    (哪一个分支)
    cn/uid:一条记录的名字/ID   (哪一个苹果名字)
    LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。

    二、使用JAVA连接LDAP

    1.通过自定义工具类连接(已成功连接)

    代码如下(示例):

    
     import lombok.extern.slf4j.Slf4j;
    
    import javax.naming.AuthenticationException;
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.ldap.Control;
    import javax.naming.ldap.InitialLdapContext;
    import javax.naming.ldap.LdapContext;
    import java.util.Hashtable;
    
    /**
      * @Date 2020/8/28 16:06
     */
    @Slf4j
    public class LdapStore {
    
        private static final String TAG = "----- LdapStore -----";
    
        private static LdapContext ctx = null;
        private static Control[] connCtls = null;
    
     
        /**** 定义LDAP的基本连接信息 ******/
        // LDAP的连接地址(ldap://ip:port/)port默认为389
        private static String URL = "";
        // LDAP的根DN
        private static String BASEDN = "DC=?,DC=?,DC=?";
        // LDAP的连接账号(身份认证管理平台添加的应用账号,应用账号格式:uid=?,ou=?,dc=????)
    //    private static String PRINCIPAL = "uid=?,ou=?,dc=?,dc=?,dc=?";
        private static String PRINCIPAL = "";
        // LDAP的连接账号的密码(身份认证管理平台添加的应用账号的密码)
        private static String PASSWORD = "";
    
        public void getCtx() {
            if(ctx!=null){
                return;
            }
            log.info("InitialLdapContext ");
            Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, URL  + BASEDN );
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL );
            env.put(Context.SECURITY_CREDENTIALS, PASSWORD );
    
            try {
                // 链接ldap
                ctx = new InitialLdapContext(env, connCtls);
            } catch (AuthenticationException e) {
                log.error(TAG + "Authentication faild: " + e.toString());
                e.printStackTrace();
                throw new XxlSsoException("连接ldap异常,请联系管理员");
            } catch (Exception e) {
                log.error(TAG + "Something wrong while authenticating: " + e.toString());
                e.printStackTrace();
                throw new XxlSsoException("连接ldap异常,请联系管理员");
            }
        }
    
        public void closeCtx() {
            try {
                if (ctx != null){
                    //关闭连接
                    ctx.close();
                    ctx = null;
                    //重新获取连接
                    getCtx();
                }
            } catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
    
        public String getUserDN(String uid, UserResponse userResponse) {
            String userDN = "";
            SearchControls constraints = new SearchControls();
            try {
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
                String[] attrPersonArray = {"cn", "mail"};
                constraints.setReturningAttributes(attrPersonArray);
                //因为我是通过mailNickname 来查询得,根据自己得需要来更改
                NamingEnumeration<SearchResult> en = ctx.search("", "mailNickname=" + uid, constraints);
                if (en == null) {
                    log.error(TAG + "Have no NamingEnumeration.");
                }
                if (!en.hasMoreElements()) {
                    log.error(TAG + "Have no element.");
                }
                while (en != null && en.hasMoreElements()) {
                    SearchResult result = en.next();
                    userDN += result.getName();
                    userDN += "," + properties.getBASEDN();
                    NamingEnumeration<? extends Attribute> attrs = result.getAttributes().getAll();
                    while (attrs.hasMore()) {
                        Attribute attr = attrs.next();
                        if (attr.getID().equals("cn")) {
                            userResponse.setAccountName((String) attr.get());
                        }
                        if (attr.getID().equals("mail")) {
                            userResponse.setMail((String) attr.get());
                        }
                    }
                }
            } catch (Exception e) {
                log.error(TAG + "Exception in search():" + e);
                e.printStackTrace();
                closeCtx();
                throw new XxlSsoException("连接ldap异常,请联系管理员");
            }
    
            return userDN;
        }
    
    
        // 校验用户名密码的方法
        public UserResponse authenticate(String usr, String pwd) {
            UserResponse userResponse = new UserResponse();
            boolean valide = false;
            getCtx();
            String userDN = getUserDN(usr, userResponse);
            if ("".equals(userDN) || userDN == null) {
                userResponse.setValid(false);
                return userResponse;
            }
            try {
                ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
                ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, pwd);
                ctx.reconnect(connCtls);
                valide = true;
            } catch (AuthenticationException e) {
                log.error(TAG + userDN + " is not authenticated");
                log.error(TAG + e.toString());
                closeCtx();
                valide = false;
            } catch (NamingException e) {
                log.error(TAG + userDN + " is not authenticated");
                closeCtx();
                valide = false;
            }
            userResponse.setValid(valide);
            return userResponse;
        }
    
    无需引入什么包
    • 2.使用官方提供得方式


    通过Spring 提供得包来处理(未成功,待研究)

      需要引入包

     

    <dependency>
        <groupId>org.springframework.ldap</groupId>
        <artifactId>spring-ldap-core</artifactId>
        <version>2.3.2.RELEASE</version>
    </dependency>
     以下为找得其他人写得连接
     
    /**
      * @Date 2020/8/28 19:50
     */
    
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.ldap.core.DirContextOperations;
    import org.springframework.ldap.core.LdapTemplate;
    import org.springframework.ldap.core.support.LdapContextSource;
    import org.springframework.ldap.filter.AndFilter;
    import org.springframework.ldap.filter.EqualsFilter;
    import org.springframework.ldap.support.LdapUtils;
    
    import javax.naming.directory.DirContext;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * LDAP 的自动配置类
     * <p>
     * 完成连接 及LdapTemplate生成
     */
    @Configuration
    @Data
    public class LdapConfiguration {
    
    
        private LdapTemplate ldapTemplate;
        @Value("${ldap.url}")
        private String URL;
    
        @Value("${ldap.BASEDN}")
        private String BASEDN;
    
        @Value("${ldap.PRINCIPAL}")
        private String PRINCIPAL;
    
        @Value("${ldap.PASSWORD}")
        private String PASSWORD;
    
        @Bean
        public LdapContextSource contextSource() {
            LdapContextSource contextSource = new LdapContextSource();
            Map<String, Object> config = new HashMap();
            System.out.println("init " + URL);
    
            contextSource.setUrl(URL);
            contextSource.setBase(BASEDN);
            contextSource.setUserDn(PRINCIPAL);
            contextSource.setPassword(PASSWORD);
            //  解决 乱码 的关键一句
            config.put("java.naming.ldap.attributes.binary", "objectGUID");
            contextSource.setPooled(true);
            contextSource.setBaseEnvironmentProperties(config);
            return contextSource;
        }
    
        @Bean
        public LdapTemplate ldapTemplate() {
            if (null == ldapTemplate)
                ldapTemplate = new LdapTemplate(contextSource());
            return ldapTemplate;
        }
    
    
    
    }
    官网文档:https://docs.spring.io/spring-ldap/docs/2.3.2.RELEASE/reference/#basic-authentication墙裂推荐一个好用得连接ldap得ide
    链接:https://pan.baidu.com/s/1_I6ThYLTpSYBx3hbz6iEZg 
    提取码:ade8

     

    总结

    因为ldap得文章也不是很多,有的例子给得有问题,如果您有幸看到这个篇,请鼓励下作者点个赞在走,有问题咨询直接评论就是

    展开全文
  • 最近花了几天时间研究了下ldap服务器,并且把数据同步到mysql数据库中,下面是写的一个导出工具类package com.util; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming....

    最近花了几天时间研究了下ldap服务器,并且把数据同步到mysql数据库中,下面是写的一个导出工具类

    package com.util;
    
    
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.Attributes;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.ldap.InitialLdapContext;
    import javax.naming.ldap.LdapContext;
    import javax.naming.ldap.LdapName;
    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;
    import java.util.Map;
    
    import static java.util.Objects.nonNull;
    
    /**
     * Created by ccl on 2018/6/20.
     */
    public class LdapUtils {
        public static Map<String,String> organizaCNName = new Hashtable<>();//组织机构中文名称
    
        //protected final static Logger logger = LoggerFactory.getLogger(LdapUtils.class);
        private static LdapContext dc = null;
        private static final String LDAP_URL = "ldap://***:389";// LDAP访问地址
        private static final String root = "dc=*,dc=com";// LDAP的根节点的DC
        private static final String ADMINUSERNAME = "";  // 用户名,就是dn,例如(uid=student1,ou=class1,ou=school1,dc=*,dc=com)
        private static final String ADMINPASSWORD = "";// 密码
    
        //base   :根节点"dc=*,dc=com"
        //scope  :搜索范围,分为"base"(本节点),"one"(单层),""(遍历)
        //filter :指定子节点(格式为"(objectclass=*)",*是指全部,也可以制定具体类型 比如objectClass=organizationalUnit,查询的是部门信息
        //查询用户信息
        private static final String SEARCH_USER_BASE ="ou=class1,dc=*,dc=com";
        private static final String SEARCH_USER_SCOPE ="";//为空,则遍历当前选的条目里满足filter的所有类型的信息
        private static final String SEARCH_USER_FILTER ="(objectClass=organizationalUnit)";//要加括号,查询属性名为objectClass,值为organizationalUnit
    
        /**
         * 初始化连接
         */
        public static void init() {
            Hashtable env = new Hashtable();
    
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, LDAP_URL);
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, ADMINUSERNAME);
            env.put(Context.SECURITY_CREDENTIALS, ADMINPASSWORD);
            try {
                dc = new InitialLdapContext(env,null);// 初始化上下文
                //logger.info("初始化成功");
            } catch (javax.naming.AuthenticationException e) {
                //logger.error("初始化失败:"+e.getMessage());
            } catch (Exception e) {
                //logger.error("初始化出错:"+e.getMessage());
            }
        }
    
        /**
         * 关闭Ldap连接
         */
        public static void close() {
            if (dc != null) {
                try {
                    dc.close();
                } catch (NamingException e) {
                    //logger.error("Ldap服务关闭异常:"+e.getMessage());
                }
            }
        }
    
    
        /**
         *查询ldat服务器获取所有用户数据
         */
        public static List<LdaptUserResult> searchInformation() {
    
            SearchControls sc = new SearchControls();
            if (SEARCH_USER_SCOPE.equals("base")) {
                sc.setSearchScope(SearchControls.OBJECT_SCOPE);
            } else if (SEARCH_USER_SCOPE.equals("one")) {
                sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
            } else {
                sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
            }
            NamingEnumeration ne = null;
            LdaptUserResult ldaptUserResult = null;
            List<LdaptUserResult> list = new ArrayList<LdaptUserResult>();
            try {
                ne = dc.search(new LdapName(SEARCH_USER_BASE), SEARCH_USER_FILTER, sc);
                while (ne.hasMore()) {
                    ldaptUserResult = new LdaptUserResult();
                    SearchResult sr = (SearchResult) ne.next();
    
                    String name = sr.getNameInNamespace();//这里的name可以获取当前条目的全路径
    
    
    
                    Attributes at = sr.getAttributes();
                    NamingEnumeration ane = at.getAll();
                    while (ane.hasMore()) {
                        Attribute attr = (Attribute) ane.next();
                        String attrType = attr.getID();//attrType对应的是属性名
                        NamingEnumeration values = attr.getAll();
    
                        // Another NamingEnumeration object, this time
                        // to iterate through attribute values.
                        while (values.hasMore()) {
                            Object oneVal = values.nextElement();
                            //组装成对象
                            combinationUser(ldaptUserResult,attrType,oneVal);
                        }
                    }
                    list.add(ldaptUserResult);
                }
            } catch (Exception nex) {
                //logger.error("查询ldpat用户数据错误:"+nex.getMessage());
    
            }
    
            return list;
        }
    
    
    
        private static void combinationUser(LdaptUserResult ldaptUserResult, String attrType,Object oneVal) {
            if(nonNull(oneVal)){
                switch (attrType){
                    case "displayName":
                        ldaptUserResult.setName((String) oneVal);
                        break;
                    case "uid":
                        ldaptUserResult.setUsername((String) oneVal);
                        break;
                    case "mail":
                        ldaptUserResult.setEmail((String) oneVal);
                        break;
                    default:
                }
            }
        }
    
    
        public static void main(String[] args) {
            LdapUtils.init();
            LdapUtils.searchInformation();
            LdapUtils.close();
        }
    }
    


    展开全文
  • 简单的LDAP搜索 搜索LDAP。 没有什么花哨。 客户端上的薄薄的,有承诺的包装器。 安装 $ npm install --save simple-ldap-search 用法 import SimpleLDAP from 'simple-ldap-search' ; const config = { url : '...
  • 读入数据 总结 前言 接上一个文章,因为上一个是直接连接的没有使用spring提供的JAR包,导致实际使用中总会有连接超时异常,测试给提了bug,刚开始准备自己写一个连接池,后来尝试了下算了,不重复造轮子...

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

     

     


    前言

     

    接上一个文章,因为上一个是直接连接的没有使用spring提供的JAR包,导致实际使用中总会有连接超时异常,测试给提了bug,刚开始准备自己写一个连接池,后来尝试了下算了,不重复造轮子了,自己写也不一定写的好,因此不得不去研究下LDAP连接池的

    一、连接池是什么?

    连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

    都应该使用过数据连接池,例如druid,c3p0 大致原理差不多,刚开始使用还是麻烦的,网上的文档什么信息都不全,找了好久自己研究才搞明白

    二、使用步骤

    1.引入库

    版本就是随着springBoot来吧
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-ldap</artifactId>
    </dependency>

    2.配置连接池数据源

     

    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.ldap.LdapProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    import org.springframework.ldap.core.LdapTemplate;
    import org.springframework.ldap.core.support.LdapContextSource;
    
    import java.util.Collections;
    
    /**
     * 配置AD数据源
     */
    @Configuration
    @EnableConfigurationProperties(LdapProperties.class)
    public class LdapConfig {
        @Autowired
        private LdapProperties properties;
        @Autowired
        private Environment environment;
    
        @Bean
        public LdapContextSource ldapContextSource() {
            LdapContextSource source = new LdapContextSource();
            source.setUserDn(properties.getUsername());
            source.setPassword(properties.getPassword());
            source.setBase(properties.getBase());
            source.setUrls(properties.determineUrls(environment));
            source.setBaseEnvironmentProperties(Collections.unmodifiableMap(properties.getBaseEnvironment()));
            return source;
        }
    
        @Bean
        public LdapTemplate ldapTemplate() {
            return new LdapTemplate(ldapContextSource());
        }
    }

    很多配置官网都有,我就是使用了默认的配置

    官网地址:https://docs.spring.io/spring-ldap/docs/2.3.2.RELEASE/reference/#basic-authentication

    3.实际使用

    使用起来也挺简单的,就当作一个service来用,把ldapTemplate注入进来

    public class LdapServiceImpl implements LdapService {
    
        private static final String TAG = "----- LdapServiceImpl -----";
    
        @Autowired
        private LdapTemplate ldapTemplate;
    
        /**
         * @param password 账号
         * @param password 密码
         */
        public UserResponse ldapAuth(String username, String password) {
      
                //查询账号
                Person person = ldapTemplate.findOne(query().base("OU=XXX").where("XXXX").is(CommonUtil.escapeQueryChars(username)), Person.class);
                //加入过滤条件
                EqualsFilter filter = new EqualsFilter("XXXX", XXXX);
                //验证密码
                Boolean result = ldapTemplate.authenticate("OU=XXXX", filter.toString(), password);
    
              
    
                return new UserResponse(person.getCn(), person.getMail(), username);
    
        }

    Ps: CommonUtil 这个有ldap注入的问题,我也是安全组给提了bug才了解的,希望不知道的了解下,我解决的方式不是最好的,但是也是可以用的

     public static String escapeQueryChars(String s) {
            if (StringUtils.isBlank(s)) {
                return s;
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                // These characters are part of the query syntax and must be escaped
                if (c == '\\' || c == '+' || c == '!'|| c == ','|| c == ';'
                        || c == ':' || c == '^' || c == '[' || c == ']'|| c == ','
                        || c == '{' || c == '}' || c == '~' || c == '?'|| c == '>'
                        || c == '|' || c == '&' || c == ';' || c == '.'|| c == '<'
                        || c == '$' || Character.isWhitespace(c)) {
                    sb.append('\\').append(c);
                } else if (c == '(' || c == ')' || c == '/' || c == '*' || c == '\"') {
                    sb.append((byte) c);
                }else {
                    sb.append(c);
                }
            }
            String str = sb.toString();
            if (str.contains("NUL")) {
                str = str.replace("NUL", "0");
            }
            return str;
        }

     

     


    总结

     如果有幸看到文章并且帮助您了,帮忙点个赞,不白分享

    展开全文
  • 数据仓库之LDAP

    2021-03-02 03:48:35
    简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大。LDAP其实是...
  • LDAP数据结构

    2011-10-18 22:41:29
    LDAP数据结构 标准键 值 描述 o gbit 组织 organization的单词首字母 ou db center 组织单位 organization unit的两个单词首字母 l amoy fujian china 城市/所在地(location) uid ...

    LDAP的数据结构

    标准键描述
    ogbit组织 organization的单词首字母
    oudb center 组织单位 organization unit的两个单词首字母
    lamoy fujian china城市/所在地(location)
    uidlinzq用户名。应该是用到验证的用户名,与我们在数据库中用于登陆的用户名一样。
    czh-cn国家(country)
    cn林忠青用户全名
    sn用户名中的姓
    stavailable状态,用户的使用状态(status)
    givenName忠青用户名中的名字
    employeeNumberA445员工编号
    employeeType 员工类型
    description 描述
    maillinzq@gbit.com邮箱地址
    telephoneNumber13799265585电话
    facsimileTelephoneNumber 传真号码
    mobile 移动电话号码
    pager 寻呼机号码
    photo 相片(应该是存放相片的字节流)
    postalAddress 邮政地址
    postalCode 邮政编码
    homePhone 住宅电话号码
    roomNumber 门牌号
    preferredLanguagezh-cn母语
    street 街道地址
    entryDNcn=林忠青,dc=example,dc=com唯一标识
    entryUUIDb2d07f19-0214-425b-a652-409a84ed9ac4全局ID值
    userPassworde1NTSEF9aXUwSlNPWEEzejRBQlhOemd
    0Q3NDaXdENUh1cmo4Y2labTBzeWc9PQ==
    用户密码
    展开全文
  • ldap主备搭建

    2019-08-06 13:44:42
    172.20.101.110 1234567890 {SSHA}0czCEpE4oFSN5Xunh4nkUOwsNzlmPr0L3 备 172.20.101.111 1234567890 {SSHA}GLwXk3B4ZKD0RzIwrchi119Kv2ZhH9T+1 环境搭建 一、准备环境 1、关闭selinux firefalld ...
  • java链接ldap读取数据,并写入数据到MySQL数据库: package mysql; public class MysqlInfo { /*public static String url = "jdbc:mysql://10.122.23.164:3306/lenovo_upp?rewriteBatchedStatements=true&...
  • Oracle向LDAP同步数据,事先要先解决ACL的问题,及LDAP协议中账号密码端口创建,根目录创建,对应导入数组的定义,等工作,才能成功执行以下脚本,不然均会报错。为了保证LDAP的读取效率,在配置文件中,还需要定义...
  • Ldap数据导出到文件

    2011-06-30 10:58:17
    ldap数据的某个节点下的所有数据进行导出到文件
  • 在前面的文章中,我们已经多次使用ldapsearch进行信息的查询,但都是一条命令查询出所有内容,这篇文章对于ldapsearch的常用方式进行进一步的解释和说明。
  • 声明: 1、解决办法是从一个英文网站找到的,现在找不到了,不是我... 前一阵子需要做一个从第三方ldap同步用户到本地系统的功能,本地后台服务是java写的,考虑到数据同步的一致性,使用ldap获取的数据中的的obje
  • 研究了利用LDAP来表示和访问XML数据的方法,在LDAP上建立一映射层,用来实现LDAP与XML数据之间的转换、查询,提高了对...XML文档可以通过XMLLDAP模型被转换为LDAP数据,能够利用静态的LDAP模式来存储动态的XML文档。
  • 轻量级目录访问协议(LDAP) 允许你拥有一个服务器+从服务器设置,拥有一旦发生故障时的容错功能或者分散工作量的功能。这拥有明显的优势。但是,它也隐藏了服务器的一些问题。如果你的服务器关机,从服务器工作...
  • 可以输入中文属性值 可以输入中文属性值 可以输入中文属性值可以输入中文属性值可以输入中文属性值 可以输入中文属性值 可以输入中文属性值
  • LDAP2V卡 将 LDAP 数据转换为 VCard 文件的 Python 脚本
  • 通信协议_LDAP_数据操作

    千次阅读 2018-09-21 10:43:49
    基于Linux命令行,软件为OpenLDAP; 插入语句:ldapadd -x -h localhost -p 6005 -w password -D ... 查询语句:ldapsearch -x -LLL -h localhost -p 6005 -w password -D cn=linuxUserName -b dc=dc...
  • ldap获取数据中的objectGUID乱码问题

    千次阅读 2015-11-17 13:46:36
    声明:1、解决办法是从一个英文网站找到的,现在找不到了,不是我自己解决的2、连接ldap的方法,也是从网上拷贝...本地后台服务是java写的,考虑到数据同步的一致性,使用ldap获取的数据中的的objectGUID作为两个系...
  • 基于LDAP的XML数据访问

    2018-08-23 12:20:07
    ldap通讯录和XML通讯录相互查询和同步,支持不同组件协议的查询和认证
  • LDAP数据的移植

    千次阅读 2009-09-03 17:27:00
    the Way to Export and Import LDAP Data1、从旧LDAP数据库导出数据$sudo slapcat -v -l aa.ldif2、在新LDAP数据库中进行初始化初始化请使用dpkg-reconfigure!之前我使用 $sudo rm –fr /var/lib/ldap/*然后直接...
  • LDAP

    2019-06-28 16:28:54
    3、LDAP提供了静态数据的快速查询方式。 4、Client/server模型,Server 用于存储数据,Client提供操作目录信息树的工具。 5、LDAP是一种开放Internet标准,LDAP协议是跨平台的Interent协议。 1.什...
  • 实现LDAP主主复制

    2010-12-21 17:13:58
    现有两台机器,分别是ldap-1.example.com和ldap-2.example.com, 已经... 现按照下面的步骤实现在两个实例间的主主复制,即修改任何一个实例中的数据,另一个实例中的数据同样会被修改。 以下命令在机器ldap-1...
  • 英文原文:...Spring Data for Spring LDAP是Spring Data项目的一部分,旨在为新的Spring LDAP提供熟悉且一致的Repository抽象。 介绍 Spring Data LDAP项目在Spring L...
  • ldap组织结构数据同步到mysql 例子,将以下ldap人员结构图同步到mysql表中 mysql部门表和人员表,建表脚本,以及ldap服务连接信息 DROP TABLE IF EXISTS `sys_department`; CREATE TABLE `sys_department` ( ...
  • NULL 博文链接:https://xingba.iteye.com/blog/320031
  • 目录一、配置Master-121.1、环境说明21.2、配置Master -1 slapd.conf文件21.3、初始化数据库2二、配置Master-222.1、配置Master -2 slapd.conf文件22.2、初始化数据库2三、同步数据日志清理23.1、LDAP数据存放.....
  • LDAP数据访问优化的研究,关志勇,龙毅宏,本文分析了在LDAP服务器中,提高数据访问速度的必要性。介绍基于hash表的内存缓存的设计与实现,分析了加载缓存后查询速度的测试结�

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,332
精华内容 20,532
关键字:

ldap主数据