java商品太多搜索很慢,java – ldap搜索速度很慢

我正在使用JNDI连接到LDAP活动目录,我想搜索名称中包含搜索字符串的用户,因此我的搜索方法如下:

public static List searchContactsByName(

ExtendedDirContext extendedDirContext, String name) {

try {

LdapContext ldapContext = extendedDirContext.getLdapContext();

String searchBaseStr = extendedDirContext.getSearchBase();

String sortKey = LDAPAttributes.NAME;

ldapContext.setRequestControls(new Control[] { new SortControl(

sortKey, Control.CRITICAL) });

SearchControls searchCtls = new SearchControls();

searchCtls.setTimeLimit(1000 * 10);

String returnedAtts[] = { LDAPAttributes.USER_NAME,

LDAPAttributes.NAME };

searchCtls.setReturningAttributes(returnedAtts);

searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

String searchFilter = "(&(ObjectCategory=person)(cn=*" + name

+ "*))";

NamingEnumeration results = ldapContext.search(

searchBaseStr, searchFilter, searchCtls);

List users = new ArrayList(0);

while (results.hasMoreElements()) {

SearchResult sr = (SearchResult) results.next();

Attributes attrs = sr.getAttributes();

LDAPUser user = new LDAPUser();

user.setName(attrs.get(LDAPAttributes.NAME).toString()

.replace("cn: ", ""));

user.setUserName(attrs.get(LDAPAttributes.USER_NAME).toString()

.replace("sAMAccountName: ", ""));

users.add(user);

}

return users;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

以下是我与LDAP的连接方式:

public static ExtendedDirContext connectToLdap(MessageSource messageSource) {

try {

log.debug("connectToLdap");

String providerUrl = messageSource.getMessage("provider.url", null,

null);

String securityPrincipal = messageSource.getMessage(

"security.principal", null, null);

String securityCredentials = messageSource.getMessage(

"security.credentials", null, null);

String searchBase = messageSource.getMessage("search.base", null,

null);

boolean ssl = Boolean.parseBoolean(messageSource.getMessage("ssl",

null, null));

LdapContext ldapContext;

Hashtable ldapEnv = new Hashtable(

11);

ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.ldap.LdapCtxFactory");

ldapEnv.put(Context.PROVIDER_URL, providerUrl);

ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");

ldapEnv.put(Context.SECURITY_PRINCIPAL, securityPrincipal);

ldapEnv.put(Context.SECURITY_CREDENTIALS, securityCredentials);

if (ssl)

ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");

// To get rid of the PartialResultException when using Active

// Directory

ldapEnv.put(Context.REFERRAL, "follow");

ldapContext = new InitialLdapContext(ldapEnv, null);

ExtendedDirContext extendedDirContext = new ExtendedDirContext();

extendedDirContext.setLdapContext(ldapContext);

extendedDirContext.setSearchBase(searchBase);

log.debug("success connection to ldap");

return extendedDirContext;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

LDAP凭据如下:

provider.url=ldap://dc.fabrikam.com:389

security.principal=CN=administrator,CN=Users,DC=fabrikam,DC=com

security.credentials=password

search.base=dc=fabrikam,dc=com

为什么搜索需要花费很多时间来检索数据?我可以做些什么改变来加快搜索速度,因为我在AD中只有285个联系人?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值