Search code examples
spring-bootspring-ldap

Spring Boot LDAP template query


How do I write the query in LDAP template for the following AD query:

(&(objectcategory=person)(objectclass=user)(userAccountControl:1.2.840.113556.1.4.803:=2)(|(extensionAttribute2=fte)(extensionAttribute2=intern)(extensionAttribute2=awf))(whenchanged>=20200512064756.0Z))

This is something I formed which dont seem to be working :

query().where("whenchanged").is(20200512064756.0Z),
      .and(query().where("extensionAttribute2").is("fte").or("extensionAttribute2").is("intern").or("extensionAttribute2").is("awf")),
      .and(query().where("objectcategory").is("person").and("objectclass").is("user").and("userAccountControl:1.2.840.113556.1.4.803:").is(2))

Solution

  • ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("UTC")).minusHours(inactiveHours);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss[.S]'Z'");
            AndFilter af = new AndFilter();
            af.and(new EqualsFilter("objectcategory", "person")).and(new EqualsFilter("objectclass", "user"))
                    .and(new EqualsFilter("userAccountControl:1.2.840.113556.1.4.803:", 2));
            OrFilter of = new OrFilter();
            of.or(new EqualsFilter(AD_EXTENSIONATTRIBUTE2, "fte")).or(new EqualsFilter(AD_EXTENSIONATTRIBUTE2, "awf"))
                    .or(new EqualsFilter(AD_EXTENSIONATTRIBUTE2, "intern"));
            af.append(of).append(new GreaterThanOrEqualsFilter("whenchanged", zdt.format(formatter)));