LDAP 错误代码如何 Map 到 JNDI 异常

LDAP 定义了一组状态代码,这些状态代码随 LDAP 服务器发送的 LDAP 响应一起返回(请参见RFC 2251)。在 JNDI 中,错误条件表示为NamingException的子类的已检查异常。请参见Naming Exceptions部分以获取 JNDI 异常类的概述。

LDAP 服务提供者将从 LDAP 服务器接收的 LDAP 状态代码转换为NamingException的适当子类。下表显示了 LDAP 状态代码与 JNDI 异常之间的 Map。

LDAP 状态码Meaningexception 或行动
0SuccessReport success.
1Operations errorNamingException
2Protocol errorCommunicationException
3超过时间限制。TimeLimitExceededException
4超出大小限制。SizeLimitExceededException
5Compared false.DirContext.search()使用。不生成异常。
6Compared true.DirContext.search()使用。不生成异常。
7不支持身份验证方法。AuthenticationNotSupportedException
8需要强身份验证。AuthenticationNotSupportedException
9返回部分结果。如果环境属性"java\.naming\.referral"设置为"ignore"或错误内容不包含引用,则抛出PartialResultException。否则,请使用内容来构建引荐。
10Referral encountered.如果环境属性"java\.naming\.referral"设置为"ignore",则忽略。如果属性设置为"throw",则抛出ReferralException。如果该属性设置为"follow",那么 LDAP 提供程序将处理引用。如果已超过"java\.naming\.ldap\.referral\.limit"属性,则抛出LimitExceededException
11超出 管理 限制。LimitExceededException
12请求了不可用的关键 extensions。OperationNotSupportedException
13Confidentiality required.AuthenticationNotSupportedException
14SASL 绑定正在进行中。在身份验证期间由 LDAP 提供程序内部使用。
16不存在这样的属性。NoSuchAttributeException
17未定义的属性类型。InvalidAttributeIdentifierException
18Inappropriate matchingInvalidSearchFilterException
19违反约束。InvalidAttributeValueException
20已经使用的属性或值。AttributeInUseException
21属性语法无效。InvalidAttributeValueException
32不存在这样的对象。NameNotFoundException
33Alias problemNamingException
34无效的 DN 语法。InvalidNameException
35是一片叶子。由 LDAP 提供程序使用;通常不会产生异常。
36别名解除引用问题NamingException
48Inappropriate authenticationAuthenticationNotSupportedException
49Invalid credentialsAuthenticationException
50访问权限不足NoPermissionException
51BusyServiceUnavailableException
52UnavailableServiceUnavailableException
53不愿执行OperationNotSupportedException
54Loop detected.NamingException
64Naming violationInvalidNameException
65对象类违反SchemaViolationException
66禁止在非叶子上使用。ContextNotEmptyException
67在 RDN 上不允许。SchemaViolationException
68条目已存在。NameAlreadyBoundException
69禁止修改对象类。SchemaViolationException
71影响多个 DSA。NamingException
80OtherNamingException