2014-12-16 3 views
1

Я делаю приложение с java GWT, где LDAP используется для извлечения кучи данных. Все работает нормально на локальном хосте, но как только я загружаю все на наш сервер, LDAP продолжает давать мне код ошибки 34. Я провел некоторое исследование, и это InvalidNameException. Глядя на логги, я получаю это;Использование LDAP в Java GWT, работающий на localhost, но не на сервере -> код ошибки 34

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

По-видимому, я не даю действительного имени. Это странно, потому что на локальном хосте все работает отлично!

редактировать: я замечаю, что есть запятая (,) сразу же после того, как «LDAP: в приведенном выше codeline, я предполагаю, что может быть причиной, но это означало бы, что-то где-то кусок код удаляется или изменяется на сервере ....

Это мой метод получения всех данных;

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-адреса, может это вызвать какие-либо проблемы? Если бы кто-нибудь мог указать мне в правильном направлении, это было бы здорово! Thnx заранее!

ответ

0

Вы смотрите на тот же LDAP локально, что и на сервере? Возможно, вам придется обрезать() и очистить символы, такие как запятая, которую вы упомянули, но, да, любопытно, почему это не имеет значения на местном уровне.

+0

Не совсем уверен, что вы подразумеваете под _ «глядя на тот же LDAP локально, что и на сервере» _, но я смотрю на те же каталоги на сервере yes. Я не думаю, что обрезка будет иметь большое значение, потому что инструкция originel содержит несколько запятых. Вы знаете, что вы ввернуты, когда даже SO не может найти ответ, хе-хе. Thnx для предложений, хотя! – Jack

Смежные вопросы