我正在使用 IBM Worklight 开发一个移动应用程序,但我遇到了一些身份验证问题。我正在使用定制验证器和定制登录模块来针对 Tivoli 目录服务器验证用户凭证。
这是我正在使用的代码,当我在 Worklight Studio 中像 java 应用程序(具有 main 方法的类)一样运行它时,它可以工作,但是当我像 Worklight 应用程序(在我的自定义登录模块的登录功能中)一样运行它时返回一个命名异常并打印 jndi.20
public boolean login(Map<String, Object> authenticationData) {
logger.info("SmaciLoginModule :: login");
try{
USERNAME = (String) authenticationData.get("username");
PASSWORD = (String) authenticationData.get("password");
String solicuser="uid="+USERNAME+",cn=users,dc=smaci,dc=ibm";
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:1389/");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, solicuser);
env.put(Context.SECURITY_CREDENTIALS, PASSWORD);
DirContext ctx = new InitialDirContext(env);
boolean result = ctx != null;
if(ctx != null)
ctx.close();
return result;
}catch (Exception e) {
throw new RuntimeException("Invalid credentials"+e.getMessage());
}
}
我希望你能帮助我解决我的问题。我没有使用 LDAP 的经验,我很感激任何建议。谢谢!