Я пытаюсь запустить поиск в группе, но получаю одно и то же исключение
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="(&(objectClass=user)(uid=%s))"></property>
<property description="null" name="assign-groups" value="USER"></property>
<property name="group-search-filter" value="(&(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