Skip to content

Commit 3666509

Browse files
Haaroleanjzheaux
authored andcommitted
Log LDAP Search Queries
Closes gh-345
1 parent 40874b5 commit 3666509

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.
@@ -74,6 +74,7 @@
7474
*
7575
* @author Mattias Hellborg Arthursson
7676
* @author Ulrik Sandberg
77+
* @author Roman Zabaluev
7778
* @see org.springframework.ldap.core.ContextSource
7879
*/
7980
public class LdapTemplate implements LdapOperations, InitializingBean {
@@ -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
/**
@@ -1599,7 +1580,7 @@ <T> Stream<T> searchForStream(LdapQuery query, Function<SearchResult, T> mapper)
15991580

16001581
assureReturnObjFlagSet(searchControls);
16011582

1602-
NamingEnumeration<SearchResult> results = unchecked(() -> ctx.search(base, encodedFilter, searchControls));
1583+
NamingEnumeration<SearchResult> results = unchecked(searchSupplier(ctx, base, encodedFilter, searchControls));
16031584
if (results == null) {
16041585
return Stream.empty();
16051586
}
@@ -1828,6 +1809,38 @@ public <T> Stream<T> findForStream(LdapQuery query, Class<T> clazz) {
18281809
return searchForStream(builder.filter(includeClass), contextMapper);
18291810
}
18301811

1812+
private SearchExecutor searchExecutorWithLogging(final Name base, final String filter,
1813+
final SearchControls controls) {
1814+
return ctx -> {
1815+
if (LOG.isDebugEnabled()) {
1816+
LOG.debug("Executing search with base [{}] and filter [{}]", base, filter);
1817+
}
1818+
return ctx.search(base, filter, controls);
1819+
};
1820+
}
1821+
1822+
private SearchExecutor searchExecutorWithLogging(final String base, final String filter,
1823+
final SearchControls controls) {
1824+
return ctx -> {
1825+
if (LOG.isDebugEnabled()) {
1826+
LOG.debug("Executing search with base [{}] and filter [{}]", base, filter);
1827+
}
1828+
return ctx.search(base, filter, controls);
1829+
};
1830+
}
1831+
1832+
private CheckedSupplier<NamingEnumeration<SearchResult>> searchSupplier(final DirContext ctx,
1833+
final Name base,
1834+
final String filter,
1835+
final SearchControls controls) {
1836+
return () -> {
1837+
if (LOG.isDebugEnabled()) {
1838+
LOG.debug("Executing search with base [{}] and filter [{}]", base, filter);
1839+
}
1840+
return ctx.search(base, filter, controls);
1841+
};
1842+
}
1843+
18311844
private <T> T unchecked(CheckedSupplier<T> supplier) {
18321845
try {
18331846
return supplier.get();

0 commit comments

Comments
 (0)