EN · DE · RU · FR · ES

#511: LdapUtils.java

projectforge-business/src/main/java/org/projectforge/business/ldap/LdapUtils.java Тип: Java · Роль: Интеграция LDAP · Исходник: projectforge-business/src/main/java/org/projectforge/business/ldap/LdapUtils.java 334 строки · 262 кода · 48 комментариев · 24 пустых
Статические вспомогательные методы для LDAP. Набор чистых функций без побочных эффектов, предоставляющих общие вспомогательные операции.

Структура кода

Пакет: org.projectforge.business.ldap

Классы: LdapUtils

Методы (17): encodeForLDAP, encodeForLDAP, escapeCommonName, getOu, getOu, buildOu, buildOu, appendOu, getOrganizationalUnit, getOrganizationalUnit, getAttributeValue, getAttributeStringValue, getAttributeIntegerValue, putAttribute, splitMultipleAttribute, getMissedObjectClasses, addEntry

Поля (1): ATTRIBUTE_SEPARATOR_CHAR

Импорты: 8 пакетов

Исходный код (сокращённый)

package org.projectforge.business.ldap;

import org.apache.commons.lang3.StringUtils;
import org.projectforge.common.StringHelper;

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class LdapUtils
{
  private static final String ATTRIBUTE_SEPARATOR_CHAR = ",";

  // https://github.com/ESAPI/esapi-java-legacy/blob/develop/src/main/java/org/owasp/esapi/reference/DefaultEncoder.java
  public static String encodeForLDAP(String input) {
    return encodeForLDAP(input, true);
  }

  /**
   * '\' -> "\5c", '(' -> "\\28", ')' -> "\\29", '\0' -> "\00"
   * Если encodeWildcards == true: '*' -> "\2a"
   * @param input
   * @param encodeWildcards По умолчанию true
   * @return закодированная входная строка.
   * https://github.com/ESAPI/esapi-java-legacy/blob/develop/src/main/java/org/owasp/esapi/reference/DefaultEncoder.java
   */
  public static String encodeForLDAP(String input, boolean encodeWildcards) {
    if (input == null) {
      return null;
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.length(); i++) {
      char c = input.charAt(i);

      switch (c) {
        case '\\':
          sb.append("\\5c");
          break;
        case '*':
          if (encodeWildcards) {
            sb.append("\\2a");
          } else {
            sb.append(c);
          }

          break;
        case '(':
          sb.append("\\28");
          break;
        case ')':
          sb.append("\\29");
          break;
        case '\0':
          sb.append("\\00");
          break;
        default:
          sb.append(c);
      }
    }
    return sb.toString();
  }

  /**
   * Экранирует следующие символы: , (запятая), = (равно), + (плюс), < (меньше), > (больше), # (знак номера), ; (точка с запятой), \
   * (обратная косая черта) и " (кавычка).
   * @param name
   * @return null, если name равен null, иначе строка name с экранированными специальными символами.
   */
  public static String escapeCommonName(final String name)
  {
    if (name == null) {
      return null;
    }
    final StringBuilder buf = new StringBuilder(name.length() + 5);
    for (int i = 0; i < name.length(); i++) {
      final char ch = name.charAt(i);
      if (",=+<>#;\\\"".indexOf(ch) >= 0) {
        buf.append("\\");
      }
      buf.append(ch);
    }
    return buf.toString();
  }

  public static String getOu(final String... organizationalUnits)
  {
    if (organizationalUnits == null) {
      return "";
    }
    if (organizationalUnits.length == 1 && organizationalUnits[0] != null && organizationalUnits[0].startsWith("ou=")) {
      // organizationalUnit уже в форме ou=...,ou=.... Ничего делать не нужно.
      return organizationalUnits[0];
    }
    final StringBuilder buf = new StringBuilder();
    buildOu(buf, null, organizationalUnits);
    return buf.toString();
  }

  public static String getOu(final String ou, final String[] organizationalUnits)
  {
    final StringBuilder buf = new StringBuilder();
    buildOu(buf, ou, organizationalUnits);
    return buf.toString();
  }

  public static void buildOu(final StringBuilder buf, final String ou, final String[] organizationalUnits)
  {
    if (ou == null && organizationalUnits == null) {
      return;
    }
    boolean first = true;
    if (ou != null) {
      first = false;
// ... (сокращено, всего 312 строк)

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
a72903e36 *.java, *.kt: StringBuffer -> StringBuilder.
b6092df09 Авторские права 2023 -> 2024
ab45d51fa Авторские права 2001-2022 -> 2001-2023.