diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java b/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java index f3af472b..65d0afc8 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java @@ -13,10 +13,9 @@ import org.apache.directory.api.ldap.model.entry.Attribute; import org.apache.directory.api.ldap.model.entry.Entry; import org.apache.directory.api.ldap.model.entry.Value; import org.apache.directory.api.ldap.model.message.SearchScope; -import org.apache.directory.ldap.client.api.DefaultLdapConnectionFactory; +import org.apache.directory.ldap.client.api.LdapConnection; import org.apache.directory.ldap.client.api.LdapConnectionConfig; -import org.apache.directory.ldap.client.api.LdapConnectionPool; -import org.apache.directory.ldap.client.api.ValidatingPoolableLdapConnectionFactory; +import org.apache.directory.ldap.client.api.LdapNetworkConnection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,32 +34,14 @@ public class LdapAuthenticationHandler implements AuthenticationHandler { private static final Logger log = LoggerFactory.getLogger(LdapAuthenticationHandler.class); /** - * LDAP connection pool. + * Get a LDAP connection. + * @return LdapConnection */ - private static LdapConnectionPool pool; - - /** - * Reset the LDAP pool. - */ - public static void reset() { - if (pool != null) { - try { - pool.close(); - } catch (Exception e) { - // NOP - } - } - pool = null; - } - - /** - * Initialize the LDAP pool. - */ - private static void init() { + private LdapConnection getConnection() { ConfigDao configDao = new ConfigDao(); Config ldapEnabled = configDao.getById(ConfigType.LDAP_ENABLED); - if (pool != null || ldapEnabled == null || !Boolean.parseBoolean(ldapEnabled.getValue())) { - return; + if (ldapEnabled == null || !Boolean.parseBoolean(ldapEnabled.getValue())) { + return null; } LdapConnectionConfig config = new LdapConnectionConfig(); @@ -70,25 +51,23 @@ public class LdapAuthenticationHandler implements AuthenticationHandler { config.setName(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_DN)); config.setCredentials(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_PASSWORD)); - DefaultLdapConnectionFactory factory = new DefaultLdapConnectionFactory(config); - pool = new LdapConnectionPool(new ValidatingPoolableLdapConnectionFactory(factory), null); + return new LdapNetworkConnection(config); } @Override public User authenticate(String username, String password) { - init(); - if (pool == null) { - return null; - } - // Fetch and authenticate the user Entry userEntry; - try { - EntryCursor cursor = pool.getConnection().search(ConfigUtil.getConfigStringValue(ConfigType.LDAP_BASE_DN), + try (LdapConnection ldapConnection = getConnection()) { + if (ldapConnection == null) { + return null; + } + + EntryCursor cursor = ldapConnection.search(ConfigUtil.getConfigStringValue(ConfigType.LDAP_BASE_DN), ConfigUtil.getConfigStringValue(ConfigType.LDAP_FILTER).replace("USERNAME", username), SearchScope.SUBTREE); if (cursor.next()) { userEntry = cursor.get(); - pool.getConnection().bind(userEntry.getDn(), password); + ldapConnection.bind(userEntry.getDn(), password); } else { // User not found return null; diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java index 05908242..bb1e8edd 100644 --- a/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java +++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java @@ -14,7 +14,6 @@ import com.sismics.docs.core.model.jpa.File; import com.sismics.docs.core.service.InboxService; import com.sismics.docs.core.util.ConfigUtil; import com.sismics.docs.core.util.DirectoryUtil; -import com.sismics.docs.core.util.authentication.LdapAuthenticationHandler; import com.sismics.docs.core.util.jpa.PaginatedList; import com.sismics.docs.core.util.jpa.PaginatedLists; import com.sismics.docs.rest.constant.BaseFunction; @@ -27,12 +26,6 @@ import com.sismics.util.context.ThreadLocalContext; import com.sismics.util.log4j.LogCriteria; import com.sismics.util.log4j.LogEntry; import com.sismics.util.log4j.MemoryAppender; -import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.Appender; -import org.apache.log4j.Level; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; @@ -40,6 +33,12 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import jakarta.ws.rs.*; import jakarta.ws.rs.core.Response; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Appender; +import org.apache.log4j.Level; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; @@ -854,9 +853,6 @@ public class AppResource extends BaseResource { configDao.update(ConfigType.LDAP_ENABLED, Boolean.FALSE.toString()); } - // Reset the LDAP pool to reconnect with the new configuration - LdapAuthenticationHandler.reset(); - return Response.ok().build(); } } diff --git a/pom.xml b/pom.xml index 4c7ff8f6..1994ba03 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ 1.6.14 1.15.4 4.10.0 - 2.1.2 + 2.1.3 3.0.10 5.0.0