@Override
    protected FilterTemplate appendAttributeToQuery(final FilterTemplate filter, final String attribute, final List<Object> values) {
        val query = Objects.requireNonNullElseGet(filter, () -> {
            Objects.requireNonNull(this.searchFilter, "Search filter cannot be null");
            return new FilterTemplate(this.searchFilter);
        });
        if (this.isUseAllQueryAttributes() && values.size() > 1 && (this.searchFilter.contains("{0}") || this.searchFilter.contains("{user}"))) {
            LOGGER.warn("Query value will be indeterminate due to multiple attributes and no username indicator. Use attribute [{}] in query instead", attribute);
        }

        if (!values.isEmpty() && this.searchFilter.contains('{' + attribute + '}')) {
            query.setParameter(attribute, values.getFirst().toString());
            LOGGER.debug("Updated LDAP search query parameter [{}]. Query: [{}]", attribute, query.format());
        }
        return query;
    }
Person directory {@link org.apereo.cas.authentication.principal.attribute.PersonAttributeDao}
implementation that queries an LDAP directory
with ldaptive components to populate person attributes.

@author Marvin S. Addison
@since 7.1.0
support/cas-server-support-ldap-core/src/main/java/org/apereo/cas/persondir/LdapPersonAttributeDao.java