進階 LDAP 查詢
本節涵蓋如何使用 Spring LDAP 進行 LDAP 查詢的各種方法。
LDAP 查詢建構器參數
LdapQueryBuilder
及其相關類別旨在支援可以提供給 LDAP 搜尋的所有參數。 支援以下參數
-
base
:指定 LDAP 樹狀結構中搜尋應開始的根 DN。 -
searchScope
:指定搜尋應在 LDAP 樹狀結構中遍歷的深度。 -
attributes
:指定要從搜尋傳回的屬性。 預設值為全部。 -
countLimit
:指定要從搜尋傳回的最大條目數。 -
timeLimit
:指定搜尋可能花費的最長時間。 -
搜尋篩選器:我們正在尋找的條目必須滿足的條件。
LdapQueryBuilder
是透過呼叫 LdapQueryBuilder
的 query
方法來建立的。 它旨在作為流暢的建構器 API,其中首先定義基本參數,然後是篩選器規格呼叫。 一旦開始使用呼叫 LdapQueryBuilder
的 where
方法來定義篩選器條件,稍後嘗試呼叫(例如)base
將被拒絕。 基本搜尋參數是可選的,但至少需要一個篩選器規格呼叫。 以下查詢搜尋物件類別為 Person
的所有條目
Person
的所有條目import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person"))
.toList(new PersonAttributesMapper());
以下查詢搜尋物件類別為 person
且 cn=John Doe
的所有條目
person
且 cn=John Doe
的所有條目import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person").and("cn").is("John Doe"))
.toList(new PersonAttributesMapper());
以下查詢搜尋物件類別為 person
,從 dc=261consulting,dc=com
的 dc
(網域元件) 開始的所有條目
person
,從 dc=261consulting,dc=com
開始的所有條目import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().base("dc=261consulting,dc=com").where("objectclass").is("person"))
.toList(new PersonAttributesMapper());
以下查詢傳回類別為 person
,從 dc=261consulting,dc=com
的 dc
(網域元件) 開始的所有條目的 cn
(通用名稱) 屬性
Person
,從 dc=261consulting,dc=com
開始的所有條目,僅傳回 cn
屬性import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
Stream<Person> persons = ldapClient.search()
.query(query().base("dc=261consulting,dc=com")
.attributes("cn")
.where("objectclass").is("person")),
.toStream(new PersonAttributesMapper());
以下查詢使用 or
搜尋通用名稱 (cn
) 的多種拼寫方式
or
條件搜尋import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
Stream<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person"),
.and(query().where("cn").is("Doe").or("cn").is("Doo"))
.toStream(new PersonAttributesMapper());
篩選條件
先前的範例示範了 LDAP 篩選器中的簡單等於條件。 LDAP 查詢建構器支援以下條件類型
-
is
:指定等於 (=) 條件。 -
gte
:指定大於或等於 (>=) 條件。 -
lte
:指定小於或等於 (<=) 條件。 -
like
:指定 “like” 條件,其中可以在查詢中包含萬用字元 — 例如,where("cn").like("J*hn Doe")
會產生以下篩選器:(cn=J*hn Doe)
。 -
whitespaceWildcardsLike
:指定一個條件,其中所有空白字元都替換為萬用字元 — 例如,where("cn").whitespaceWildcardsLike("John Doe")
會產生以下篩選器:(cn=John*Doe)
。 -
isPresent
:指定檢查屬性是否存在的條件 — 例如,where("cn").isPresent()
會產生以下篩選器:(cn=*)
。 -
not
:指定應否定目前條件 — 例如,where("sn").not().is("Doe)
會產生以下篩選器:(!(sn=Doe))
硬編碼篩選器
在某些情況下,您可能想要指定硬編碼的篩選器作為 LdapQuery
的輸入。 LdapQueryBuilder
有兩種方法可用於此目的
-
filter(String hardcodedFilter)
:使用指定的字串作為篩選器。 請注意,指定的輸入字串不會以任何方式觸及,這表示如果您要從使用者輸入建立篩選器,則此方法不太適用。 -
filter(String filterFormat, String… params)
:使用指定的字串作為MessageFormat
的輸入,正確編碼參數並將其插入篩選器字串中的指定位置。 -
filter(Filter filter)
:使用指定的篩選器。
您不能將硬編碼的篩選器方法與先前描述的 where
方法混合使用。 它們只能擇一使用。 如果您使用 filter()
指定篩選器,則如果您嘗試在之後呼叫 where
,將會收到例外狀況。