UnboundID LDAP DIGEST-MD5 причина привязки NPE
Я получаю следующую ошибку при попытке связать с использованием DIGEST-MD5 против ApacheDS с помощью UnboundID LDAP SDK. Я уже тестировал соединение, используя простое связывание с UnboundID и Apache Shiro, поэтому ApacheDS работает.
LDAPException(resultCode=82 (local error), errorMessage='Unable to create a subsequent DIGEST-MD5 SASL request: NullPointerException(trace='processChallenge(DigestMD5Client.java:339) / evaluateChallenge(DigestMD5Client.java:207) / processSASLBind(SASLHelper.java:149) / process(DIGESTMD5BindRequest.java:406) / bind(LDAPConnection.java:1837) / main(UnboundDemo.java:38)', revision=15579)')
at com.unboundid.ldap.sdk.SASLHelper.processSASLBind(SASLHelper.java:154)
at com.unboundid.ldap.sdk.DIGESTMD5BindRequest.process(DIGESTMD5BindRequest.java:406)
at com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:1837)
at com.mizar.ldap.UnboundDemo.main(UnboundDemo.java:38)
Caused by: java.lang.NullPointerException
at com.sun.security.sasl.digest.DigestMD5Client.processChallenge(DigestMD5Client.java:339)
at com.sun.security.sasl.digest.DigestMD5Client.evaluateChallenge(DigestMD5Client.java:207)
at com.unboundid.ldap.sdk.SASLHelper.processSASLBind(SASLHelper.java:149)
... 3 more
Я последовал примеру в JavaDoc и мой пример тестового кода выглядит так:
LDAPConnection conn;
BindResult bindResult;
DIGESTMD5BindRequest mdBind;
try {
conn = new LDAPConnection("1.1.1.1",389);
mdBind = new DIGESTMD5BindRequest("dn:uid=someuser,ou=dev,dc=blah,dc=com", "test");
bindResult = conn.bind(mdBind);
System.out.println("MD5 bind success!");
}
catch (Exception e) {
e.printStackTrace();
}
1 ответ
Похоже, это исключение происходит из кода JDK для обработки обработки SASL, а не из самого LDAP SDK. Основанный на версии источника для класса com.sun.security.sasl.digest.DigestMD5Client, который мне удалось найти ( http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/com/sun/security/sasl/digest/DigestMD5Client.java), похоже, это проблема, в которой требуется область для завершения обработки связывания, но ни одна из них не была доступна. Если вы переключитесь на использование одного из конструкторов DIGESTMD5BindRequest, который принимает область, и задаете соответствующее значение для области (которое вам может потребоваться найти у администратора каталога), то вы сможете успешно выполнить привязку.
Я только что внес изменение в поддержку LDAP SDK для механизмов CRAM-MD5, DIGEST-MD5 и GSSAPI SASL, так что, надеюсь, он даст более полезное сообщение, если в будущем возникнет такая проблема.