private Optional<HttpServletRequest> tryToGetAuthenticatedRequest(final HttpServletRequest request, final Credentials credentials) {
try (final LDAPConnection ldap = ldapConnectionFactory.buildLdapConnection()) {
for (String baseDN : ldapProperties.getBaseDn()) {
final String userDN = userDnFrom(credentials, baseDN);
try {
if (authenticate(ldap, userDN, credentials.getPassword())) {
return ldapProperties.getRoleBaseDn() != null
? Optional.of(new LdapRoleCheckingRequest(request, ldap, userDN, ldapProperties))
: Optional.of(request);
}
} catch (LDAPBindException e) {
LOG.debug("LDAPBindException for userDN: {}", userDN);
}
}
LOG.warn("Could not bind to LDAP: {}", credentials.getUsername());
} catch (LDAPException | GeneralSecurityException e) {
LOG.warn("Authentication error: ", e);
}
return Optional.empty();
}