2009-06-22 2 views
3

Я ищу отдельную библиотеку Java, которая позволяет мне анализировать выражения фильтра стиля LDAP. Является ли такая вещь доступной или же целесообразно использовать ANTLR вместо нее и построить ее самостоятельно?Есть ли отдельная библиотека Java, которая обеспечивает анализ стиля LDAP?

В качестве фона: сам фильтр отправляется через сеть, и я хочу создать, скажем, соответствующие критерии спящего режима. Я ничего не делаю с LDAP!

Любые другие идеи для независимого от технологии решения для передачи и преобразования пользовательских запросов также приветствуются.

ответ

2

Вы можете использовать общую библиотеку LDAP каталог сервера Apache.

Он доступен в мавена на

<dependency> 
    <groupId>org.apache.directory.shared</groupId> 
    <artifactId>shared-ldap</artifactId> 
    <version>0.9.15</version> 
</dependency> 

И вы можете использовать его как:

final ExprNode filter = FilterParser.parse(filterString); 
+0

Я, наконец, пришел, чтобы попробовать, и все работает отлично. – Mauli

0

Единственная библиотека разбора LDAP, которую я знаю, это .NET. System.DirectoryServices. * Теоретически вы должны иметь возможность использовать эту библиотеку в Mono для получения независимости от технологии (кроме как от самого моно или .net).

0

Вы рассматривали jldap как часть OpenLDAP?

source is available и существуют классы для разбора URL-адресов LDAP и поисковых выражений. Это больше, чем вам нужно, но вы можете использовать только объекты, не выполняя их фактически на сервере LDAP, если это то, что вы хотите сделать.

1

Вы также можете использовать Apache directory server либо для использования некоторых из его классов, например, предложения lavinio для OpenLDAP, либо для встраивания его в состав вашего приложения.

0

Чтобы уточнить, вы настроили на них запросы на sail для LDAP, если вы не пытаетесь выполнить запрос ldap.

Вы посмотрели на что-то вроде этого?

http://josql.sourceforge.net/

+0

интересно, но не то, что я ищу. В одном случае я напрямую запрашиваю java-объекты, но я также использую тот же запрос для построения SQL или Hibernate Query. – Mauli

1

OpenDS имеет статический метод класса под названием LDAPFilter называется, просто, расшифровывает, который принимает строку в качестве аргумента, например, так:

LDAPFilter parsed = LDAPFilter.decode(filter); 

Javadoc является here.

Это очень похоже на FilterParser Apache DS, хотя работа с результатом немного отличается, поскольку нет реальной существенной иерархии наследования. Одно из преимуществ, которое я нашел, заключалось в том, что он не переписывал расширяемый синтаксис правил соответствия, поэтому, если вы рассматриваете это как способ проверки и нормализации фильтров, это то, что нужно помнить.

Протест является то, что оба парсеры ожидать пробельный быть отфильтрованы заранее, поэтому убедитесь, что вы запускаете что-то вроде этого на любой входной строке заранее:

filter.replaceAll("\\s?([\\(\\|&!=:\\)])\\s?", "$1"); 

Надеется, что это помогает.

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