Поиск группы LDAP в Glassfish - PullRequest
       6

Поиск группы LDAP в Glassfish

0 голосов
/ 09 февраля 2012

Я пытаюсь запустить поиск в группе, но получаю одно и то же исключение

java.lang.NullPointerException
at com.sun.enterprise.security.auth.realm.ldap.LDAPRealm.groupSearch(LDAPRealm.java:705)
at com.sun.enterprise.security.auth.realm.ldap.LDAPRealm.findAndBind(LDAPRealm.java:497)
at com.sun.enterprise.security.auth.login.LDAPLoginModule.authenticate(LDAPLoginModule.java:108)
at com.sun.enterprise.security.auth.login.PasswordLoginModule.authenticateUser(PasswordLoginModule.java:117)
at com.sun.appserv.security.AppservPasswordLoginModule.login(AppservPasswordLoginModule.java:148)

Там только на пост в сети с такой же проблемой, и там не исправлено.

Это домен.xml

 <auth-realm name="EpsLdapRealm" classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm">
      <property name="directory" value="ldap://myldap:389"></property>
      <property name="base-dn" value="ou=Users,o=xxx"></property>
      <property name="jaas-context" value="ldapRealm"></property>
      <property name="search-bind-dn" value="cn=saepsman,ou=Users,ou=e-Directory,ou=Services,o=xxx"></property>
      <property name="search-bind-password" value="xxxxx"></property>
      <property name="search-filter" value="(&amp;(objectClass=user)(uid=%s))"></property>
      <property description="null" name="assign-groups" value="USER"></property>
      <property name="group-search-filter" value="(&amp;(objectClass=groupOfNames)(member=%d))"></property>
      <property name="group-base-dn" value="ou=AccessControl,o=xxx"></property>
    </auth-realm>

Аутентификация работает нормально, но групповые назначения не работают. Когда я удаляю фильтр группового поиска, я не получаю сообщение об ошибке, но также и группы не назначаются.

Группа, которую я пытаюсь сопоставить, сп = ЗГП-EPSManager-администраторы, НУ = AccessControl, о = ххй

И я делаю следующее отображение в glassfish-web.xml

<security-role-mapping>
    <role-name>ADMIN</role-name>
    <group-name>cug-EPSManager-Administrators</group-name>
</security-role-mapping>

Я также использовал

-Djava.naming.referral=follow

EDIT: Я также получаю следующее сообщение журнала, указывающее, что search-bin-dn и пароль в порядке. Я также могу просматривать дерево LDAP с учетными данными в Softerra LDAP Browser.

Error during LDAP search with filter [(&(objectClass=groupOfNames)(member=cn=cdamen,ou=Users,o=xxx))].|#]

Когда я смотрю на исходный код LDAPRealm, я вижу, что он не работает для следующего оператора

int sz = grpAttr.size();

Мне кажется, это означает, что какая-то группа была найдена, но нет атрибутов группы. Но бывают случаи, когда я запрашиваю у Софтерры странное ...

/**
 * Search for group membership using the given connection.
 *
 */
private List groupSearch(DirContext ctx, String baseDN,
                             String filter, String target)
{        
    List groupList = new ArrayList();

    try {
        String[] targets = new String[1];
        targets[0] = target;

        SearchControls ctls = new SearchControls();
        ctls.setReturningAttributes(targets);
        ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);

        NamingEnumeration e = ctx.search(baseDN,
                filter.replaceAll(Matcher.quoteReplacement("\\"), Matcher.quoteReplacement("\\\\")), ctls);

        while(e.hasMore()) {
            SearchResult res = (SearchResult)e.next();
            Attribute grpAttr = res.getAttributes().get(target);
            int sz = grpAttr.size();
            for (int i=0; i<sz; i++) {
                String s = (String)grpAttr.get(i);
                groupList.add(s);
            }
        }

    } catch (Exception e) {
        _logger.log(Level.WARNING, "ldaprealm.searcherror", filter);
        _logger.log(Level.WARNING, "security.exception", e);
    }

    return groupList;
}

Надеюсь, кто-нибудь знает решение. Coen

...