频道栏目
首页 > 资讯 > 其他 > 正文

基于LDAP的通讯录(阿里云邮)搜索查询的实现-云栖社区-阿里云

19-05-15        来源:[db:作者]  
收藏   我要投稿
为了让用户用好新零售风险防控中心,尽可能给用户提供方便…… 说吧,要什么? 就是阿里云邮箱的那个通讯录,能够查询邮件组的接口。 ![image.png](/uploadfile/Collfiles/20190515/201905151729274767.png) 又是烦阿里云邮的同学,你要的目前没有,HSF

为了让用户用好新零售风险防控中心,尽可能给用户提供方便……

说吧,要什么?

就是阿里云邮箱的那个通讯录,能够查询邮件组的接口。

image.png

又是烦阿里云邮的同学,你要的目前没有,HSF、HTTP也都没有,不过感谢同学还是给我指了个方向,开放的LDAP协议,我的f**k,书到用时方恨少,各种百度谷歌……

概念性的百科知识那些什么的大家请自学哈。

ldap java api
http://directory.apache.org/api/java-api.html

??UnboundID LDAP sdk for java
https://docs.ldap.com/ldap-sdk/docs/index.html

我这次用的是我直接借力UnboundID LDAP去实现的,下面直接把结果和代码晒给大家(springboot工程):

个人邮箱查询结果
个人邮箱查询结果.jpg

邮件组信息查询结果
邮件组信息查询结果.jpg

application.properties

image.png

maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
<dependency>
    <groupId>com.unboundid</groupId>
    <artifactId>unboundid-ldapsdk</artifactId>
</dependency>

Bean

@Component
public class LdapClient {
    private Logger logger = LoggerFactory.getLogger(LdapClient.class);

    @Value("${spring.ldap.ldapBindDN}")
    private String ldapBindDN;
    @Value("${spring.ldap.ldapPassword}")
    private String ldapPassword;
    @Value("${spring.ldap.domain}")
    private String ldapHost;
    @Value("${spring.ldap.port}")
    private int ldapPort;

    private LDAPConnectionPool connectionPool = null;

    @Bean
    public LDAPConnectionPool initLDAPConnectionPool() {
        try {
            SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
            LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory(), ldapHost, ldapPort);
            BindResult bindResult = connection.bind(ldapBindDN, ldapPassword);
            this.connectionPool = new LDAPConnectionPool(connection, 10);
        } catch (LDAPException | GeneralSecurityException e) {
            e.printStackTrace();
        }
        return this.connectionPool;
    }

    public LDAPConnection getConnection() {
        try {
            return connectionPool.getConnection();
        } catch (LDAPException e) {
            e.printStackTrace();
        }
        return null;
    }
}

ServiceImpl

@Service
public class LdapServiceImpl implements LdapService {
    @Value("${spring.ldap.baseDN}")
    private String baseDN;
    @Resource
    private LdapClient ldapClient;

    @Override
    public JSONArray queryCn(String keyword) {
        LDAPConnection connection = ldapClient.getConnection();
        try {
            SearchRequest searchRequest = new SearchRequest(baseDN, SearchScope.SUB,
                Filter.createEqualityFilter("cn", keyword));
            searchRequest.addControl(new SubentriesRequestControl());
            SearchResult searchResult = connection.search(searchRequest);
            if (searchResult.getResultCode() == ResultCode.SUCCESS) {
                JSONArray jsonArray = new JSONArray();
                for (SearchResultEntry entry : searchResult.getSearchEntries()) {
                    JSONObject jsonObject = new JSONObject();
                    entry.getAttributes().forEach((k) -> {
                        jsonObject.put(k.getName(), k.getValue());
                    });
                    jsonArray.add(jsonObject);
                }
                return jsonArray;
            } else {
                return null;
            }
        } catch (LDAPException e) {
            e.printStackTrace();
        }
        return null;
    }
}

谢谢阅读,欢迎大家指正。

相关TAG标签
上一篇:突破Java面试(19) - 分布式缓存的第一个问题-云栖社区-阿里云
下一篇:数据结构二:栈+队列+递归(DataWhale系列)-云栖社区-阿里云
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站