我正在使用java GWT创建一个应用程序,其中LDAP用于检索一堆数据。 在localhost上一切正常,但是一旦我上传到我们的服务器,LDAP就会一直给我错误代码34.我做了一些研究,这是一个InvalidNameException。看着logg,我明白了;
LDAP: error code 34 - 0000208F: NameErr: DSID-031001F7, problem 2006 (BAD_NAME), data 8350, best match of:
'ldap:,OU=FMP-FBZ'
显然我没有给出有效的名字。这很奇怪,因为localhost一切正常!
修改 我注意到在'ldap之后有一个逗号(,):在上面的代码行中,我猜这可能是原因,但这意味着在某个地方某个代码被删除或改变在服务器上。 ...
这是我检索所有数据的方法;
private final String PROVIDER_URL = "ldap://xxx/OU=FMP-FBZ Users, DC=xxx ,DC=xxx, DC=xxx";
private final String PROVIDER_URL_VDI = "ldap://xxx/OU=FMP-FBZ Users VDI, DC= xxx, DC=xxx, DC=xxx";
DirContext ctx = null;
NamingEnumeration results = null;
HashSet<String> LDAPloginNames = new HashSet<String>();
PROVIDER_URLS.add(PROVIDER_URL);
PROVIDER_URLS.add(PROVIDER_URL_VDI);
for (String URL : PROVIDER_URLS) {
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, URL);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=xxx,CN=xxx,DC=xxx,DC=xxx,DC=xxx");
env.put(Context.SECURITY_CREDENTIALS, "xxx");
ctx = new InitialDirContext(env);
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
results = ctx.search(PROVIDER_URL, "(objectClass=person)", controls);
while (results.hasMore()) {
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
if(attributes.get("mail")!= null) {
LDAPloginNames.add(attributes.get("name").get().toString());
}
}
} catch (NamingException e) {
System.out.print(e.getMessage());
} finally {
if (results != null) {
try {
results.close();
} catch (Exception e) {
}
}
if (ctx != null) {
try {
ctx.close();
} catch (Exception e) {
}
}
}
}
return new ArrayList<String>(LDAPloginNames);
正如您所看到的,我正在使用2个网址,这可能会造成任何麻烦吗?如果有人能指出我正确的方向,那将是伟大的! Thnx提前!
答案 0 :(得分:0)
您是否在本地查看与服务器相同的LDAP?你可能需要修剪()并清理你提到的逗号之类的字符,但是,是的,好奇为什么在本地不重要。