Skip to content

LdapSync信息同步

概述

盘古封装了Ldap同步人员与组织信息的组件pangea-ldap,通过组件中的方法可直接获取Ldap人员与组织信息。

使用方法

1.在工程pom.xml中添加依赖

  • 注意:因ldap方相关方法调整,要求依赖版本必须>=2.2
html
<!-- 盘古对象存储模块 -->
<dependency>
    <groupId>com.hisense.pangea</groupId>
    <artifactId>pangea-ldap</artifactId>
</dependency>

2.配置文件

在yml配置文件添加以下作为默认配置

  • 注意:
  1. 应用系统提供系统名称、IP、LDAP组织及用户所需字段给统一认证平台管理员
  2. 管理员分配appSecretId、appSecretKey

测试环境

pangea:
  ldap: #ldap相关配置
    token-url: https://${LDAP_TOKEN_URL:ssodev.hisense.com}/sso-ws/tokenRestfulApi/getLdapQueryToken
    eid-class: ldap
    user: 
      #Ldap用户id
      id: ${LDAP_USER_APPSECRET_ID:xxxxxxxxxxxxxxxxxxx}
      #Ldap用户key
      key: ${LDAP_USER_APPSECRET_KEY:xxxxxxxxxxxxxxxxxxxxx}
      #Ldap用户webservices地址
      webservice: ${LDAP_WEB_SERVICE:http://idmdev.hisense.com}/esc-ws/services/ldapQueryInfoParams?wsdl
    dept: 
      #Ldap组织id
      id: ${LDAP_DEPT_APPSECRET_ID:xxxxxxxxxxxxxxxxx}
      #Ldap组织key
      key: ${LDAP_DEPT_APPSECRET_KEY:xxxxxxxxxxxxxxxxxxxxx}
      #Ldap组织webservices地址
      webservice: ${LDAP_DEPT_WEBSERVICE:http://idmdev.hisense.com}/esc-ws/services/ldapQueryInfoParams?wsdl

生产环境

pangea:
  ldap: #ldap相关配置
    token-url: https://${LDAP_TOKEN_URL:sso.hisense.com}/sso-ws/tokenRestfulApi/getLdapQueryToken
    eid-class: ldap
    user: 
      #Ldap用户id
      id: ${LDAP_USER_APPSECRET_ID:xxxxxxxxxxxxxxxxxxx}
      #Ldap用户key
      key: ${LDAP_USER_APPSECRET_KEY:xxxxxxxxxxxxxxxxxxxxx}
      #Ldap用户webservices地址
      webservice: ${LDAP_WEB_SERVICE:http://ldapapi.hisense.com}/esc-ws/services/ldapQueryInfoParams?wsdl
    dept: 
      #Ldap组织id
      id: ${LDAP_DEPT_APPSECRET_ID:xxxxxxxxxxxxxxxxx}
      #Ldap组织key
      key: ${LDAP_DEPT_APPSECRET_KEY:xxxxxxxxxxxxxxxxxxxxx}
      #Ldap组织webservices地址
      webservice: ${LDAP_DEPT_WEBSERVICE:http://ldapapi.hisense.com}/esc-ws/services/ldapQueryInfoParams?wsdl

3.代码使用

做好以上两步配置后,可直接在代码中使用相关方法。

常用方法举例

java
        private final PangeaLdapProperties ldapProperties;
    
       /**
         * 根据查询条件查询用户信息
         * @param params  查询条件,例:uid=zhangsan,mail=zhangsan@hisense.com。可为空。
         * @return
         */
       @GetMapping("getLdapInfoByParams")
        public List<LdapUserInfoDTO> getLdapInfoByParams(String params) {
            List<LdapUserInfoDTO> ldapUserInfoDTOList = LdapService.getLdapInfoByParams(ldapProperties.getTokenUrl(), ldapProperties.getUser().getWebservice(), ldapProperties.getUser().getId(), ldapProperties.getUser().getKey(), "");
            return ldapUserInfoDTOList;
        }
        
        /**
         * 查询LDAP组织
         * @param o  查询条件,例:流程IT与数据管理部。可为空。不允许为空。
         * @return ldap组织
         */
        @GetMapping("getLdapDept")
        public List<LdapDeptInfoDTO> getLdapDept(String o) {
            List<LdapDeptInfoDTO> ldapDeptInfoDTOS = LdapService.getLdapDept(ldapProperties.getTokenUrl(), ldapProperties.getDept().getWebservice(), ldapProperties.getDept().getId(), ldapProperties.getDept().getKey(), null);
            return ldapDeptInfoDTOS;
        }
    
    /**
         * 根据ldap账号访问ldap换取账号信息
         * @param ldapName  需查询的ldap账号,例:zhangsan。不允许为空。
         * @param isFuzzy   是否模糊查询 true/是, false/否
         * @return ldap账号信息
         */
        @GetMapping("getLdapInfoByUid")
        public List<LdapUserInfoDTO> getLdapInfoByUid(String ldapName, boolean isFuzzy) {
            List<LdapUserInfoDTO> ldapUserInfoDTOList = LdapService.getLdapInfoByUid(ldapProperties.getTokenUrl(), ldapProperties.getUser().getWebservice(), ldapProperties.getUser().getId(), ldapProperties.getUser().getKey(), ldapName, false);
            return ldapUserInfoDTOList;
        }
        
        
    
        /**
         * 根据部门查询该部门下的所有用户
         *
         * @param orgName 组织名称,例:流程IT与数据管理部。
         * @return 查询结果
         */
        @GetMapping("getLdapInfoByOu")
        public List<LdapUserInfoDTO> getLdapInfoByOu(String tokenUrl, String webService, String appid, String appSecret, String orgName) {
            List<LdapUserInfoDTO> ldapUserInfoDTOList = LdapService.getLdapInfoByUid(ldapProperties.getTokenUrl(), ldapProperties.getUser().getWebservice(), ldapProperties.getUser().getId(), ldapProperties.getUser().getKey(), orgName);
            return ldapUserInfos;
        }

示例

1.获得全量Ldap用户信息

2.获得全量Ldap组织信息

注意事项 :已使用pangea-ldap组件更新ldap组织信息失败问题解决

  • 因ldap方相关方法调整,ldapQueryInfo被废弃,导致已使用pangea-ldap组件获取Ldap组织信息的方法调用失败,使得项目组同步ldap最新组织信息失败。

解决方案:

  1. 确定依赖的pangea-ldap版本>=2.2

  2. 确认ldap配置信息中组织webservices地址更改为,如下:

    生产:http://ldapapi.hisense.com/esc-ws/services/ldapQueryInfoParams?wsdl

    测试:http://idmdev.hisense.com/esc-ws/services/ldapQueryInfoParams?wsdl