Печать/Извлечение пользователей с ограниченными возможностями из active directory с помощью java, LDAP

#java #mysql #active-directory #ldap

Вопрос:

Я новичок здесь, как получить отключенных пользователей и распечатать их из Active Directory с помощью java. ниже приведен исходный код

ActiveDirectory.java

 public boolean isAccountEnable(String enroll) throws NamingException {
    String dn = getDistinguishedName(enroll);
    int userAccountControlOrig = Integer.parseInt(ctx.getAttributes(dn).get(USER_ACCOUNT_CONTROL_ATTRIBUTE).get().toString());
    return (userAccountControlOrig == 66080) || (userAccountControlOrig == 66048);
}
 

getDistinguishedName()

 public String getDistinguishedName(String enroll) throws NamingException {
    String dn = "";
    String searchFilter = "(amp;(objectClass=user)(sAMAccountName="   enroll   "))";
    SearchControls searchControls = new SearchControls();
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    NamingEnumeration<SearchResult> results = ctx.search(DOMAIN_ROOT, searchFilter, searchControls);
    SearchResult searchResult = null;
    if (results.hasMoreElements()) {
        searchResult = (SearchResult) results.nextElement();
        if (results.hasMoreElements()) {
            System.err.println("Matched multiple users for the accountName: "   enroll);
            return null;
        }
    }
    dn = searchResult.getNameInNamespace();
    return dn;
}
 

fetchDisableUser.java

здесь я сравниваю базу данных и active directory после сравнения, если пользователь найден отключенным, я просто хочу распечатать этого пользователя, ниже приведен исходный код

 Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select distinct PER_ID, replace(NAME, '/', '') as NAME , SEX, DESIG_NAME, DEPT_NAME from Employees;");
            List<Document> suspense = new ArrayList<>();
            while (rs.next()) {
                ActiveDirectory ad = new ActiveDirectory();
                String pid = Integer.toString(rs.getInt(1));
                if (!ad.isAccountEnable(pid)){
                    Document sup = new Document();
                    sup.append("pid", Integer.toString(rs.getInt(1)));
                    sup.append("name", rs.getString(2));
                    sup.append("gender", rs.getString(3));
                    sup.append("desig", rs.getString(4));
                    sup.append("dept", rs.getString(5));
                    
                    suspense.add(sup);
                }
            }
            st.close();
            rs.close();
            JSONObject json = new JSONObject();
            json.put("success", true);
            json.put("suspense", suspense);
            String res = json.toString();
 

Я нашел приведенный ниже код в Интернете, и я не знаю, где реализовать этот код в fetchDisableUser.java или в ActiveDirectory.java кто-нибудь может мне в этом помочь…

Проще всего использовать побитовый фильтр в запросе LDAP: (userAccountControl:1.2.840.113556.1.4.803:=2)

или

(amp;(Класс объектов=пользователь)(Категория объектов=человек)(управление учетными записями пользователей:1.2.840.113556.1.4.803:=2))