Как проверить пароль пользователя в ldap с Java с данным LdapContext?

У меня действительно есть веб-приложение, где пользователи должны войти в систему. Пароль хранится в сервере 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), таким образом, я не могу только сравнить атрибуты.

Спасибо Raffael

18
задан Benoît 1 November 2012 в 18:32
поделиться