【发布时间】:2011-02-01 03:22:15
【问题描述】:
我确实有一个网络应用程序,用户必须在其中登录。密码存储在 LDAP 服务器中。有关 LDAP 服务器的所有信息都作为外部 jndi 资源存储在应用程序服务器 (glassfish) 中。所以我的应用程序对 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);
但是由于我不知道 this 参数,所以我不能这样做。那么如何使用我的 LdapContext 检查用户的密码是否正确? 密码是加密存储的(ssha),所以我不能只比较属性。
谢谢 拉斐尔
【问题讨论】:
标签: java authentication web-applications ldap