Skip to content

Commit 4ae0aa8

Browse files
committed
Log LDAP search queries. Resolves #345
1 parent abdba4c commit 4ae0aa8

File tree

1 file changed

+39
-26
lines changed

1 file changed

+39
-26
lines changed

core/src/main/java/org/springframework/ldap/core/LdapTemplate.java

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2005-2022 the original author or authors.
2+
* Copyright 2005-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -75,6 +75,7 @@
7575
* @see org.springframework.ldap.core.ContextSource
7676
* @author Mattias Hellborg Arthursson
7777
* @author Ulrik Sandberg
78+
* @author Roman Zabaluev
7879
*/
7980
public class LdapTemplate implements LdapOperations, InitializingBean {
8081

@@ -253,15 +254,10 @@ public void search(final Name base, final String filter, final SearchControls co
253254
NameClassPairCallbackHandler handler) {
254255

255256
// Create a SearchExecutor to perform the search.
256-
SearchExecutor se = new SearchExecutor() {
257-
public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
258-
return ctx.search(base, filter, controls);
259-
}
260-
};
261257
if (handler instanceof ContextMapperCallbackHandler) {
262258
assureReturnObjFlagSet(controls);
263259
}
264-
search(se, handler);
260+
search(searchExecutorWithLogging(base, filter, controls), handler);
265261
}
266262

267263
/**
@@ -272,15 +268,10 @@ public void search(final String base, final String filter, final SearchControls
272268
NameClassPairCallbackHandler handler) {
273269

274270
// Create a SearchExecutor to perform the search.
275-
SearchExecutor se = new SearchExecutor() {
276-
public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
277-
return ctx.search(base, filter, controls);
278-
}
279-
};
280271
if (handler instanceof ContextMapperCallbackHandler) {
281272
assureReturnObjFlagSet(controls);
282273
}
283-
search(se, handler);
274+
search(searchExecutorWithLogging(base, filter, controls), handler);
284275
}
285276

286277
/**
@@ -291,15 +282,10 @@ public void search(final Name base, final String filter, final SearchControls co
291282
NameClassPairCallbackHandler handler, DirContextProcessor processor) {
292283

293284
// Create a SearchExecutor to perform the search.
294-
SearchExecutor se = new SearchExecutor() {
295-
public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
296-
return ctx.search(base, filter, controls);
297-
}
298-
};
299285
if (handler instanceof ContextMapperCallbackHandler) {
300286
assureReturnObjFlagSet(controls);
301287
}
302-
search(se, handler, processor);
288+
search(searchExecutorWithLogging(base, filter, controls), handler, processor);
303289
}
304290

305291
/**
@@ -310,15 +296,10 @@ public void search(final String base, final String filter, final SearchControls
310296
NameClassPairCallbackHandler handler, DirContextProcessor processor) {
311297

312298
// Create a SearchExecutor to perform the search.
313-
SearchExecutor se = new SearchExecutor() {
314-
public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
315-
return ctx.search(base, filter, controls);
316-
}
317-
};
318299
if (handler instanceof ContextMapperCallbackHandler) {
319300
assureReturnObjFlagSet(controls);
320301
}
321-
search(se, handler, processor);
302+
search(searchExecutorWithLogging(base, filter, controls), handler, processor);
322303
}
323304

324305
/**
@@ -1689,7 +1670,7 @@ <T> Stream<T> searchForStream(LdapQuery query, Function<SearchResult, T> mapper)
16891670

16901671
assureReturnObjFlagSet(searchControls);
16911672

1692-
NamingEnumeration<SearchResult> results = unchecked(() -> ctx.search(base, encodedFilter, searchControls));
1673+
NamingEnumeration<SearchResult> results = unchecked(searchSupplier(ctx, base, encodedFilter, searchControls));
16931674
if (results == null) {
16941675
return Stream.empty();
16951676
}
@@ -1918,6 +1899,38 @@ public <T> Stream<T> findForStream(LdapQuery query, Class<T> clazz) {
19181899
return searchForStream(builder.filter(includeClass), contextMapper);
19191900
}
19201901

1902+
private SearchExecutor searchExecutorWithLogging(final Name base, final String filter,
1903+
final SearchControls controls) {
1904+
return ctx -> {
1905+
if (LOG.isDebugEnabled()) {
1906+
LOG.debug("Executing search with base [{}] and filter [{}]", base, filter);
1907+
}
1908+
return ctx.search(base, filter, controls);
1909+
};
1910+
}
1911+
1912+
private SearchExecutor searchExecutorWithLogging(final String base, final String filter,
1913+
final SearchControls controls) {
1914+
return ctx -> {
1915+
if (LOG.isDebugEnabled()) {
1916+
LOG.debug("Executing search with base [{}] and filter [{}]", base, filter);
1917+
}
1918+
return ctx.search(base, filter, controls);
1919+
};
1920+
}
1921+
1922+
private CheckedSupplier<NamingEnumeration<SearchResult>> searchSupplier(final DirContext ctx,
1923+
final Name base,
1924+
final String filter,
1925+
final SearchControls controls) {
1926+
return () -> {
1927+
if (LOG.isDebugEnabled()) {
1928+
LOG.debug("Executing search with base [{}] and filter [{}]", base, filter);
1929+
}
1930+
return ctx.search(base, filter, controls);
1931+
};
1932+
}
1933+
19211934
private <T> T unchecked(CheckedSupplier<T> supplier) {
19221935
try {
19231936
return supplier.get();

0 commit comments

Comments
 (0)