有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java GWT中使用LDAP,在localhost上工作,但不在服务器上工作>错误代码34

我正在用JavaGWT制作一个应用程序,其中LDAP用于检索大量数据。 localhost上的一切都很好,但一旦我将所有内容上传到服务器上,LDAP就会一直给我错误代码34。我做了一些研究,这是个例外。看着日志,我明白了

LDAP: error code 34 - 0000208F: NameErr: DSID-031001F7, problem 2006 (BAD_NAME), data 8350, best   match of:
'ldap:,OU=FMP-FBZ'

显然我没有给出一个有效的名字。这很奇怪,因为在本地主机上一切都很好

编辑: 我确实注意到,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个URL,这可能会造成任何麻烦吗?如果有人能给我指出正确的方向,那就太好了! 提前通知


共 (1) 个答案

  1. # 1 楼答案

    您在本地查看的LDAP与在服务器上查看的LDAP相同吗?您可能需要修剪()并清除像您提到的逗号这样的字符,但是,是的,奇怪的是,为什么这在本地并不重要