- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将 LDAP DirContext.search(...) 设置为忽略引用,但是当我调用 NamingEnumeration.hasMore() 时,我仍然得到一个引用异常。
Exception in thread "main" javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=company,DC=com'
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2846)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2820)
at com.sun.jndi.ldap.LdapNamingEnumeration.getNextBatch(LdapNamingEnumeration.java:129)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:198)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMore(LdapNamingEnumeration.java:171)
我可以告诉 DirContext.search 忽略引荐吗?以便 NamingEnumeration.hasMore() 返回 false 而不是抛出异常?
这是截图:
import javax.naming.*;
import javax.naming.directory.*;
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY, ldapInitContextFactory);
p.setProperty(Context.PROVIDER_URL, ldapURL);
p.setProperty(Context.SECURITY_CREDENTIALS, ldapPassword);
p.setProperty(Context.SECURITY_PRINCIPAL, ldapUser);
p.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
p.setProperty(Context.REFERRAL, "ignore");
DirContext ctx = new InitialDirContext(p);
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchControls.setDerefLinkFlag(false);
NamingEnumeration e = ctx.search(ldapBaseDN, ldapQuery, null, searchControls);
for (; e.hasMore();) {
SearchResult sr = (SearchResult) e.next();
System.out.println("\nSearch Result: " + sr.getName());
}
注意:如果我启用引用,我会在调用 NamingEnumeration.hasMore() 时收到 LdapReferralException 异常。
最佳答案
javax/naming/NamingEnumeration.java
public interface NamingEnumeration<T> extends Enumeration<T> {
public boolean hasMore() throws NamingException;
public T next() throws NamingException;
...
}
java/util/Enumeration.java
public interface Enumeration<E> {
boolean hasMoreElements();
E nextElement();
}
调用 e.hasMoreElements() 而不是 e.hasMore() 可以解决问题。也就是说,当有引用时,它返回 false(而不是抛出异常)。
但是,这不是最佳解决方案,因为我们可能会遗漏其他真正的 NamingException 异常(例如 CommunicationException)。
我仍然想找到正确的方法来告诉 DirContext.search 忽略引用,以便 NamingEnumeration.hasMore() 返回 false 而不是抛出异常。有什么想法吗?
我在 http://download.java.net/openjdk/jdk6/ 下载了 JDK 源代码-> openjdk-6-src-b24-14_nov_2011.tar.gz然而,此源代码与 JDK 二进制文件并不完全对应, 见how to find the exact sources of a JDK1.6 binary (including com.sun.jndi.*)
从下面的这个 JDK 源代码来看,当存在引用时,似乎不可能得到“假”而不是异常。
./jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java
protected void processReturnCode(LdapResult res, Name resolvedName, Object resolvedObj, Name remainName, Hashtable envprops, String fullDN) throws NamingException {
NamingException e;
switch (res.status) {
case LdapClient.LDAP_SUCCESS:
// handle Search continuation references
if (res.referrals != null) {
msg = "Unprocessed Continuation Reference(s)";
if (handleReferrals == LdapClient.LDAP_REF_IGNORE) {
e = new PartialResultException(msg);
break;
}
[...]
}
[...]
throw e;
}
但我还是不确定。
我认为我们可以告诉 DirContext.search 忽略引用是有意义的,以便 NamingEnumeration.hasMore() 返回 false 而不是抛出异常。
有什么想法吗?
关于java- 如何告诉 LDAP DirContext.search(...).hasMore() 返回 false 而不是抛出 PartialResultException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301128/
我正在尝试从LDAP服务器中获取所有用户,并从基础上进行搜索,这是我的代码: public LdapTemplate ldapTemplate() { LdapContextSourc
我们在日志中看到此警告消息 javax.naming.PartialResultException:未处理的延续引用;剩余名称 'dc=global,dc=com' 每当用户登录我们的应用程序时,它就
我们在日志中看到此警告消息 javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining
我的 spring security xml 文件中有以下配置。当我尝试进行身份验证时,我收到以下消息但无法继续。 信息:忽略 PartialResultException 我知道 spring 的文
我基本上是在 Active Directory 中遍历 LDAP 树。 在每个级别我查询 "(objectClass=*)" .当我在根上执行此操作时,例如 "dc=example,dc=com"我得
我目前正在使用 Spring Boot 创建一个新的 Web 应用程序,并开始集成 Spring Security 以进行身份验证。成功后基于Spring Boot LDAP tutorial ,
我正在尝试设置我们的新 Grails 应用程序以通过 LDAP 进行身份验证。从日志中我们可以看到 Acegi 正在绑定(bind)到 LDAP 存储,然后能够找到给定正确凭据的用户,最后开始搜索角色
我已经在 stackoverflow 上阅读了几乎所有关于 Spring/Security/Ldap 和 ActiveDirectory 的内容。即使我找到了有用的提示和提示,我也无法解决我的问题。
我将 LDAP DirContext.search(...) 设置为忽略引用,但是当我调用 NamingEnumeration.hasMore() 时,我仍然得到一个引用异常。 Exception i
我通过 LDAP 为某个应用程序添加用户,使用 spring。 虽然这适用于大多数情况,但在某些情况下,它不起作用...... 检索我使用的用户: public class LdapUserServi
我是一名优秀的程序员,十分优秀!