У меня есть веб-приложение, где пользователи должны войти в систему. Пароль хранится на сервере LDAP. Вся информация о сервере LDAP хранится на сервере приложений (glassfish) в качестве внешнего ресурса jndi. Поэтому мое приложение ничего не знает о сервере LDAP и получает только LdapContext:
@Resource(name = "ldap/users")
private LdapContext ctx;
В этом контексте легко изменить или прочитать информацию, хранящуюся для пользователей, но как я могу проверить их пароли? Обычно я просто создавал новое соединение для проверки пароля пользователя. Вот так:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");
DirContext ctx = new InitialDirContext(env);
Но так как я не знаю этих параметров, я не могу этого сделать. Итак, как я могу проверить, правильно ли пароль пользователя с моим LdapContext? Пароли хранятся в зашифрованном виде (ssha), поэтому я не могу просто сравнить атрибуты.
Спасибо Раффаэль