查询工具
package com.kittlen.cloud.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ldap.core.DirContextOperations;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.AbstractContextMapper;
import org.springframework.ldap.query.ContainerCriteria;
import org.springframework.ldap.query.LdapQueryBuilder;
import java.util.ArrayList;
import java.util.List;
import static org.springframework.ldap.query.LdapQueryBuilder.query;
@Slf4j
@Component
public class LdapQueryUtil {
public static final String OBJECT_CLASS = "objectClass";
public static final String DISTINGUISHED_NAME="distinguishedName";
public static final String TELEPHONE_NUMBER = "telephoneNumber";
public static final String MAIL = "mail";
public static final String DISPLAY_NAME = "displayName";
public static final String DESCRIPTION = "description";
public static final String USER_ACCOUNT_CONTROL = "userAccountControl";
public static final String ACTIVATE = "512";
public static final String DEACTIVATE = "514";
public static final String USER_PRINCIPAL_NAME = "userPrincipalName";
public static final String SAM_ACCOUNT_NAME = "sAMAccountName";
public static final String UNICODE_PWD = "unicodePwd";
@Autowired
LdapTemplate ldapTemplate;
public List queryBy(String base, List<ldapCondition> conditionList) {
LdapQueryBuilder queryBuilder = query().base(base == null ? "" : base);
if (conditionList != null && !conditionList.isEmpty()) {
ContainerCriteria criteria = queryBuilder.where(conditionList.get(0).getKey()).is(conditionList.get(0).getValue());
if (conditionList.size() > 1) {
for (int i = 1; i < conditionList.size(); i++) {
criteria.and(conditionList.get(0).getKey()).is(conditionList.get(0).getValue());
}
}
}else{
queryBuilder.where(DISTINGUISHED_NAME).isPresent();
}
List<Object> list = ldapTemplate.search(queryBuilder, new AbstractContextMapper<Object>() {
@Override
protected Object doMapFromContext(DirContextOperations dirContextOperations) {
return dirContextOperations.getNameInNamespace();
}
});
return list;
}
public List queryBy(String base, List<ldapCondition> conditionList, ObjectType objectType) {
switch (objectType) {
case USER:
conditionList.addAll(user());
break;
case ORGANIZATION:
conditionList.addAll(org());
break;
}
return queryBy(base, conditionList);
}
private List<ldapCondition> org() {
List<ldapCondition> ldapConditions = new ArrayList<>();
ldapConditions.add(ldapConditionBuild("objectClass", "top"));
ldapConditions.add(ldapConditionBuild("objectClass", "organizationalUnit"));
return ldapConditions;
}
private List<ldapCondition> user() {
List<ldapCondition> ldapConditions = new ArrayList<>();
ldapConditions.add(ldapConditionBuild("objectClass", "top"));
ldapConditions.add(ldapConditionBuild("objectClass", "person"));
ldapConditions.add(ldapConditionBuild("objectClass", "organizationalUnit"));
ldapConditions.add(ldapConditionBuild("objectClass", "user"));
return ldapConditions;
}
public enum ObjectType {
USER, ORGANIZATION
}
public ldapCondition ldapConditionBuild(String key, String value) {
return new ldapCondition(key, value);
}
public class ldapCondition {
private String key;
private String value;
private String getKey() {
return key;
}
private void setKey(String key) {
this.key = key;
}
private String getValue() {
return value;
}
private void setValue(String value) {
this.value = value;
}
private ldapCondition() {
}
private ldapCondition(String key, String value) {
this.key = key;
this.value = value;
}
}
}
使用方法
@Autowired
LdapQueryUtil queryUtil;
public list queryBy(){
List<LdapQueryUtil.ldapCondition> queryList = new ArrayList<>();
queryList.add(queryUtil.ldapConditionBuild(LdapQueryUtil.DISPLAY_NAME,"kittlen"));
List<String> list= queryUtil.queryBy("ou=根组织机构", queryList , LdapQueryUtil.ObjectType.USER);
return list;
}